diff --git a/bin/lutris b/bin/lutris index 5f071d2e3..d016c0a09 100755 --- a/bin/lutris +++ b/bin/lutris @@ -32,7 +32,7 @@ sys.path.insert(0, os.path.dirname(fullPath)) from coverflow import coverflow from quidgets.widgets import dictionary_grid - +import runners from lutris import constants from lutris import AboutLutrisDialog from lutris.game import LutrisGame @@ -40,11 +40,14 @@ from lutris.config import LutrisConfig from lutris.lutrisconfig import getdatapath from lutris.runners_dialog import RunnersDialog from lutris.add_game_dialog import AddGameDialog +from lutris.mount_iso_dialog import MountIsoDialog +from lutris.installer_dialog import InstallerDialog from lutris.desktop_control import LutrisDesktopControl from lutris.google_image_dialog import GoogleImageDialog from lutris.system_config_dialog import SystemConfigDialog from lutris.edit_game_config_dialog import EditGameConfigDialog + class LutrisWindow(gtk.Window): __gtype_name__ = "LutrisWindow" @@ -193,6 +196,9 @@ class LutrisWindow(gtk.Window): self.gameName = model.get_value(select_iter, 2)["name"] self.set_game_cover() + def on_mount_iso_menuitem_activate(self,widget): + mount_iso_dialog = MountIsoDialog() + def on_fullscreen_clicked(self,widget): game = coverflow.coverflow() if game: @@ -214,7 +220,7 @@ class LutrisWindow(gtk.Window): LutrisDesktopControl().reset_desktop() def install_game(self,widget,data=None): - logging.debug("Install game : Not implemented") + installer_dialog = InstallerDialog(self) def add_game(self,widget,data=None): add_game_dialog = AddGameDialog(self) @@ -312,7 +318,6 @@ if __name__ == "__main__": if options.verbose: logging.basicConfig(level=logging.DEBUG) logging.debug('logging enabled') - print("vxbw") #run the application window = NewLutrisWindow() window.show() diff --git a/bin/winetricks b/bin/winetricks new file mode 100755 index 000000000..f91e511f4 --- /dev/null +++ b/bin/winetricks @@ -0,0 +1,2503 @@ +#!/bin/sh +# Quick and dirty script to download and install various +# redistributable runtime libraries +# +# Current maintainers: Austin English, Dan Kegel +# Copyright 2007, 2008, 2009 Google (Dan Kegel, dank@kegel.com) +# Copyright 2008, 2009 Austin English (austinenglish@gmail.com) +# Thanks to Detlef Riekenberg for lots of updates +# Thanks to Saulius Krasuckas for corrections and suggestions +# Thanks to Erik Inge Bolsø for several patches +# Thanks to Hugh Perkins for the directplay patch +# Please report problems at http://code.google.com/p/winezeug/issues +# See also http://wiki.winehq.org/winetricks +# +# Note to contributors: please avoid gnu extensions in this shell script, +# as it has to run on MacOSX and Solaris, too. A good book on the topic is +# "Portable Shell Programming" by Bruce Blinn + +#---- Constants ------------------------------------------------- + +# Name of this version of winetricks (YYYYMMDD) +VERSION=20090913 + +# Default values for important settings if not already in environment. +# These settings should not need editing here. +WINE=${WINE:-wine} +WINEPREFIX=${WINEPREFIX:-$HOME/.wine} + +# Internal variables; these locations are not too important +WINETRICKS_CACHE=$HOME/winetrickscache +# Default to hiding the directory, by popular demand +test -d "$WINETRICKS_CACHE" || WINETRICKS_CACHE=$HOME/.winetrickscache +WINETRICKS_TMP="$WINEPREFIX"/drive_c/winetrickstmp +WINETRICKS_TMP_WIN='c:\winetrickstmp' + +WINDIR="$WINEPREFIX/drive_c/windows" + +# Which sourceforge mirror to use. Rotate based on time, since +# their mirror picker sometimes persistantly sends you to a broken +# mirror. +case `date +%S` in +*[01]) SOURCEFORGE=http://internap.dl.sourceforge.net/sourceforge ;; +*[23]) SOURCEFORGE=http://easynews.dl.sourceforge.net/sourceforge ;; +*) SOURCEFORGE=http://downloads.sourceforge.net;; +esac + +#---- Functions ------------------------------------------------- + +# Check for known desktop environments +# Set variable DE to the desktop environment's name, lowercase +detectDE() { + if [ x"$KDE_FULL_SESSION" = x"true" ] + then + DE=kde + elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ] + then + DE=gnome + elif [ x"$DISPLAY" != x"" ] + then + DE=x + else + DE=none + fi +} + +warn() { + echo "$@" + + test "$GUI" = 1 || return + + case $DE in + gnome) zenity --error --title=Winetricks --text="$@" --no-wrap ;; + kde) kdialog --title Winetricks --error "$@" ;; + x) xmessage -title Winetricks -center " Error: $@ " ;; + esac +} + +die() { + warn "$@" + + exit 1 +} + +# Abort if user doesn't own the given directory (or its parent, if it doesn't exist yet) +die_if_user_not_dirowner() { + if test -d "$1" + then + checkdir="$1" + else + # fixme: quoting problem? + checkdir=`dirname "$1"` + fi + nuser=`id -u` + nowner=`ls -l -n -d "$checkdir" | awk '{print $3}'` + if test x$nuser != x$nowner + then + die "You (`id -un`) don't own $checkdir. Don't run winetricks as another user!" + fi +} + +#---------------------------------------------------------------- + +usage() { + set +x + echo "Usage: $0 [options] package [package] ..." + echo "This script can help you prepare your system for Windows applications" + echo "that mistakenly assume all users' systems have all the needed" + echo "redistributable runtime libraries or fonts." + echo "Some options require the Linux 'cabextract' program." + echo "" + echo "Options:" + echo " -q quiet. You must have already agreed to the EULAs." + echo " -v verbose" + echo " -V display Version" + echo "Packages:" + echo " art2kmin MS Access 2000 runtime. Requires Access 2000 Dev license!" + echo " atmlib Adobe Type Manager. Needed for Adobe CS4" + echo " colorprofile Standard RGB color profile" + echo " comctl32 MS common controls 5.80" + echo " comctl32.ocx MS comctl32.ocx and mscomctl.ocx, comctl32 wrappers for VB6" + echo " controlpad MS ActiveX Control Pad" + echo " corefonts MS Arial, Courier, Times fonts" + echo " cygwin Unix apps for Windows (needed by some build scripts)" + echo " d3dx9 MS d3dx9_??.dll (from DirectX 9 user redistributable)" + echo " dcom98 MS DCOM (ole32, oleaut32); requires Win98 license!" + echo " dinput8 MS dinput8.dll (from DirectX 9 user redistributable)" + echo " dirac0.8 the obsolete Dirac 0.8 directshow filter" + echo " directplay MS DirectPlay (from DirectX 9 user redistributable)" + echo " directx9 MS DirectX 9 user redistributable (not recommended! use d3dx9 instead)" + echo " divx divx video codec" + echo " dotnet11 MS .NET 1.1 (requires Windows license)" + echo " dotnet20 MS .NET 2.0 (requires Windows license)" + echo " dotnet30 MS .NET 3.0 (requires Windows license, does not work yet)" + echo " droid Droid fonts (on LCD, looks better with fontsmooth-rgb)" + echo " ffdshow ffdshow video codecs" + echo " flash Adobe Flash Player ActiveX and firefox plugins" + echo " fm20 MS Forms 2.0 Object Library" + echo " fontfix Fix bad fonts which cause crash in some apps (e.g. .net)." + echo " fontsmooth-disable Disables font smoothing" + echo " fontsmooth-gray Enables grayscale font smoothing" + echo " fontsmooth-rgb Enables subpixel smoothing for RGB LCDs" + echo " fontsmooth-bgr Enables subpixel smoothing for BGR LCDs" + echo " gdiplus MS gdiplus.dll (from powerpoint viewer)" + echo " gecko The HTML rendering Engine (Mozilla)" + echo " gecko-dbg The HTML rendering Engine (Mozilla), with debugging symbols" + echo " hosts Adds empty C:\windows\system32\drivers\etc\{hosts,services} files" + echo " icodecs Intel Codecs (Indeo)" + echo " jet40 MS Jet 4.0 Service Pack 8" + echo " liberation Red Hat Liberation fonts (Sans, Serif, Mono)" + echo " mdac25 MS MDAC 2.5: Microsoft ODBC drivers, etc." + echo " mdac27 MS MDAC 2.7" + echo " mdac28 MS MDAC 2.8" + echo " mfc40 MS mfc40 (Microsoft Foundation Classes from Visual C++ 4)" + echo " mfc42 MS mfc42 (same as vcrun6 below)" + echo " mono20 mono-2.0.1" + echo " mono22 mono-2.2" + echo " mono24 mono-2.4" + echo " msi2 MS Installer 2.0" + echo " mshflxgd MS Hierarchical Flex Grid Control" + echo " msls31 MS Line Services 3.1 (needed by native riched?)" + echo " msmask MS Masked Edit Control" + echo " msscript MS Script Control" + echo " msxml3 MS XML version 3" + echo " msxml4 MS XML version 4" + echo " msxml6 MS XML version 6" + echo " ogg ogg filters/codecs: flac, theora, speex, vorbis, schroedinger" + echo " ole2 MS 16 bit OLE" + echo " openwatcom Open Watcom C/C++ compiler (can compile win16 code!)" + echo " pdh MS pdh.dll (Performance Data Helper)" + echo " psdk2003 MS Platform SDK 2003 (crashes at end, but seems to work)" + echo " psdkvista MS Vista SDK (does not install yet)" + echo " psdkwin7 MS Windows 7 SDK (does not install yet)" + echo " python26 Python 2.6.2 (and pywin32)" + echo " quicktime72 Apple Quicktime 7.2" + echo " riched20 MS riched20 and riched32" + echo " riched30 MS riched30" + echo " shockwave Adobe Shockwave Player" + echo " tahoma MS Tahoma font (not part of corefonts)" + echo " urlmon MS urlmon.dll" + echo " vb2run MS Visual Basic 2 runtime" + echo " vb3run MS Visual Basic 3 runtime" + echo " vb4run MS Visual Basic 4 runtime" + echo " vb5run MS Visual Basic 5 runtime" + echo " vb6run MS Visual Basic 6 runtime" + echo " vc2005trial MS Visual C++ 2005 Trial" + echo " vc2005express MS Visual C++ 2005 Express" + echo " vcrun6 MS Visual C++ 6 sp4 libraries (mfc42, msvcp60, msvcrt)" + echo " vcrun2003 MS Visual C++ 2003 libraries (mfc71,msvcp71,msvcr71)" + echo " vcrun2005 MS Visual C++ 2005 sp1 libraries (mfc80,msvcp80,msvcr80)" + echo " vcrun2008 MS Visual C++ 2008 libraries (mfc90,msvcp90,msvcr90)" + echo " vjrun20 MS Visual J# 2.0 SE libraries (requires dotnet20)" + echo " wininet MS wininet.dll (requires Windows license)" + echo " wme9 MS Windows Media Encoder 9 (requires Windows license)" + echo " wmp9 MS Windows Media Player 9 (requires Windows license)" + echo " wmp10 MS Windows Media Player 10 (requires Windows license)" + echo " wenquanyi WenQuanYi CJK font (on LCD looks better with fontsmooth-rgb)" + echo " wsh56 MS Windows Scripting Host 5.6" + echo " wsh56js MS Windows scripting 5.6, jscript only, no cscript" + echo " wsh56vb MS Windows scripting 5.6, vbscript only, no cscript" + echo " xact MS XACT Engine (x3daudio?_?.dll, xactengine?_?.dll)" + echo " xvid xvid video codec" + echo "Apps:" + echo " autohotkey Autohotkey (open source gui scripting language)" + echo " firefox Firefox" + echo " ie6 Microsoft Internet Explorer 6.0" + echo " kde KDE for Windows installer" + echo " mpc Media Player Classic" + echo " vlc VLC media player" + echo "Pseudopackages:" + echo " allfonts All listed fonts (corefonts, tahoma, liberation)" + echo " allcodecs All listed codecs (xvid, ffdshow, icodecs)" + echo " fakeie6 Set registry to claim IE6sp1 is installed" + echo " native_mdac Override odbc32 and odbccp32" + echo " native_oleaut32 Override oleaut32" + echo " nt40 Set windows version to nt40" + echo " win98 Set windows version to Windows 98" + echo " win2k Set windows version to Windows 2000" + echo " winxp Set windows version to Windows XP" + echo " vista Set windows version to Windows Vista" + echo " winver= Set windows version to default (winxp)" + echo " volnum Rename drive_c to harddiskvolume0 (needed by some installers)" +} + +#---------------------------------------------------------------- +# Trivial GUI just to handle case where user tries running without commandline + +kde_showmenu() { + title="$1" + shift + text="$1" + shift + col1name="$1" + shift + col2name="$1" + shift + while test $# -gt 0 + do + args="$args $1 $1 off" + shift + done + kdialog --title "$title" --separate-output --checklist "$text" $args +} + +x_showmenu() { + title="$1" + shift + text="$1" + shift + col1name="$1" + shift + col2name="$1" + shift + if test $# -gt 0 + then + args="$1" + shift + fi + while test $# -gt 0 + do + args="$args,$1" + shift + done + (echo "$title"; echo ""; echo "$text") | \ + xmessage -print -file - -buttons "Cancel,$args" | sed 's/Cancel//' +} + +showmenu() +{ + case $DE in + kde) kde_showmenu "$@" ;; + gnome|x) x_showmenu "$@" ;; + none) usage 1>&2; exit 1;; + esac +} + +dogui() +{ + if [ $DE = gnome ] + then + echo "zenity --title 'Select a package to install' --text 'Install?' --list --checklist --column '' --column Package --column Description --height 440 --width 600 \\" > "$WINETRICKS_TMP"/zenity.sh + usage | grep '^ [a-z]' | sed 's/^ \([^ ]*\) *\(.*\)/FALSE "\1" '"'\2'/" | sed 's/$/ \\/' >> $WINETRICKS_TMP/zenity.sh + todo="`sh "$WINETRICKS_TMP"/zenity.sh | tr '|' ' '`" + else + packages=`usage | awk '/^ [a-z]/ {print $1}'` + todo="`showmenu "winetricks" "Select a package to install" "Install?" "Package" $packages`" + fi + + if test "$todo"x = x + then + exit 0 + fi +} + +#----- Helpers ------------------------------------------------ + +# Execute with error checking +try() { + # "VAR=foo try cmd" fails to put VAR in the environment + # with some versions of bash if try is a shell function?! + # Adding this explicit export works around it. + export WINEDLLOVERRIDES + echo Executing "$@" + "$@" + status=$? + if test $status -ne 0 + then + die "Note: command '$@' returned status $status. Aborting." + fi +} + +# verify an sha1sum +verify_sha1sum() { + wantsum=$1 + file=$2 + + gotsum=`$SHA1SUM < $file | sed 's/ .*//'` + if [ "$gotsum"x != "$wantsum"x ] + then + die "sha1sum mismatch! Rename $file and try again." + fi +} + +# Download a file +# Usage: package url [sha1sum [filename]] +# Caches downloads in winetrickscache/$package +download() { + if [ "$4"x != ""x ] + then + file="$4" + else + file=`basename "$2"` + fi + cache="$WINETRICKS_CACHE/$1" + mkdir -p "$cache" + if test ! -f "$cache/$file" + then + cd "$cache" + # Mac folks tend to have curl rather than wget + # On Mac, 'which' doesn't return good exit status + # Need to jam in --header "Accept-Encoding: gzip,deflate" else + # redhat.com decompresses liberation-fonts.tar.gz! + if [ -x "`which wget`" ] + then + # Use -nd to insulate ourselves from people who set -x in WGETRC + # [*] --retry-connrefused works around the broken sf.net mirroring + # system when downloading corefonts + # [*] --read-timeout is useful on the adobe server that doesn't + # close the connection unless you tell it to (control-C or closing + # the socket) + try wget -O "$file" -nd -c --read-timeout=300 --retry-connrefused --header "Accept-Encoding: gzip,deflate" "$2" + else + # curl doesn't get filename from the location given by the server! + # fortunately, we know it + try curl -L -o "$file" -C - --header "Accept-Encoding: gzip,deflate" "$2" + fi + cd "$olddir" + fi + if [ "$3"x != ""x ] + then + verify_sha1sum $3 "$cache/$file" + fi +} + +set_winver() { + echo "Setting Windows version to $1" + cat > "$WINETRICKS_TMP"/set-winver.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine] +"Version"="$1" + +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/set-winver.reg +} + +set_app_winver() { + app="$1" + version="$2" + echo "Setting $app to $version mode" + ( + echo REGEDIT4 + echo "" + echo "[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\$app]" + echo "\"Version\"=\"$version\"" + ) > "$WINETRICKS_TMP"/set-winver.reg + + try $WINE regedit "$WINETRICKS_TMP"/set-winver.reg + rm "$WINETRICKS_TMP"/set-winver.reg +} + +unset_winver() { + echo "Clearing Windows version back to default" + cat > "$WINETRICKS_TMP"/unset-winver.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine] +"Version"=- + +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/unset-winver.reg +} + +override_dlls() { + mode=$1 + shift + echo Using $mode override for following DLLs: $@ + cat > "$WINETRICKS_TMP"/override-dll.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\DllOverrides] +_EOF_ + while test "$1" != "" + do + case "$1" in + comctl32) + rm -rf "$WINDIR"/winsxs/manifests/x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest + ;; + esac + echo "\"$1\"=\"$mode\"" >> "$WINETRICKS_TMP"/override-dll.reg + shift + done + + try $WINE regedit "$WINETRICKS_TMP"/override-dll.reg + rm "$WINETRICKS_TMP"/override-dll.reg +} + +override_app_dlls() { + app=$1 + shift + mode=$1 + shift + echo Using $mode override for following DLLs when running $app: $@ + ( + echo REGEDIT4 + echo "" + echo "[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\$app\\DllOverrides]" + ) > "$WINETRICKS_TMP"/override-dll.reg + + while test "$1" != "" + do + case "$1" in + comctl32) + rm -rf "$WINDIR"/winsxs/manifests/x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.2982_none_deadbeef.manifest + ;; + esac + echo "\"$1\"=\"$mode\"" >> "$WINETRICKS_TMP"/override-dll.reg + shift + done + + try $WINE regedit "$WINETRICKS_TMP"/override-dll.reg + rm "$WINETRICKS_TMP"/override-dll.reg +} + +register_font() { + file=$1 + shift + font=$1 + #echo "Registering $file as $font" + cat > "$WINETRICKS_TMP"/register-font.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts] +"$font"="$file" +_EOF_ + # too verbose + #try $WINE regedit "$WINETRICKS_TMP"/register-font.reg + $WINE regedit "$WINETRICKS_TMP"/register-font.reg +} + +#----- common download for several verbs +helper_directx_dl() { + # Aug 2009 DirectX 9c User Redistributable + # http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=04ac064b-00d1-474e-b7b1-442d8712d553 + download . http://download.microsoft.com/download/B/7/9/B79FC9D7-47B8-48B7-A75E-101DEBEB5AB4/directx_aug2009_redist.exe 563b96a3d78d6038d10428f23954f083320b4019 + + DIRECTX_NAME=directx_aug2009_redist.exe +} + +#----- One function per package, in alphabetical order ---------- + +load_art2kmin() { + # See http://support.microsoft.com/kb/243957 + download . http://download.microsoft.com/download/office2000dev/art2kmin/1/win98/en-us/art2kmin.exe 73be2622254d1f857a204a03f068787542b985e9 + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_CACHE"/art2kmin.exe + cd "$WINETRICKS_TMP" + try $WINE Setup.exe INSTALLPFILES=1 /wait $WINETRICKS_QUIET + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_atmlib() { + # http://www.microsoft.com/downloads/details.aspx?FamilyID=1001AAF1-749F-49F4-8010-297BD6CA33A0&displaylang=en + # FIXME: This is a huge download for a single dll. + download . http://download.microsoft.com/download/E/6/A/E6A04295-D2A8-40D0-A0C5-241BFECD095E/W2KSP4_EN.EXE fadea6d94a014b039839fecc6e6a11c20afa4fa8 + cd "$WINETRICKS_TMP" + try cabextract "$WINETRICKS_CACHE"/W2KSP4_EN.EXE i386/atmlib.dl_ + try cp atmlib.dll "$WINDIR"/system32 + try rm -rf i386 + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_autohotkey() { + download . http://www.autohotkey.net/programs/AutoHotkey104803_Install.exe 5cf0f16e9aa2f2e96a3b08e0d938602aff39a33e + try $WINE "$WINETRICKS_CACHE"/AutoHotkey104803_Install.exe $WINETRICKS_S +} + +#---------------------------------------------------------------- + +load_cc580() { + # http://www.microsoft.com/downloads/details.aspx?familyid=6f94d31a-d1e0-4658-a566-93af0d8d4a1e + download . http://download.microsoft.com/download/platformsdk/redist/5.80.2614.3600/w9xnt4/en-us/cc32inst.exe 94c3c494258cc54bd65d2f0153815737644bffde + + try $WINE "$WINETRICKS_CACHE"/cc32inst.exe "/T:`$WINE winepath -w "$WINETRICKS_TMP"`" /c $WINETRICKS_QUIET + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINDIR"/temp "$WINETRICKS_TMP"/comctl32.exe + try $WINE "$WINDIR"/temp/x86/50ComUpd.Exe "/T:`$WINE winepath -w "$WINETRICKS_TMP"`" /c $WINETRICKS_QUIET + try cp "$WINETRICKS_TMP"/comcnt.dll "$WINDIR"/system32/comctl32.dll + + override_dlls native,builtin comctl32 +} + +#---------------------------------------------------------------- + +load_comctl32ocx() { + # http://www.microsoft.com/downloads/details.aspx?FamilyID=25437D98-51D0-41C1-BB14-64662F5F62FE + download . http://download.microsoft.com/download/3/a/5/3a5925ac-e779-4b1c-bb01-af67dc2f96fc/VisualBasic6-KB896559-v1-ENU.exe f52cf2034488235b37a1da837d1c40eb2a1bad84 + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/VisualBasic6-KB896559-v1-ENU.exe + try cp "$WINETRICKS_TMP"/mscomctl.ocx "$WINDIR"/system32/mscomctl.ocx + try cp "$WINETRICKS_TMP"/comctl32.ocx "$WINDIR"/system32/comctl32.ocx + try $WINE regsvr32 comctl32.ocx + try $WINE regsvr32 mscomctl.ocx +} + +#---------------------------------------------------------------- + +load_colorprofile() { + download . http://download.microsoft.com/download/whistler/hwdev1/1.0/wxp/en-us/ColorProfile.exe 6b72836b32b343c82d0760dff5cb51c2f47170eb + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_CACHE"/ColorProfile.exe + mkdir -p "$WINDIR"/system32/spool/drivers/color + try cp -f "$WINETRICKS_TMP/sRGB Color Space Profile.icm" "$WINDIR"/system32/spool/drivers/color +} + +#---------------------------------------------------------------- + +load_controlpad() { + # http://msdn.microsoft.com/en-us/library/ms968493.aspx + # Fixes error "Failed to load UniText..." + load_wsh56 + download . http://download.microsoft.com/download/activexcontrolpad/install/4.0.0.950/win98mexp/en-us/setuppad.exe 8921e0f52507ca6a373c94d222777c750fb48af7 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/setuppad.exe + echo "If setup says 'Unable to start DDE ...', press Ignore" + try $WINE "$WINETRICKS_TMP"/setup $WINETRICKS_QUIET_T +} + +#---------------------------------------------------------------- + +load_corefonts() { + # See http://corefonts.sf.net + # TODO: let user pick mirror, + # see http://corefonts.sourceforge.net/msttcorefonts-2.0-1.spec for how + # TODO: add more fonts + + # Added More Fonts (see msttcorefonts) + # [*] Pointed download locations to sites that actually contained the + # fonts to download (as of 04-03-2008) + #download . $SOURCEFORGE/corefonts/andale32.exe c4db8cbe42c566d12468f5fdad38c43721844c69 + download . $SOURCEFORGE/corefonts/arial32.exe 6d75f8436f39ab2da5c31ce651b7443b4ad2916e + download . $SOURCEFORGE/corefonts/arialb32.exe d45cdab84b7f4c1efd6d1b369f50ed0390e3d344 + download . $SOURCEFORGE/corefonts/comic32.exe 2371d0327683dcc5ec1684fe7c275a8de1ef9a51 + download . $SOURCEFORGE/corefonts/courie32.exe 06a745023c034f88b4135f5e294fece1a3c1b057 + download . $SOURCEFORGE/corefonts/georgi32.exe 90e4070cb356f1d811acb943080bf97e419a8f1e + download . $SOURCEFORGE/corefonts/impact32.exe 86b34d650cfbbe5d3512d49d2545f7509a55aad2 + download . $SOURCEFORGE/corefonts/times32.exe 20b79e65cdef4e2d7195f84da202499e3aa83060 + download . $SOURCEFORGE/corefonts/trebuc32.exe 50aab0988423efcc9cf21fac7d64d534d6d0a34a + download . $SOURCEFORGE/corefonts/verdan32.exe f5b93cedf500edc67502f116578123618c64a42a + download . $SOURCEFORGE/corefonts/webdin32.exe 2fb4a42c53e50bc70707a7b3c57baf62ba58398f + + # Natively installed versions of these fonts will cause the installers + # to exit silently. Because there are apps out there that depend on the + # files being present in the Windows font directory we use cabextract + # to obtain the files and register the fonts by hand. + + # Andale needs a FontSubstitutes entry + # try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/andale32.exe + + # Display EULA + test x"$WINETRICKS_QUIET" = x"" || try $WINE "$WINETRICKS_CACHE"/arial32.exe $WINETRICKS_QUIET + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/arial32.exe + try cp -f "$WINETRICKS_TMP"/Arial*.TTF "$winefontsdir" + register_font Arial.TTF "Arial (TrueType)" + register_font Arialbd.TTF "Arial Bold (TrueType)" + register_font Arialbi.TTF "Arial Bold Italic (TrueType)" + register_font Ariali.TTF "Arial Italic (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/arialb32.exe + try cp -f "$WINETRICKS_TMP"/AriBlk.TTF "$winefontsdir" + register_font AriBlk.TTF "Arial Black (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/comic32.exe + try cp -f "$WINETRICKS_TMP"/Comic*.TTF "$winefontsdir" + register_font Comic.TTF "Comic Sans MS (TrueType)" + register_font Comicbd.TTF "Comic Sans MS Bold (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/courie32.exe + try cp -f "$WINETRICKS_TMP"/cour*.ttf "$winefontsdir" + register_font Cour.TTF "Courier New (TrueType)" + register_font CourBD.TTF "Courier New Bold (TrueType)" + register_font CourBI.TTF "Courier New Bold Italic (TrueType)" + register_font Couri.TTF "Courier New Italic (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/georgi32.exe + try cp -f "$WINETRICKS_TMP"/Georgia*.TTF "$winefontsdir" + register_font Georgia.TTF "Georgia (TrueType)" + register_font Georgiab.TTF "Georgia Bold (TrueType)" + register_font Georgiaz.TTF "Georgia Bold Italic (TrueType)" + register_font Georgiai.TTF "Georgia Italic (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/impact32.exe + try cp -f "$WINETRICKS_TMP"/Impact.TTF "$winefontsdir" + register_font Impact.TTF "Impact (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/times32.exe + try cp -f "$WINETRICKS_TMP"/Times*.TTF "$winefontsdir" + register_font Times.TTF "Times New Roman (TrueType)" + register_font Timesbd.TTF "Times New Roman Bold (TrueType)" + register_font Timesbi.TTF "Times New Roman Bold Italic (TrueType)" + register_font Timesi.TTF "Times New Roman Italic (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/trebuc32.exe + try cp -f "$WINETRICKS_TMP"/trebuc*.ttf "$winefontsdir" + register_font Trebuc.TTF "Trebucet MS (TrueType)" + register_font Trebucbd.TTF "Trebucet MS Bold (TrueType)" + register_font Trebucbi.TTF "Trebucet MS Bold Italic (TrueType)" + register_font Trebucit.TTF "Trebucet MS Italic (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/verdan32.exe + try cp -f "$WINETRICKS_TMP"/Verdana*.TTF "$winefontsdir" + register_font Verdana.TTF "Verdana (TrueType)" + register_font Verdanab.TTF "Verdana Bold (TrueType)" + register_font Verdanaz.TTF "Verdana Bold Italic (TrueType)" + register_font Verdanai.TTF "Verdana Italic (TrueType)" + + try cabextract -q --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/webdin32.exe + try cp -f "$WINETRICKS_TMP"/Webdings.TTF "$winefontsdir" + register_font Webdings.TTF "Webdings (TrueType)" +} + +#---------------------------------------------------------------- + +load_cygwin() { + download cygwin http://cygwin.com/setup.exe 5cfb8ebe4f385b0fcffa04d22d607ec75ea05180 + mkdir "$WINEPREFIX"/drive_c/cygpkgs + test -f "$WINEPREFIX"/drive_c/cygpkgs/setup.exe || cp "$WINETRICKS_CACHE/cygwin/setup.exe" "$WINEPREFIX"/drive_c/cygpkgs + cd "$WINEPREFIX"/drive_c/cygpkgs + try $WINE setup.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_d3dx9() { + helper_directx_dl + + # Kinder, less invasive directx - only extract and override d3dx9_??.dll + cabextract -d "$WINETRICKS_TMP" -L -F '*d3dx9*x86*' "$WINETRICKS_CACHE"/$DIRECTX_NAME + for x in `ls "$WINETRICKS_TMP"/*.cab` + do + cabextract -d "$WINDIR"/system32 -L -F '*.dll' "$x" + done + + # For now, not needed, but when Wine starts preferring our builtin dll over native it will be. + override_dlls native d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30 + override_dlls native d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 + override_dlls native d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 +} + +#---------------------------------------------------------------- +load_dinput8() { + helper_directx_dl + + cabextract -d "$WINETRICKS_TMP" -L -F 'dxnt.cab' "$WINETRICKS_CACHE"/$DIRECTX_NAME + cabextract -d "$WINDIR"/system32 -L -F 'dinput8.dll' "$WINETRICKS_TMP/dxnt.cab" + + try $WINE regsvr32 dinput8 + + override_dlls native dinput8 +} + +#---------------------------------------------------------------- + +load_dirac08() { + download . http://codecpack.nl/dirac_dsfilter_080.exe aacfcddf6b2636de5f0a50422ba9155e395318af + try $WINE "$WINETRICKS_CACHE"/dirac_dsfilter_080.exe $WINETRICKS_SILENT +} + +#---------------------------------------------------------------- + +load_directplay() { + helper_directx_dl + + cabextract -d "$WINETRICKS_TMP" -L -F dxnt.cab "$WINETRICKS_CACHE"/$DIRECTX_NAME + cabextract -d "$WINDIR"/system32 -L -F 'dplaysvr.exe' "$WINETRICKS_TMP/dxnt.cab" + cabextract -d "$WINDIR"/system32 -L -F 'dplayx.dll' "$WINETRICKS_TMP/dxnt.cab" + cabextract -d "$WINDIR"/system32 -L -F 'dpnet.dll' "$WINETRICKS_TMP/dxnt.cab" + cabextract -d "$WINDIR"/system32 -L -F 'dpnhpast.dll' "$WINETRICKS_TMP/dxnt.cab" + cabextract -d "$WINDIR"/system32 -L -F 'dpwsockx.dll' "$WINETRICKS_TMP/dxnt.cab" + + try $WINE regsvr32 dplayx.dll + try $WINE regsvr32 dpnet.dll + try $WINE regsvr32 dpnhpast.dll + + override_dlls native dplayx dpnet dpnhpast dpwsockx +} + +#---------------------------------------------------------------- + +load_directx9() { + helper_directx_dl + + # Stefan suggested that, when installing, one should override as follows: + # 1) use builtin wintrust (we don't run native properly somehow?) + # 2) disable mscoree (else if it's present some module misbehaves?) + # 3) override native any directx DLL whose Wine version doesn't register itself well yet + # For #3, I have no idea which DLLs don't register themselves well yet, + # so I'm just listing a few of the basic ones. Let's whittle that + # list down as soon as we can. + echo "You probably shouldn't be using this. It's VERY invasive." + echo "Use 'winetricks d3dx9' instead." + set_winver win2k + WINEDLLOVERRIDES="wintrust=b,mscoree=,ddraw,d3d8,d3d9,dsound,dinput=n" \ + try $WINE "$WINETRICKS_CACHE"/$DIRECTX_NAME /t:"$WINETRICKS_TMP_WIN" $WINETRICKS_QUIET + + # How many of these do we really need? + # We should probably remove most of these...? + override_dlls native d3dim d3drm d3dx8 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 + override_dlls native d3dx9_30 d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 + override_dlls native d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dxof + override_dlls native dciman32 ddrawex devenum dmband dmcompos dmime dmloader dmscript dmstyle + override_dlls native dmsynth dmusic dmusic32 dnsapi dplay dplayx dpnaddr dpnet dpnhpast dpnlobby + override_dlls native dswave dxdiagn mscoree msdmo qcap quartz streamci + override_dlls builtin d3d8 d3d9 dinput dinput8 dsound + + # Should be below, but fails on Wine when used silently. + #if [ $WINETRICKS_QUIET ] + #then + # try $WINE "$WINETRICKS_TMP_WIN"/DXSETUP.exe /silent + #else + # try $WINE "$WINETRICKS_TMP_WIN"/DXSETUP.exe + #fi + + try $WINE "$WINETRICKS_TMP_WIN"/DXSETUP.exe + + unset_winver +} + +#---------------------------------------------------------------- + +load_divx() { + # 6.8.2: 02203fdc4dddd13e789c39b22902837da31d2a1d ? + # 6.8.2: e36bf87c1675d0cf9169839bc0cd8f866b9db026 as of 4 jun 2008 as http://download.divx.com/divx/DivXInstaller.exe + # 6.8.3: f4f4387ef89316aea440a29f3e24c1f1945e14af as of 20 jun 2008 as http://download.divx.com/divx/abt/b1/DivXInstaller.exe + # 6.8.4: c5fcb1465a1bb24d1c104c2588fdb6706d1e1476 as of 10 Jul 2008 as http://download.divx.com/divx/abt/b1/DivXInstaller.exe + # 6.8.4: d28a2b041f4af45d22c4dedfe7608f2958cf997d as of 23 Aug 2008 as http://download.divx.com/divx/DivXInstaller.exe + + # 7.? 4d91ef90ae26a6088851560c4263ef0cdbf09123 as of 22 Mar 2009 as http://download.divx.com/divx/DivXInstaller.exe + # 7.0.? 19c9ba3104025d1fab335e405e7f411dfbbcb477 as of 28 May 2009 as http://download.divx.com/divx/DivXInstaller.exe + # 7.0.? 786aef0f421df5e7358d2d740d9911f9afd055de as of 24 June 2009 as http://download.divx.com/divx/DivXInstaller.exe + download divx-7 http://download.divx.com/divx/DivXInstaller.exe 786aef0f421df5e7358d2d740d9911f9afd055de + + try $WINE "$WINETRICKS_CACHE"/divx-7/DivXInstaller $WINETRICKS_SILENT +} + +#---------------------------------------------------------------- + +load_dcom98() { + # Install native dcom per http://wiki.winehq.org/NativeDcom + # to avoid http://bugs.winehq.org/show_bug.cgi?id=4228 + # See http://www.microsoft.com/downloads/details.aspx?familyid=08b1ac1b-7a11-43e8-b59d-0867f9bdda66 + download . http://download.microsoft.com/download/d/1/3/d13cd456-f0cf-4fb2-a17f-20afc79f8a51/DCOM98.EXE aff002bd03f17340b2bef2e6b9ea8e3798e9ccc1 + + # Pick win98 so we can install native dcom + set_winver win98 + + # Avoid "err:setupapi:SetupDefaultQueueCallbackA copy error 5 ..." + # Those messages are suspect, probably shouldn't be err's. + rm -f "$WINDIR"/system32/ole32.dll + rm -f "$WINDIR"/system32/olepro32.dll + rm -f "$WINDIR"/system32/oleaut32.dll + rm -f "$WINDIR"/system32/rpcrt4.dll + + # Normally only need to override ole32, but overriding advpack + # as well gets us the correct exit status. + WINEDLLOVERRIDES="ole32,advpack=n" try $WINE "$WINETRICKS_CACHE"/DCOM98.EXE $WINETRICKS_QUIET + + # Set native DCOM by default for all apps (ok, this might be overkill) + override_dlls native,builtin ole32 oleaut32 rpcrt4 + + # but not for a few builtin apps that don't like it + override_app_dlls explorer.exe builtin ole32 oleaut32 rpcrt4 + override_app_dlls iexplore.exe builtin ole32 oleaut32 rpcrt4 + override_app_dlls services.exe builtin ole32 oleaut32 rpcrt4 + override_app_dlls wineboot.exe builtin ole32 oleaut32 rpcrt4 + override_app_dlls winedevice.exe builtin ole32 oleaut32 rpcrt4 + + # and undo version win98 + unset_winver +} + +#---------------------------------------------------------------- + +load_dotnet11() { + DOTNET_INSTALL_DIR="$WINDIR/Microsoft.NET/Framework/v1.1.4322" + + # need corefonts, else installer crashes + load_corefonts + + # http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3 + download dotnet11 http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe 16a354a2207c4c8846b617cbc78f7b7c1856340e + if [ $WINETRICKS_QUIET ] + then + try $WINE "$WINETRICKS_CACHE"/dotnet11/dotnetfx.exe /q /C:"install /q" + else + try $WINE "$WINETRICKS_CACHE"/dotnet11/dotnetfx.exe + fi +} + +#---------------------------------------------------------------- + +load_dotnet20() { + # If this is just a dependency check, don't re-install + if test $PACKAGE != dotnet20 && test -f "$WINDIR"/system32/l_intl.nls + then + echo "prerequisite dotnet20 already installed, skipping" + return + fi + + # Recipe from http://bugs.winehq.org/show_bug.cgi?id=10467#c57 + test -d "$WINDIR/gecko" || test -d "$WINDIR/system32/gecko" || load_gecko + set_winver win2k + # See http://kegel.com/wine/l_intl-sh.txt for how l_intl.nls was generated + download dotnet20 http://kegel.com/wine/l_intl.nls + try cp -f "$WINETRICKS_CACHE"/dotnet20/l_intl.nls "$WINDIR/system32/" + + # http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5 + download dotnet20 http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe a3625c59d7a2995fb60877b5f5324892a1693b2a + if [ "$WINETRICKS_QUIET"x = ""x ] + then + try $WINE "$WINETRICKS_CACHE"/dotnet20/dotnetfx.exe + else + try $WINE "$WINETRICKS_CACHE"/dotnet20/dotnetfx.exe /q /c:"install.exe /q" + fi + unset_winver +} + +#---------------------------------------------------------------- + +load_dotnet30() { + echo "Have to install dotnet20 before installing dotnet30... please be patient..." + load_dotnet20 + + # http://msdn.microsoft.com/en-us/netframework/bb264589.aspx + download dotnet30 http://download.microsoft.com/download/3/F/0/3F0A922C-F239-4B9B-9CB0-DF53621C57D9/dotnetfx3.exe f3d2c3c7e4c0c35450cf6dab1f9f2e9e7ff50039 + + export _SFX_CAB_SHUTDOWN_REQUEST=1 + if [ "$WINETRICKS_QUIET"x = ""x ] + then + try $WINE "$WINETRICKS_CACHE"/dotnet30/dotnetfx3.exe + else + try $WINE "$WINETRICKS_CACHE"/dotnet30/dotnetfx3.exe /q /c:"install.exe /q" + fi +} + +#---------------------------------------------------------------- + +do_droid() { + download . ${DROID_URL}$1';hb=HEAD' $3 $1 + try cp -f "$WINETRICKS_CACHE"/$1 "$winefontsdir" + register_font $1 "$2" +} + +load_droid() { + # See http://en.wikipedia.org/wiki/Droid_(font) + DROID_URL='http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=data/fonts/' + + do_droid DroidSans-Bold.ttf "Droid Sans Bold" ada4e79c592f3c54546b7587b48f2b232d95ce2f + do_droid DroidSansFallback.ttf "Droid Sans Fallback" 2f8a266389a8e22f68f402b775731eec6b760334 + do_droid DroidSansJapanese.ttf "Droid Sans Japanese" b3a248c11692aa88a30eb25df425b8910fe05dc5 + do_droid DroidSansMono.ttf "Droid Sans Mono" f0815c6f36c72be1d0f2f5e2b82fa85c8bf95655 + do_droid DroidSans.ttf "Droid Sans" da5b3c7758a2c8fbc4775beb69d7150493c7d312 + do_droid DroidSerif-BoldItalic.ttf "Droid Serif Bold Italic" c1602dc11bf0f7131aec21c7c3888195ad78e486 + do_droid DroidSerif-Bold.ttf "Droid Serif Bold" d7896b9c0723299553e95a00d27cbe52f7515c8c + do_droid DroidSerif-Italic.ttf "Droid Serif Italic" 117941be102c8f38a86a70ebccaecb8078f7027e + do_droid DroidSerif-Regular.ttf "Droid Serif" 7f243858e496ed1bb1faca9f3a7bbe52defcbb5d +} + +#---------------------------------------------------------------- + +# Fake IE per workaround in http://bugs.winehq.org/show_bug.cgi?id=3453 +# Just the first registry key works for most apps. +# The App Paths part is required by a few apps, like Quickbooks Pro; +# see http://windowsxp.mvps.org/ie/qbooks.htm +set_fakeie6() { + + cat > "$WINETRICKS_TMP"/fakeie6.reg <<"_EOF_" +REGEDIT4 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer] +"Version"="6.0.2900.2180" + +[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE] +_EOF_ + + echo -n '@="' >>"$WINETRICKS_TMP"/fakeie6.reg + echo -n "${programfilesdir_win}" | sed "s/\\\\/\\\\\\\\/" >>"$WINETRICKS_TMP"/fakeie6.reg + echo '\\\\Internet Explorer\\\\iexplore.exe"' >>"$WINETRICKS_TMP"/fakeie6.reg + + echo -n '"PATH"="' >>"$WINETRICKS_TMP"/fakeie6.reg + echo -n "${programfilesdir_win}" | sed "s/\\\\/\\\\\\\\/" >>"$WINETRICKS_TMP"/fakeie6.reg + echo '\\\\Internet Explorer"' >>"$WINETRICKS_TMP"/fakeie6.reg + + try $WINE regedit "$WINETRICKS_TMP"/fakeie6.reg + + # On old wineprefixes iexplore.exe is not created. Create a fake dll using + # shdocvw.dll that should have similar VERSIONINFO. + if [ ! -f "$programfilesdir_unix/Internet Explorer/iexplore.exe" ] + then + echo "You have an old wineprefix without iexplore.exe. Will create a fake now" + if [ ! -d "$programfilesdir_unix/Internet Explorer/iexplore.exe" ] + then + try mkdir "$programfilesdir_unix/Internet Explorer"; + fi + try cp -f "$WINDIR/system32/shdocvw.dll" "$programfilesdir_unix/Internet Explorer/iexplore.exe" + fi +} + +#---------------------------------------------------------------- + +load_firefox() { + download . "http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.5/win32/en-US/Firefox%20Setup%203.5.exe" a9ef21ba8173a5d850b408fc448a7bc889eb68cb "Firefox Setup 3.5.exe" + if [ "$WINETRICKS_QUIET"x = ""x ] + then + try $WINE "$WINETRICKS_CACHE"/"Firefox Setup 3.5.exe" + else + try $WINE "$WINETRICKS_CACHE"/"Firefox Setup 3.5.exe" -ms + fi +} + +#---------------------------------------------------------------- + +load_ffdshow() { + # ffdshow + download . $SOURCEFORGE/ffdshow-tryout/ffdshow_beta5_rev2033_20080705_clsid.exe 6da6837e2f400923ff5294a6591a88a3eee5ee40 + try $WINE "$WINETRICKS_CACHE"/ffdshow_beta5_rev2033_20080705_clsid.exe $WINETRICKS_SILENT +} + +#---------------------------------------------------------------- + +load_flash() { + # www.adobe.com/products/flashplayer/ + + # Active X plugin + # http://blogs.adobe.com/psirt/2008/03/preparing_for_april_flash_play.html + # http://fpdownload.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_active_x.msi + # 2008-04-01: old version sha1sum f4dd1c0c715b791db2c972aeba90d3b78372996a + # 2008-04-18: new version sha1sum 04ac79c4f1eb1e1ca689f27fa71f12bb5cd11cc2 + # Version 10 http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_ax.exe + # 2008-11-27: 10 sha1sum 7f6850ae815e953311bb94a8aa9d226f97a646dd + # 2009-02-27: sha1sum 86745020a25edc9695a1a6a4d59eae375665a0b3 + # 2009-07-31: sha1sum 11a81ad1b19344c28b1e1249169f15dfbd2a04f5 + + download . http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_ax.exe 11a81ad1b19344c28b1e1249169f15dfbd2a04f5 + try $WINE "$WINETRICKS_CACHE"/install_flash_player_ax.exe $WINETRICKS_S + + # Mozilla / Firefox plugin + # 2008-07-22: sha1sum 1e6f7627784a5b791e99ae9ad63133dc11c7940b + # 2008-11-27: sha1sum 20ec0300a8cae19105c903a7ec6c0801e016beb0 + # 2009-02-27: sha1sum 770db9ad471ffd4357358bc16ff0bb6c98d71e5d + # 2009-07-31: sha1sum 9590fb87cc33d3a3a1f2f42a1918f06b9f0fd88d + + download . http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player.exe 9590fb87cc33d3a3a1f2f42a1918f06b9f0fd88d + try $WINE "$WINETRICKS_CACHE"/install_flash_player.exe $WINETRICKS_S +} + +#---------------------------------------------------------------- + +load_fontfix() { + # some versions of ukai.ttf and uming.ttf crash .net and picasa + # See http://bugs.winehq.org/show_bug.cgi?id=7098#c9 + # Could fix globally, but that needs root, so just fix for wine + if test -f /usr/share/fonts/truetype/arphic/ukai.ttf + then + gotsum=`$SHA1SUM < /usr/share/fonts/truetype/arphic/ukai.ttf | sed 's/ .*//'` + # FIXME: do all affected versions of the font have same sha1sum as Gutsy? Seems unlikely. + if [ "$gotsum"x = "96e1121f89953e5169d3e2e7811569148f573985"x ] + then + download . https://launchpadlibrarian.net/1499628/ttf-arphic-ukai_0.1.20060108.orig.tar.gz 92e577602d71454a108968e79ab667451f3602a2 + cd "$WINETRICKS_TMP/" + gunzip -dc "$WINETRICKS_CACHE/ttf-arphic-ukai_0.1.20060108.orig.tar.gz" | tar -xf - + try mv ttf-arphic-ukai-0.1.20060108/*.ttf "$winefontsdir" + cd "$olddir" + fi + fi + + if test -f /usr/share/fonts/truetype/arphic/uming.ttf + then + gotsum=`$SHA1SUM < /usr/share/fonts/truetype/arphic/uming.ttf | sed 's/ .*//'` + if [ "$gotsum"x = "2a4f4a69e343c21c24d044b2cb19fd4f0decc82c"x ] + then + download . https://launchpadlibrarian.net/1564410/ttf-arphic-uming_0.1.20060108.orig.tar.gz 1439cdd731906e9e5311f320c2cb33262b24ef91 + cd "$WINETRICKS_TMP/" + gunzip -dc "$WINETRICKS_CACHE/ttf-arphic-uming_0.1.20060108.orig.tar.gz" | tar -xf - + try mv ttf-arphic-uming-0.1.20060108/*.ttf "$winefontsdir" + cd "$olddir" + fi + fi + + # Focht says Samyak is bad news, and font substitution isn't a good workaround. + if xlsfonts | grep -i samyak + then + warn "Please uninstall the Samyak font. It has been known to cause problems." + fi +} + +#---------------------------------------------------------------- +load_fs_disable() { + cat > "$WINETRICKS_TMP"/fs_disable.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Control Panel\Desktop] +"FontSmoothing"="0" +"FontSmoothingGamma"=dword:00000578 +"FontSmoothingOrientation"=dword:00000001 +"FontSmoothingType"=dword:00000000 + +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/fs_disable.reg +} +#---------------------------------------------------------------- +load_fs_grayscale() { + cat > "$WINETRICKS_TMP"/fs_grayscale.reg <<_EOF_ + +REGEDIT4 + +[HKEY_CURRENT_USER\Control Panel\Desktop] +"FontSmoothing"="2" +"FontSmoothingGamma"=dword:00000578 +"FontSmoothingOrientation"=dword:00000001 +"FontSmoothingType"=dword:00000001 + +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/fs_grayscale.reg +} +#---------------------------------------------------------------- +load_fs_bgr() { + cat > "$WINETRICKS_TMP"/fs_bgr.reg <<_EOF_ + +REGEDIT4 + +[HKEY_CURRENT_USER\Control Panel\Desktop] +"FontSmoothing"="2" +"FontSmoothingGamma"=dword:00000578 +"FontSmoothingOrientation"=dword:00000000 +"FontSmoothingType"=dword:00000002 + +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/fs_bgr.reg +} +#---------------------------------------------------------------- +load_fs_rgb() { + cat > "$WINETRICKS_TMP"/fs_rgb.reg <<_EOF_ + +REGEDIT4 + +[HKEY_CURRENT_USER\Control Panel\Desktop] +"FontSmoothing"="2" +"FontSmoothingGamma"=dword:00000578 +"FontSmoothingOrientation"=dword:00000001 +"FontSmoothingType"=dword:00000002 + +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/fs_rgb.reg +} +#---------------------------------------------------------------- + +load_gecko() { + # Load the HTML rendering Engine (Gecko) + # FIXME: shouldn't this code be in some script installed + # as part of Wine instead of in winetricks? + # (e.g. we hardcode gecko's url here, but it's normally + # only hardcoded in wine.inf, and fetched from the registry thereafter, + # so we're adding a maintenance burden here.) + case `$WINE --version` in + wine-0*|wine-1.0*|wine-1.1|wine-1.1.?|wine-1.1.11) + GECKO_DIR="$WINDIR" + GECKO_VERSION=0.1.0 + GECKO_SHA1SUM=c16f1072dc6b0ced20935662138dcf019a38cd56 + ;; + wine-1.1.1[234]*) + GECKO_DIR="$WINDIR" + GECKO_VERSION=0.9.0 + GECKO_SHA1SUM=5cf410ff7fdd3f9d625f481f9d409968728d3d09 + ;; + wine-1.1.1[56789]*|wine-1.1.2[0123456]*) + GECKO_DIR="$WINDIR" + GECKO_VERSION=0.9.1 + GECKO_SHA1SUM=9a49fc691740596517e381b47096a4bdf19a87d8 + ;; + *) + GECKO_DIR="$WINDIR/system32" + GECKO_VERSION=1.0.0 + GECKO_ARCH=-x86 + GECKO_SHA1SUM=afa22c52bca4ca77dcb9edb3c9936eb23793de01 + ;; + esac + + if test ! -f "$WINETRICKS_CACHE"/wine_gecko-$GECKO_VERSION$GECKO_ARCH.cab + then + # FIXME: busted if using curl! + download . "http://downloads.sourceforge.net/wine/wine_gecko-$GECKO_VERSION$GECKO_ARCH.cab" \ + $GECKO_SHA1SUM wine_gecko-$GECKO_VERSION$GECKO_ARCH.cab + fi + + cat > "$WINETRICKS_TMP"/geckopath.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\MSHTML\\$GECKO_VERSION] +_EOF_ + + printf '"GeckoPath"="' >>"$WINETRICKS_TMP"/geckopath.reg + case $GECKO_VERSION in + 0.*) + printf 'c:\\windows\\gecko\\'$GECKO_VERSION'\\wine_gecko\\"' | + sed "s/\\\\/\\\\\\\\/g" >> "$WINETRICKS_TMP"/geckopath.reg + ;; + 1.*) + printf 'c:\\windows\\system32\\gecko\\'$GECKO_VERSION'\\wine_gecko\\"' | + sed "s/\\\\/\\\\\\\\/g" >> "$WINETRICKS_TMP"/geckopath.reg + ;; + esac + + # extract the files + mkdir -p "$GECKO_DIR/gecko/$GECKO_VERSION" + cd "$GECKO_DIR/gecko/$GECKO_VERSION" + try cabextract $WINETRICKS_UNIXQUIET "$WINETRICKS_CACHE"/wine_gecko-$GECKO_VERSION$GECKO_ARCH.cab + cd "$olddir" + + # set install-path + try $WINE regedit "$WINETRICKS_TMP"/geckopath.reg +} + +#---------------------------------------------------------------- + +load_gecko_dbg() { + # Load the HTML rendering Engine (Gecko), with debugging symbols + # FIXME: shouldn't this code be in some script installed + # as part of Wine instead of in winetricks? + # (e.g. we hardcode gecko's url here, but it's normally + # only hardcoded in wine.inf, and fetched from the registry thereafter, + # so we're adding a maintenance burden here.) + case `$WINE --version` in + wine-0*|wine-1.0*|wine-1.1|wine-1.1.?|wine-1.1.11) + die "There isn't a gecko debug build for your Wine version." + ;; + wine-1.1.1[234]*) + GECKO_DIR="$WINDIR" + GECKO_VERSION=0.9.0 + GECKO_SHA1SUM=23e354a82d7b7e61a6abe0384cc44669fbf92f86 + ;; + wine-1.1.1[56789]*|wine-1.1.2[0123456]*) + GECKO_DIR="$WINDIR" + GECKO_VERSION=0.9.1 + GECKO_SHA1SUM=a9b58d3330f8c78524fe4683f348302bfce96ff4 + ;; + *) + GECKO_DIR="$WINDIR/system32" + GECKO_VERSION=1.0.0 + GECKO_ARCH=-x86 + GECKO_SHA1SUM=2de16b443826295f646cd5d54313ca421fd71210 + ;; + esac + + if test ! -f "$WINETRICKS_CACHE"/wine_gecko-$GECKO_VERSION$GECKO_ARCH-dbg.cab + then + # FIXME: busted if using curl! + download . "http://downloads.sourceforge.net/wine/wine_gecko-$GECKO_VERSION$GECKO_ARCH-dbg.cab" $GECKO_SHA1SUM wine_gecko-$GECKO_VERSION$GECKO_ARCH-dbg.cab + fi + + cat > "$WINETRICKS_TMP"/geckopath.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\\Software\\Wine\\MSHTML\\$GECKO_VERSION] +_EOF_ + + printf '"GeckoPath"="' >>"$WINETRICKS_TMP"/geckopath.reg + if [ ! "$GECKO_VERSION" = "1.0.0" ] + then + printf 'c:\\windows\\gecko\\'$GECKO_VERSION'\\wine_gecko\\"' | sed "s/\\\\/\\\\\\\\/g" >>"$WINETRICKS_TMP"/geckopath.reg + else + printf 'c:\\windows\\system32\\gecko\\'$GECKO_VERSION'\\wine_gecko\\"' | sed "s/\\\\/\\\\\\\\/g" >>"$WINETRICKS_TMP"/geckopath.reg + fi + + # extract the files + mkdir -p "$GECKO_DIR/gecko/$GECKO_VERSION" + cd "$GECKO_DIR/gecko/$GECKO_VERSION" + try cabextract $WINETRICKS_UNIXQUIET "$WINETRICKS_CACHE"/wine_gecko-$GECKO_VERSION$GECKO_ARCH-dbg.cab + cd "$olddir" + + # set install-path + try $WINE regedit "$WINETRICKS_TMP"/geckopath.reg +} + +#---------------------------------------------------------------- + +load_gdiplus() { + # gdiplus is documented here as a redistributable: + # http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/GDIPlus.asp + # however, there's no standalone installer. So install a random + # app that happens to bundle it. + download . http://download.microsoft.com/download/a/1/a/a1adc39b-9827-4c7a-890b-91396aed2b86/ppviewer.exe 4d13ca85d1d366167b6247ac7340b7736b1bff87 + try $WINE "$WINETRICKS_CACHE"/ppviewer.exe $WINETRICKS_QUIET + # And then make it globally available. + try cp "$programfilesdir_unix/Microsoft Office/PowerPoint Viewer/GDIPLUS.DLL" "$WINDIR"/system32/ + + # For some reason, native,builtin isn't good enough...? + override_dlls native gdiplus +} + +#---------------------------------------------------------------- + +load_hosts() { + # Create fake system32\drivers\etc\hosts and system32\drivers\etc\services files. + # The hosts file is used to map network names to IP addresses without DNS. + # The services file is used map service names to network ports. + # Some apps depend on these files, but they're not implemented in wine. + # Fortunately, empty files in the correct location satisfy those apps. + # See http://bugs.winehq.org/show_bug.cgi?id=12076 + mkdir -p "$WINDIR"/system32/drivers/etc + touch "$WINDIR"/system32/drivers/etc/hosts + touch "$WINDIR"/system32/drivers/etc/services +} + +#---------------------------------------------------------------- +load_icodecs() { + # http://downloadcenter.intel.com/Detail_Desc.aspx?strState=LIVE&ProductID=355&DwnldID=2846 + download . http://downloadmirror.intel.com/2846/eng/codinstl.exe 2c5d64f472abe3f601ce352dcca75b4f02996f8a + try $WINE "$WINETRICKS_CACHE"/codinstl.exe + # Work around bug in codec's installer? + # http://support.britannica.com/other/touchthesky/win/issues/TSTUw_150.htm + # http://appdb.winehq.org/objectManager.php?sClass=version&iId=7091 + try $WINE regsvr32 ir50_32.dll +} + +#---------------------------------------------------------------- +load_ie6() { + load_msls31 + + # Unregister Wine IE + try $WINE iexplore -unregserver + + # Change the override to the native so we are sure we use and register them + override_dlls native,builtin iexplore.exe itircl itss jscript mlang mshtml msimtf shdoclc shdocvw shlwapi urlmon + + # Remove the fake dlls from the existing WINEPREFIX + mv "$programfilesdir_unix"/"Internet Explorer"/iexplore.exe "$programfilesdir_unix"/"Internet Explorer"/iexplore.exe.bak + for dll in itircl itss jscript mlang mshtml msimtf shdoclc shdocvw shlwapi urlmon + do + test -f "$WINDIR"/system32/$dll.dll && + mv "$WINDIR"/system32/$dll.dll "$WINDIR"/system32/$dll.dll.bak + done + + # The installer doesn't want to install iexplore.exe in XP mode. + set_winver win2k + + # Workaround a IE6 Installer bug, not Wine's fault + # See http://bugs.winehq.org/show_bug.cgi?id=5409 + # Actual value downloaded doesn't matter + rm -f "$WINETRICKS_CACHE"/ie6sites.dat + download . http://www.microsoft.com/windows/ie/ie6sp1/download/rtw/x86/ie6sites.dat + + # Install + download . http://download.microsoft.com/download/ie6sp1/finrel/6_sp1/W98NT42KMeXP/EN-US/ie6setup.exe f3ab61a785eb9611fa583612e83f3b69377f2cef + + # Silent install recipe from: + # http://www.axonpro.sk/japo/info/MS/SILENT%20INSTALL/Unattended-Silent%20Installation%20Switches%20for%20Windows%20Apps.htm + if [ $WINETRICKS_QUIET ] + then + $WINE "$WINETRICKS_CACHE"/ie6setup.exe /q:a /r:n /c:"ie6wzd /S:""#e"" /q:a /r:n" + else + $WINE "$WINETRICKS_CACHE"/ie6setup.exe + fi + # IE6 exits with 194 to signal a reboot + status=$? + case $status in + 0|194) ;; + *) die ie6 installation failed + esac + + # Work around DLL registration bug until ierunonce/RunOnce/wineboot is fixed + # FIXME: whittle down this list + cd "$WINDIR"/system32/ + for i in actxprxy.dll browseui.dll browsewm.dll cdfview.dll ddraw.dll \ + dispex.dll dsound.dll iedkcs32.dll iepeers.dll iesetup.dll \ + imgutil.dll inetcomm.dll inseng.dll isetup.dll jscript.dll laprxy.dll \ + mlang.dll mshtml.dll mshtmled.dll msi.dll msident.dll \ + msoeacct.dll msrating.dll mstime.dll msxml3.dll occache.dll \ + ole32.dll oleaut32.dll olepro32.dll pngfilt.dll quartz.dll \ + rpcrt4.dll rsabase.dll rsaenh.dll scrobj.dll scrrun.dll \ + shdocvw.dll shell32.dll urlmon.dll vbscript.dll webcheck.dll \ + wshcon.dll wshext.dll asctrls.ocx hhctrl.ocx mscomct2.ocx \ + plugin.ocx proctexe.ocx tdc.ocx webcheck.dll wshom.ocx + do + $WINE regsvr32 /i $i > /dev/null 2>&1 + done + + # Set windows version back to user's default. Leave at win2k for better rendering (is there a bug for that?) + unset_winver + + # try $WINE "$programfilesdir_unix"/"Internet Explorer"/IEXPLORE.EXE http://www.winehq.org +} + +#---------------------------------------------------------------- + +load_jet40() { + # http://support.microsoft.com/kb/239114 + # See also http://bugs.winehq.org/show_bug.cgi?id=6085 + download . http://download.microsoft.com/download/4/3/9/4393c9ac-e69e-458d-9f6d-2fe191c51469/jet40sp8_9xnt.exe 8cd25342030857969ede2d8fcc34f3f7bcc2d6d4 + try $WINE "$WINETRICKS_CACHE"/jet40sp8_9xnt.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_kde() { + download . http://www.winkde.org/pub/kde/ports/win32/installer/old/kdewin-installer-gui-0.9.5-0.exe c2a95102312ca859fce5190307748da51fae644e + mkdir -p "$programfilesdir_unix/kde" + try cp "$WINETRICKS_CACHE"/kdewin-installer-gui-0.9.5-0.exe "$programfilesdir_unix/kde" + cd "$programfilesdir_unix/kde" + # This reports an errorlevel of 1, even for success. See https://bugs.kde.org/show_bug.cgi?id=194796 + $WINE "$programfilesdir_win\\kde\\kdewin-installer-gui-0.9.5-0.exe" || true + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_liberation() { + # http://www.redhat.com/promo/fonts/ + case `uname -s` in + SunOS|Solaris) + echo "If you get 'ERROR: Certificate verification error for fedorahosted.org: unable to get local issuer certificate':" + echo "Then you need to add Verisign root certificates to your local keystore." + echo "OpenSolaris users, see: http://www.linuxtopia.org/online_books/opensolaris_2008/SYSADV1/html/swmgrpatchtasks-14.html" + echo "Or edit winetricks' download function, and add '--no-check-certificate' to the command." + ;; + esac + + download . https://fedorahosted.org/releases/l/i/liberation-fonts/liberation-fonts-1.04.tar.gz 097882c92e3260742a3dc3bf033792120d8635a3 + cd "$WINETRICKS_TMP" + gunzip -dc "$WINETRICKS_CACHE"/liberation-fonts-1.04.tar.gz | tar -xf - + mv liberation-fonts-1.04/*.ttf "$winefontsdir" + rm -rf "$WINETRICKS_TMP"/* + cd "$olddir" +} + +#---------------------------------------------------------------- + +set_native_mdac() { + # Set those overrides globally so user programs get MDAC's odbc + # instead of wine's unixodbc + override_dlls native,builtin odbc32 odbccp32 +} + +#---------------------------------------------------------------- + +load_mdac25() { + download mdac25 http://download.microsoft.com/download/e/e/4/ee4fe9ee-6fa1-4ab6-ab8c-fe1769f4edcf/mdac_typ.exe 09e974a5dbebaaa08c7985a4a1126886dc05fd87 + set_native_mdac + set_winver nt40 + if [ $WINETRICKS_QUIET ] + then + try $WINE "$WINETRICKS_CACHE"/mdac25/mdac_typ.exe /q /C:"setup /QNT" + else + try $WINE "$WINETRICKS_CACHE"/mdac25/mdac_typ.exe + fi + unset_winver +} + +#---------------------------------------------------------------- + +load_mdac27() { + download mdac27 http://download.microsoft.com/download/3/b/f/3bf74b01-16ba-472d-9a8c-42b2b4fa0d76/mdac_typ.exe f68594d1f578c3b47bf0639c46c11c5da161feee + set_native_mdac + set_winver win2k + if [ $WINETRICKS_QUIET ] + then + try $WINE "$WINETRICKS_CACHE"/mdac27/mdac_typ.exe /q /C:"setup /QNT" + else + try $WINE "$WINETRICKS_CACHE"/mdac27/mdac_typ.exe + fi + unset_winver +} + +#---------------------------------------------------------------- + +load_mdac28() { + download mdac28 http://download.microsoft.com/download/c/d/f/cdfd58f1-3973-4c51-8851-49ae3777586f/MDAC_TYP.EXE 91bd59f0b02b67f3845105b15a0f3502b9a2216a + set_native_mdac + set_winver win98 + if [ $WINETRICKS_QUIET ] + then + try $WINE "$WINETRICKS_CACHE"/mdac28/mdac_typ.exe /q /C:"setup /QNT" + else + try $WINE "$WINETRICKS_CACHE"/mdac28/mdac_typ.exe + fi + unset_winver +} + +#---------------------------------------------------------------- + +load_mfc40() { + # See http://support.microsoft.com/kb/122244 + download . http://download.microsoft.com/download/ole/ole2v/3.5/w351/en-us/ole2v.exe c6cac71f32405ccb09c6f375e0738e6e13f073e4 + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_CACHE"/ole2v.exe + try cp -f "$WINETRICKS_TMP"/MFC40.DLL "$WINDIR"/system32/ + + rm -rf "$WINETRICKS_TMP"/* +} + +#---------------------------------------------------------------- + +load_mono20() { + # Load Mono, have it handle all .net requests + download . ftp://ftp.novell.com/pub/mono/archive/2.0.1/windows-installer/1/mono-2.0.1-gtksharp-2.10.4-win32-1.exe ccb67ac41b59522846e47d0c423836b9d334c088 + # Anyone know how to get it to do a silent install? + try $WINE "$WINETRICKS_CACHE"/mono-2.0.1-gtksharp-2.10.4-win32-1.exe $WINETRICKS_SILENT + + cat > "$WINETRICKS_TMP"/mono_2.0.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727] +"Install"=dword:00000001 +"SP"=dword:00000001 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\policy\v2.0] +"4322"="3706-4322" +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/mono_2.0.reg + rm -f "$WINETRICKS_TMP"/mono_2.0.reg +} + +#---------------------------------------------------------------- + +load_mono22() { + # Load Mono, have it handle all .net requests + download . ftp://ftp.novell.com/pub/mono/archive/2.2/windows-installer/5/mono-2.2-gtksharp-2.12.7-win32-5.exe be977dfa9c49deea1be02ba4a2228e343f1e5840 + try $WINE "$WINETRICKS_CACHE"/mono-2.2-gtksharp-2.12.7-win32-5.exe $WINETRICKS_SILENT + + # FIXME: what should this be for mono 2.2? + cat > "$WINETRICKS_TMP"/mono_2.0.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727] +"Install"=dword:00000001 +"SP"=dword:00000001 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\policy\v2.0] +"4322"="3706-4322" +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/mono_2.0.reg + rm -f "$WINETRICKS_TMP"/mono_2.0.reg +} + +#---------------------------------------------------------------- + +load_mono24() { + # Load Mono, have it handle all .net requests + download . http://ftp.novell.com/pub/mono/archive/2.4.2.3/windows-installer/3/mono-2.4.2.3-gtksharp-2.12.9-win32-3.exe 4f0d051bcedd7668e63c12903310be0ea38f9654 + try $WINE "$WINETRICKS_CACHE"/mono-2.4.2.3-gtksharp-2.12.9-win32-3.exe $WINETRICKS_SILENT + + # FIXME: what should this be for mono 2.4? + cat > "$WINETRICKS_TMP"/mono_2.0.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727] +"Install"=dword:00000001 +"SP"=dword:00000001 + +[HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\policy\v2.0] +"4322"="3706-4322" +_EOF_ + try $WINE regedit "$WINETRICKS_TMP"/mono_2.0.reg + rm -f "$WINETRICKS_TMP"/mono_2.0.reg +} + +#---------------------------------------------------------------- + +load_mpc() { + download . $SOURCEFORGE/guliverkli2/mplayerc_20080414.zip bc9f922d7151e7cc7fef429b085cf208ef989bab + cd "$WINEPREFIX"/drive_c + try unzip "$WINETRICKS_CACHE"/mplayerc_20080414.zip + cd "$olddir" + echo MPC now available as c:/mplayerc.exe +} + +#---------------------------------------------------------------- + +load_msi2() { + # Install native msi per http://wiki.winehq.org/NativeMsi + # http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=CEBBACD8-C094-4255-B702-DE3BB768148F + download . http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe e739c40d747e7c27aacdb07b50925b1635ee7366 + + # Pick win98 so we can install native msi + set_winver win98 + + # Avoid "err:setupapi:SetupDefaultQueueCallbackA copy error 5 ..." + rm -f "$WINDIR"/system32/msi.dll + rm -f "$WINDIR"/system32/msiexec.exe + + WINEDLLOVERRIDES="msi,msiexec.exe=n" try $WINE "$WINETRICKS_CACHE"/InstMSIA.exe $WINETRICKS_QUIET + + override_dlls native,builtin msi msiexec.exe + + # and undo version win98 + unset_winver +} + +#---------------------------------------------------------------- + +load_mshflxgd() { + # http://msdn.microsoft.com/en-us/library/aa240864(VS.60).aspx + # orig: 5f9c7a81022949bfe39b50f2bbd799c448bb7377 + # Jan 2009: 7ad74e589d5eefcee67fa14e65417281d237a6b6 + # May 2009: bd8aa796e16e5f213414af78931e0379d9cbe292 + download . http://activex.microsoft.com/controls/vb6/MSHFLXGD.CAB bd8aa796e16e5f213414af78931e0379d9cbe292 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/MSHFLXGD.CAB + try cp -f "$WINETRICKS_TMP"/[Mm][Ss][Hh][Ff][Ll][Xx][Gg][Dd].[Oo][Cc][Xx] "$WINDIR"/system32 +} + +#---------------------------------------------------------------- + +load_msls31() { + # Install native Microsoft Line Services (needed by e-Sword, possibly only when using native riched20) + download . http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe e739c40d747e7c27aacdb07b50925b1635ee7366 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/InstMsiA.exe + try cp -f "$WINETRICKS_TMP"/msls31.dll "$WINDIR"/system32 +} + +#---------------------------------------------------------------- + +load_msmask() { + # http://msdn.microsoft.com/en-us/library/11405hcf(VS.71).aspx + # http://bugs.winehq.org/show_bug.cgi?id=2934 + # old: 3c6b26f68053364ea2e09414b615dbebafb9d5c3 + # May 2009: 30e55679e4a13fe4d9620404476f215f93239292 + download . http://activex.microsoft.com/controls/vb6/MSMASK32.CAB 30e55679e4a13fe4d9620404476f215f93239292 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/MSMASK32.CAB + try cp -f "$WINETRICKS_TMP"/[Mm][Ss][Mm][Aa][Ss][Kk]32.[Oo][Cc][Xx] "$WINDIR"/system32/msmask32.ocx + try $WINE regsvr32 msmask32.ocx +} + +#---------------------------------------------------------------- + +load_msscript() { + # http://msdn.microsoft.com/scripting/scriptcontrol/x86/sct10en.exe + # http://www.microsoft.com/downloads/details.aspx?familyid=d7e31492-2595-49e6-8c02-1426fec693ac + download . http://download.microsoft.com/download/d/2/a/d2a7430c-6d5b-48e9-96c4-3c751be7bffe/sct10en.exe fd9f2f23357ab11ae70682d6864f7e9f188adf2a + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/sct10en.exe + try cp -f "$WINETRICKS_TMP"/msscript.ocx "$WINDIR"/system32 + try $WINE regsvr32 msscript.ocx +} + +#---------------------------------------------------------------- + +load_msxml3() { + # Service Pack 5 + #download http://download.microsoft.com/download/a/5/e/a5e03798-2454-4d4b-89a3-4a47579891d8/msxml3.msi + # Service Pack 7 + download . http://download.microsoft.com/download/8/8/8/888f34b7-4f54-4f06-8dac-fa29b19f33dd/msxml3.msi d4c2178dfb807e1a0267fce0fd06b8d51106d913 + # http://bugs.winehq.org/show_bug.cgi?id=7849 fixed since 0.9.37 + override_dlls native,builtin msxml3 + try $WINE msiexec /i "$WINETRICKS_CACHE"/msxml3.msi $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_msxml4() { + if test ! -f "$WINETRICKS_CACHE"/msxml4.msi + then + # MS06-071: http://www.microsoft.com/downloads/details.aspx?familyid=24B7D141-6CDF-4FC4-A91B-6F18FE6921D4 + # download . http://download.microsoft.com/download/e/2/e/e2e92e52-210b-4774-8cd9-3a7a0130141d/msxml4-KB927978-enu.exe d364f9fe80c3965e79f6f64609fc253dfeb69c25 + # MS07-042: http://www.microsoft.com/downloads/details.aspx?FamilyId=021E12F5-CB46-43DF-A2B8-185639BA2807 + download . http://download.microsoft.com/download/9/4/2/9422e6b6-08ee-49cb-9f05-6c6ee755389e/msxml4-KB936181-enu.exe 73d75d7b41f8a3d49f272e74d4f73bb5e82f1acf + rm -rf "$WINETRICKS_TMP"/* + + try $WINE "$WINETRICKS_CACHE"/msxml4-KB936181-enu.exe "/x:`$WINE winepath -w "$WINETRICKS_TMP"`" $WINETRICKS_QUIET + if test ! -f "$WINETRICKS_TMP"/msxml.msi + then + die msxml.msi not found + fi + mv "$WINETRICKS_TMP"/msxml.msi "$WINETRICKS_CACHE"/msxml4.msi + fi + + try $WINE msiexec /i "$WINETRICKS_CACHE"/msxml4.msi $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_msxml6() { + # If this is just a dependency check, don't re-install + if test $PACKAGE != msxml6 && test -f "$WINDIR"/system32/msxml6.dll + then + echo "prerequisite msxml6 already installed, skipping" + return + fi + + # http://www.microsoft.com/downloads/details.aspx?FamilyID=993c0bcf-3bcf-4009-be21-27e85e1857b1 + # download . http://download.microsoft.com/download/2/e/0/2e01308a-e17f-4bf9-bf48-161356cf9c81/msxml6.msi 2308743ddb4cb56ae910e461eeb3eab0a9e58058 + # Service Pack 1 + # http://www.microsoft.com/downloads/details.aspx?familyid=D21C292C-368B-4CE1-9DAB-3E9827B70604 + download . http://download.microsoft.com/download/e/a/f/eafb8ee7-667d-4e30-bb39-4694b5b3006f/msxml6_x86.msi + + try $WINE msiexec /i "$WINETRICKS_CACHE"/msxml6_x86.msi $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_ogg() { + # flac, ogg, speex, vorbis, ogm source, ogg source + download . http://cross-lfs.org/~mlankhorst/oggcodecs_0.81.2.exe c9d10a8f1b65b9f3824e227333d66247e14fad4c + #try $WINE "$WINETRICKS_CACHE"/oggcodecs_0.81.2.exe $WINETRICKS_QUIET + # oh, and the new schroedinger direct show filter, too + # see following URLs for more info + # http://www.diracvideo.org/ + # http://cross-lfs.org/~mlankhorst/direct-schro.txt + # http://www.diracvideo.org/git?p=direct-schro.git;a=summary + # Requires wine-1.1.1 + download . http://cross-lfs.org/~mlankhorst/direct-schro.dll + try cp "$WINETRICKS_CACHE"/direct-schro.dll "$WINDIR"/system32/direct-schro.dll + # This is currently broken. Maarten's not sure why. + try $WINE regsvr32 direct-schro.dll +} + +#---------------------------------------------------------------- + +load_ole2() { + # http://support.microsoft.com/kb/123087/EN-US/ + download . http://download.microsoft.com/download/win31/update/2.03/win/en-us/ww1116.exe b803991c40f387464b61f606536b7c98a88245d2 + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_CACHE"/ww1116.exe + set_winver win31 + cd "$WINETRICKS_TMP" + try $WINE setup.exe + cd "$olddir" + unset_winver + + override_dlls native,builtin COMPOBJ.DLL OLE2CONV.DLL OLE2DISP.DLL OLE2.DLL + override_dlls native,builtin OLE2NLS.DLL OLE2PROX.DLL STORAGE.DLL TYPELIB.DLL +} + +#---------------------------------------------------------------- + +load_openwatcom() { + # http://www.openwatcom.org + download . "http://ftp.openwatcom.org/ftp/open-watcom-c-win32-1.8.exe" 44afd1fabfdf0374f614f054824e60ac560f9dc0 + if [ $WINETRICKS_QUIET ] + then + # Options documented at http://bugzilla.openwatcom.org/show_bug.cgi?id=898 + # But they don't seem to work on wine, so jam them into setup.inf + # Pick smallest installation that supports 16 bit C and C++ + cd "$WINETRICKS_TMP" + cp "$WINETRICKS_CACHE"/open-watcom-c-win32-1.8.exe . + unzip open-watcom-c-win32-1.8.exe setup.inf + sed -i 's/tools16=.*/tools16=true/' setup.inf + zip -f open-watcom-c-win32-1.8.exe + try $WINE open-watcom-c-win32-1.8.exe -s + cd "$olddir" + else + try $WINE "$WINETRICKS_CACHE"/open-watcom-c-win32-1.8.exe + fi + if test ! -f "$WINEPREFIX"/drive_c/WATCOM/binnt/wcc.exe + then + warn "c:/watcom/binnt/wcc.exe not found; you probably didn't select 16 bit tools, and won't be able to buld win16test" + fi +} + +#---------------------------------------------------------------- + +load_pdh() { + # http://support.microsoft.com/kb/284996 + download . http://download.microsoft.com/download/platformsdk/Redist/5.0.2195.2668/NT4/EN-US/pdhinst.exe f42448660def8cd7f42b34aa7bc7264745f4425e + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/pdhinst.exe + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_TMP"/pdh.exe + try cp -f "$WINETRICKS_TMP"/x86/Pdh.Dll "$WINDIR"/system32/pdh.dll +} + +#---------------------------------------------------------------- + +load_psdk2003() +{ + # Note: aborts on 64 bit windows with dialog saying "don't run on WoW" + # http://www.microsoft.com/downloads/details.aspx?familyid=0baf2b35-c656-4969-ace8-e4c0c0716adb + download psdk2003 http://download.microsoft.com/download/f/a/d/fad9efde-8627-4e7a-8812-c351ba099151/PSDK-x86.exe 5c7dc2e1eb902b376d7797cc383fefdfc64ff9c9 + echo "This takes about an hour, and fails at the end, but enough is installed to be useful, I hope. See http://bugs.winehq.org/show_bug.cgi?id=19673" + try $WINE "$WINETRICKS_CACHE"/psdk2003/PSDK-x86 +} + +#---------------------------------------------------------------- + +load_psdkvista() +{ + # http://www.microsoft.com/downloads/details.aspx?familyid=0baf2b35-c656-4969-ace8-e4c0c0716adb + warn "Vista SDK doesn't work yet as of wine-1.1.28" + load_dotnet20 + download psdkvista download.microsoft.com/download/c/a/1/ca145d10-e254-475c-85f9-1439f4cd2a9e/Setup.exe 756c21a7fc9b831f7200f3f44ae55cc7689e8063 + #chmod +x "$WINETRICKS_CACHE"/psdkvista/Setup.exe + cd "$WINETRICKS_CACHE"/psdkvista + try $WINE Setup.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_psdkwin7() +{ + # http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&displaylang=en + warn "Windows 7 SDK doesn't work yet as of wine-1.1.28" + load_vcrun2008 load_dotnet20 + download psdkwin7 http://download.microsoft.com/download/7/A/B/7ABD2203-C472-4036-8BA0-E505528CCCB7/winsdk_web.exe a01dcc67a38f461e80ea649edf1353f306582507 + #chmod +x "$WINETRICKS_CACHE"/psdkwin7/winsdk_web.exe + cd "$WINETRICKS_CACHE"/psdkwin7 + try $WINE winsdk_web.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_python26() { + download . http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi 2d1503b0e8b7e4c72a276d4d9027cf4856b208b8 + download . $SOURCEFORGE/project/pywin32/pywin32/Build%20214/pywin32-214.win32-py2.6.exe eca58f29b810d8e3e7951277ebb3e35ac35794a3 + cd "$WINETRICKS_CACHE" + try $WINE msiexec /i python-2.6.2.msi ALLUSERS=1 $WINETRICKS_QUIET + # FIXME: unzip this instead of running it if quiet install? + try $WINE pywin32-214.win32-py2.6.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_quicktime72() { + echo "Quicktime needs gdiplus..." + load_gdiplus + + # http://www.apple.com/support/downloads/quicktime72forwindows.html + download quicktime72 'http://wsidecar.apple.com/cgi-bin/nph-reg3rdpty2.pl/product=14402&cat=59&platform=osx&method=sa/QuickTimeInstaller.exe' bb89981f10cf21de57b9453e53cf81b9194271a9 + unset QUICKTIME_QUIET + if test "$WINETRICKS_QUIET"x != x + then + QUICKTIME_QUIET="/qn" # ISSETUPDRIVEN=0 + fi + # set vista mode to inhibit directdraw overlay use that blacks the screen + set_winver vista + try $WINE "$WINETRICKS_CACHE"/quicktime72/QuickTimeInstaller.exe ALLUSERS=1 DESKTOP_SHORTCUTS=0 QTTaskRunFlags=0 QTINFO.BISQTPRO=1 SCHEDULE_ASUW=0 REBOOT_REQUIRED=No $QUICKTIME_QUIET > /dev/null 2>&1 + if test "$WINETRICKS_QUIET"x = x + then + echo "You probably want to select Advanced / Safe Mode in the Quicktime control panel" + try $WINE control "$programfilesdir_win\\QuickTime\\QTSystem\\QuickTime.cpl" + fi + + unset_winver + # user might want to set vista mode himself, or run + # wine control ".wine/drive_c/Program Files/QuickTime/QTSystem/QuickTime.cpl" + # and pick Advanced / Safe Mode (gdi only). + # We could probably force that by overwriting QuickTime.qtp + # (probably in Program Files/QuickTime/QTSystem/QuickTime.qtp) + # but the format isn't known, so we'd have to override all other settings, too. +} + +#---------------------------------------------------------------- + +volnum() { + # Recent Microsoft installers are often based on "windows package manager", see + # http://support.microsoft.com/kb/262841 and + # http://www.microsoft.com/technet/prodtechnol/windowsserver2003/deployment/winupdte.mspx + # These installers check the drive name, and if it doesn't start with 'harddisk', + # they complain "Unable to find a volume for file extraction", see + # http://bugs.winehq.org/show_bug.cgi?id=5351 + # You may be able to work around this by using the installer's /x or /extract switch, + # but renaming drive_c to "harddiskvolume0" lets you just run the installer as normal. + + if test ! -d "$WINEPREFIX"/harddiskvolume0/ + then + ln -s drive_c "$WINEPREFIX"/harddiskvolume0 + rm "$WINEPREFIX"/dosdevices/c: + ln -s ../harddiskvolume0 "$WINEPREFIX"/dosdevices/c: + echo "Renamed drive_c to harddiskvolume0" + else + echo "drive_c already named harddiskvolume0" + fi +} + +#---------------------------------------------------------------- + +load_riched20() { + # http://support.microsoft.com/?kbid=249973 + download . http://download.microsoft.com/download/winntsp/Patch/RTF/NT4/EN-US/Q249973i.EXE f0b7663f15dbd31410435483ba832318c7a70470 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/Q249973i.EXE + try cp -f "$WINETRICKS_TMP"/riched??.dll "$WINDIR"/system32 + override_dlls native,builtin riched20 riched32 + + rm -rf "$WINETRICKS_TMP"/* +} + +#---------------------------------------------------------------- + +load_riched30() { + # http://www.novell.com/documentation/nm1/readmeen_web/readmeen_web.html#Akx3j64 + # claims that Groupwise Messenger's View / Text Size command + # only works with riched30, and recommends getting it by installing + # msi 2, which just happens to come with riched30 version of riched20 + # (though not with a corresponding riched32, which might be a problem) + # http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=CEBBACD8-C094-4255-B702-DE3BB768148F + download . http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe e739c40d747e7c27aacdb07b50925b1635ee7366 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/InstMsiA.exe + try cp -f "$WINETRICKS_TMP"/riched20.dll "$WINDIR"/system32 + override_dlls native,builtin riched20 + + rm -rf "$WINETRICKS_TMP"/* +} + +#---------------------------------------------------------------- + +load_shockwave() { + # Not silent enough, use msi instead + #download . http://fpdownload.macromedia.com/get/shockwave/default/english/win95nt/latest/Shockwave_Installer_Full.exe 840e34e9b067cf247bfa9092665b8966158f38e3 + #try $WINE "$WINETRICKS_CACHE"/Shockwave_Installer_Full.exe $WINETRICKS_S + # old sha1sum: 6a91a9da4b54c3fdc97130a15e1a173117e5f4ff + # 2009-07-31 sha1sum: 0bb506ef67a268e8d3fb6c7ce556320ee10b9da5 + + download . http://fpdownload.macromedia.com/get/shockwave/default/english/win95nt/latest/sw_lic_full_installer.msi 0bb506ef67a268e8d3fb6c7ce556320ee10b9da5 + try $WINE msiexec /i "$WINETRICKS_CACHE"/sw_lic_full_installer.msi $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_tahoma() { + # The tahoma and tahomabd fonts are needed by e.g. Steam + + download . http://download.microsoft.com/download/office97pro/fonts/1/w95/en-us/tahoma32.exe 888ce7b7ab5fd41f9802f3a65fd0622eb651a068 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE"/tahoma32.exe + try cp -f "$WINETRICKS_TMP"/Tahoma.TTF "$winefontsdir"/tahoma.ttf + try cp -f "$WINETRICKS_TMP"/Tahomabd.TTF "$winefontsdir"/tahomabd.ttf + chmod +w "$winefontsdir"/tahoma*.ttf + rm -rf "$WINETRICKS_TMP"/* +} + +#---------------------------------------------------------------- + +load_urlmon() { + # This is an updated urlmon from IE 6.0 + # See http://www.microsoft.com/downloads/details.aspx?familyid=85BB441A-5BB1-4A82-86EC-A249AF287513 + # (Works for Dolphin Smalltalk, see http://bugs.winehq.org/show_bug.cgi?id=8258) + download . http://download.microsoft.com/download/8/2/0/820faffc-3ea0-4914-bca3-584235964ded/Q837251.exe bcc79b92ac3c06c4de3692672c3d70bdd36be892 + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE/Q837251.exe" + try cp -f "$WINETRICKS_TMP"/URLMON.DLL "$WINDIR"/system32/urlmon.dll + override_dlls native,builtin urlmon +} + +#---------------------------------------------------------------- + +load_vb2run() { + # Not referenced on MS web anymore. But the old Microsoft Software Library FTP still has it. + # See ftp://ftp.microsoft.com/Softlib/index.txt + download . ftp://ftp.microsoft.com/Softlib/MSLFILES/VBRUN200.EXE ac0568b73ee375408778e9b505df995f79ab907e + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_CACHE"/VBRUN200.EXE + try cp -f "$WINETRICKS_TMP/VBRUN200.DLL" "$WINDIR"/system32/ + +} + +#---------------------------------------------------------------- + +load_vb3run() { + # See http://support.microsoft.com/kb/196285 + download . http://download.microsoft.com/download/vb30/utility/1/w9xnt4/en-us/vb3run.exe 518fcfefde9bf680695cadd06512efadc5ac2aa7 + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_CACHE"/vb3run.exe + try cp -f "$WINETRICKS_TMP/Vbrun300.dll" "$WINDIR"/system32/ + +} + +#---------------------------------------------------------------- + +load_vb4run() { + # See http://support.microsoft.com/kb/196286 + download . http://download.microsoft.com/download/vb40ent/sample27/1/w9xnt4/en-us/vb4run.exe 83e968063272e97bfffd628a73bf0ff5f8e1023b + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINETRICKS_TMP" "$WINETRICKS_CACHE"/vb4run.exe + try cp -f "$WINETRICKS_TMP/Vb40032.dll" "$WINDIR"/system32/ + try cp -f "$WINETRICKS_TMP/Vb40016.dll" "$WINDIR"/system32/ + +} + +#---------------------------------------------------------------- + +load_vbvm50() { + download . http://download.microsoft.com/download/vb50pro/utility/1/win98/en-us/msvbvm50.exe 28bfaf09b8ac32cf5ffa81252f3e2fadcb3a8f27 + try $WINE "$WINETRICKS_CACHE"/msvbvm50.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_vbrun60() { + download . http://download.microsoft.com/download/vb60pro/install/6/win98me/en-us/vbrun60.exe 2dc00e5fc701492bcba7ac58f057ee43751e18e5 + # Exits with status 43 for some reason? + $WINE "$WINETRICKS_CACHE"/vbrun60.exe $WINETRICKS_QUIET || true +} + +#---------------------------------------------------------------- + +load_vcrun6() { + # Load the Visual C++ 6 runtime libraries, including the elusive mfc42u.dll + + # If this is just a dependency check, don't re-install + if test $PACKAGE != vcrun6 && test -f "$WINDIR"/system32/mfc42u.dll + then + echo "prerequisite vcrun6 already installed, skipping" + return + fi + + if test ! -f "$WINETRICKS_CACHE"/vcredist.exe + then + download . http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe 382c8f5a7f41189af8d4165cf441f274b7e2a457 + rm -rf "$WINETRICKS_TMP"/* + + try $WINE "$WINETRICKS_CACHE"/vc6redistsetup_enu.exe "/T:`$WINE winepath -w "$WINETRICKS_TMP"`" /c $WINETRICKS_QUIET + if test ! -f "$WINETRICKS_TMP"/vcredist.exe + then + die vcredist.exe not found + fi + mv "$WINETRICKS_TMP"/vcredist.exe "$WINETRICKS_CACHE" + fi + # Delete some fake dlls to avoid vcredist installer warnings + rm -f "$WINDIR"/system32/msvcrt.dll + rm -f "$WINDIR"/system32/oleaut32.dll + rm -f "$WINDIR"/system32/olepro32.dll + # vcredist still exits with status 43. Anyone know why? + $WINE "$WINETRICKS_CACHE"/vcredist.exe || true + + # And then some apps need mfc42u.dll, dunno what right way + # is to get it, vcredist doesn't install it by default? + cd "$WINETRICKS_TMP"/ + rm -rf "$WINETRICKS_TMP"/* + try cabextract "$WINETRICKS_CACHE"/vcredist.exe + mv mfc42u.dll "$WINDIR"/system32/ + cd "$olddir" + + override_dlls native,builtin msvcrt + +} + +#---------------------------------------------------------------- + +load_vcrun2003() { + # Load the Visual C++ 2003 runtime libraries + # Sadly, I know of no Microsoft URL for these + echo "Installing BZFlag (which comes with the Visual C++ 2003 runtimes)" + download . $SOURCEFORGE/bzflag/BZEditW32_1.6.5_Installer.exe bdd1b32c4202fd77e6513fd507c8236888b09121 + try $WINE "$WINETRICKS_CACHE"/BZEditW32_1.6.5_Installer.exe $WINETRICKS_S + try cp "$programfilesdir_unix/BZEdit1.6.5"/m*71* "$WINDIR"/system32/ +} + +#---------------------------------------------------------------- + +load_vcrun2005() { + # Load the latest Visual C++ 2005 runtime libraries + # If this is just a dependency check, don't re-install + + # SP1 + ATL security fix build 4053 (MS09-035) + # See http://www.microsoft.com/downloads/details.aspx?familyid=766A6AF7-EC73-40FF-B072-9112BAB119C2 + if test $PACKAGE != vcrun2005 && test -d "$WINDIR"/winsxs/x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_b77cec8e + then + echo "prerequisite vcrun2005 already installed, skipping" + return + fi + download vcrun2005-ms09-035 http://download.microsoft.com/download/6/B/B/6BB661D6-A8AE-4819-B79F-236472F6070C/vcredist_x86.exe e052789ebad7dc8d6f8505a9295b0576babd125e + try $WINE "$WINETRICKS_CACHE"/vcrun2005-ms09-035/vcredist_x86.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_vcrun2008() { + # Work around bug 5351 (http://bugs.winehq.org/show_bug.cgi?id=5351). In recent + # wine (>= 1.1.7) the bug is fixed. The workaround doesn't hurt anything, and lets + # installer work on older Wine (e.g., the stabe 1.0.1). + volnum + + # Load the latest Visual C++ 2008 runtime libraries + # If this is just a dependency check, don't re-install + # SP1 + ATL security fix build 4148 (MS09-035) + # See http://www.microsoft.com/downloads/details.aspx?familyid=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c + if test $PACKAGE != vcrun2008 && test -d "$WINDIR"/winsxs/x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.30729.4148_x-ww_a57c1f53 + then + echo "prerequisite vcrun2008 already installed, skipping" + return + fi + download vcrun2008-ms09-035 http://download.microsoft.com/download/9/7/7/977B481A-7BA6-4E30-AC40-ED51EB2028F2/vcredist_x86.exe bd18409cfe75b88c2a9432d36d96f4bf125a3237 + try $WINE "$WINETRICKS_CACHE"/vcrun2008-ms09-035/vcredist_x86.exe $WINETRICKS_QUIET + +} + +#---------------------------------------------------------------- + +load_vjrun20() { + load_dotnet20 + # See http://www.microsoft.com/downloads/details.aspx?FamilyId=E9D87F37-2ADC-4C32-95B3-B5E3A21BAB2C + download vjrun20 http://download.microsoft.com/download/9/2/3/92338cd0-759f-4815-8981-24b437be74ef/vjredist.exe 80a098e36b90d159da915aebfbfbacf35f302bd8 + if [ $WINETRICKS_QUIET ] + then + try $WINE "$WINETRICKS_CACHE"/vjrun20/vjredist.exe /q /C:"install /QNT" + else + try $WINE vjrun20/vjredist.exe + fi +} + +#---------------------------------------------------------------- + +load_vc2005express() +{ + # Thanks to http://blogs.msdn.com/astebner/articles/551674.aspx for the recipe + load_dotnet20 + load_msxml6 + + # http://go.microsoft.com/fwlink/?LinkId=51410 + download vc2005express http://download.microsoft.com/download/8/3/a/83aad8f9-38ba-4503-b3cd-ba28c360c27b/ENU/vcsetup.exe 0292ae1d576edd8ee5350a27113c94c9f9958d5c + + if [ $WINETRICKS_QUIET ] + then + # Thanks to Aaron Stebner's unattended install recipe + # http://blogs.msdn.com/astebner/archive/2006/03/19/555326.aspx + + # "http://go.microsoft.com/fwlink/?LinkId=51417" + download vc2005express http://download.microsoft.com/download/0/5/A/05AA45B9-A4BE-4872-8D57-733DF5297284/Ixpvc.exe ce0da62b5649f33c7a150de276d799fb2d68d12a + + cd "$WINETRICKS_TMP" + rm -rf vc2005express.tmp || true + mkdir vc2005express.tmp + cd vc2005express.tmp + cabextract "$WINETRICKS_CACHE"/vc2005express/vcsetup.exe + cp "$WINETRICKS_CACHE"/vc2005express/Ixpvc.exe . + chmod +x Ixpvc.exe + # Add /qn after ReallySuppress for a really silent install (but then you won't see any errors) + + try $WINE Ixpvc /t:"$WINETRICKS_TMP_WIN\\\\vc2005express.tmp" /q:a /c:"msiexec /i vcsetup.msi VSEXTUI=1 ADDLOCAL=ALL REBOOT=ReallySuppress" + + cd .. + rm -rf vc2005express.tmp || true + else + warn "Don't forget to install the IDE, or mt.exe won't be installed" + try $WINE "$WINETRICKS_CACHE"/vc2005express/vcsetup.exe + # The interactive installer seems to be asynchronous, so wait until its log file directory is created + while test ! -d "$programfilesdir_unix/Microsoft Visual Studio 8/Microsoft Visual C++ 2005 Express Edition - ENU/Logs" + do + echo "Waiting for install to finish..." + sleep 10 + done + fi + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_vc2005trial() +{ + load_vcrun6 + load_dotnet20 + load_msxml6 + + echo "Downloading/checksumming Visual C++ 2005 Trial. This will take some time!" + download vc2005trial http://download.microsoft.com/download/6/f/5/6f5f7a01-50bb-422d-8742-c099c8896969/En_vs_2005_vsts_180_Trial.img 0204bce1dacfa15b45052647139b35e31e9e36ee + + # FIXME: linux-specific + IMG="$WINETRICKS_CACHE"/vc2005trial/En_vs_2005_vsts_180_Trial.img + warn "Mounting Visual Studio 2005 Trial disk image..." + case "$GUI-$DE" in + gnome) + 1-gksudo "mkdir -p /mnt/winetricks/vc2005trial" + 1-gksudo "mount -o ro,loop $IMG /mnt/winetricks/vc2005trial" + ;; + *) + sudo mkdir -p /mnt/winetricks/vc2005trial + sudo mount -o ro,loop $IMG /mnt/winetricks/vc2005trial + ;; + esac + + if false && [ $WINETRICKS_QUIET ] + then + # Thanks to http://blogs.msdn.com/astebner/archive/2005/05/24/421314.aspx for unattended install method + # See also http://support.microsoft.com/?kbid=913445 + die "not implemented yet" + else + try $WINE /mnt/winetricks/vc2005trial/vs/setup/setup.exe + while ps | grep -q setup.exe + do + sleep 10 + echo waiting for setup to finish + done + fi + + case "$GUI-$DE" in + gnome) + 1-gksudo "umount /mnt/winetricks/vc2005trial" + 1-gksudo "rm -rf /mnt/winetricks" + ;; + *) + sudo umount /mnt/winetricks/vc2005trial + sudo rm -rf /mnt/winetricks + ;; + esac +} + +#---------------------------------------------------------------- + +load_vlc() { + download . http://www.videolan.org/mirror-geo-redirect.php?file=vlc/0.8.6f/win32/vlc-0.8.6f-win32.exe b83558e4232c47a385dbc93ebdc2e6b942fbcfbf + try $WINE "$WINETRICKS_CACHE"/vlc-0.8.6f-win32.exe $WINETRICKS_S +} + +#---------------------------------------------------------------- + +load_wininet() { + # This is an updated wininet from IE 5.0.1. + # (Good enough for Active Worlds browser. Also helps "Avatar - Legends of the Arena" get to login screen.) + # See http://www.microsoft.com/downloads/details.aspx?familyid=6DEE32AB-B618-4FB3-9A45-CDD08162E167 + download . http://download.microsoft.com/download/ie5/Update/1/WIN98/EN-US/3725.exe b048e0b4e303298de3317b16f7008c43ca71ddfe + try cabextract --directory="$WINETRICKS_TMP" "$WINETRICKS_CACHE/3725.exe" + try cp -f "$WINETRICKS_TMP"/Wininet.dll "$WINDIR"/system32/wininet.dll + override_dlls native,builtin wininet +} + +#---------------------------------------------------------------- + +load_wme9() { + # See also http://www.microsoft.com/downloads/details.aspx?FamilyID=5691ba02-e496-465a-bba9-b2f1182cdf24 + download wme9 http://download.microsoft.com/download/8/1/f/81f9402f-efdd-439d-b2a4-089563199d47/WMEncoder.exe 7a3f8781f3e5705651992ef0150ee30bc1295116 + + try $WINE "$WINETRICKS_CACHE"/wme9/WMEncoder.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_wmp9() { + # Not really expected to work well yet; see + # http://appdb.winehq.org/appview.php?versionId=1449 + + load_wsh56 + + set_winver win2k + + # See also http://www.microsoft.com/windows/windowsmedia/player/9series/default.aspx + download wmp9 http://download.microsoft.com/download/1/b/c/1bc0b1a3-c839-4b36-8f3c-19847ba09299/MPSetup.exe 580536d10657fa3868de2869a3902d31a0de791b + + # Have to run twice; see http://bugs.winehq.org/show_bug.cgi?id=1886 + try $WINE "$WINETRICKS_CACHE"/wmp9/MPSetup.exe $WINETRICKS_QUIET + try $WINE "$WINETRICKS_CACHE"/wmp9/MPSetup.exe $WINETRICKS_QUIET + + # Also install the codecs + # See http://www.microsoft.com/downloads/details.aspx?FamilyID=06fcaab7-dcc9-466b-b0c4-04db144bb601 + download . http://download.microsoft.com/download/5/c/2/5c29d825-61eb-4b16-8eb8-58367d0464d5/WM9Codecs9x.exe 8b76bdcbea0057eb12b7966edab4b942ddacc253 + try $WINE "$WINETRICKS_CACHE"/WM9Codecs9x.exe $WINETRICKS_QUIET + + # Disable WMP's services, since they depend on unimplemented stuff, they trigger the GUI debugger several times + try $WINE regedit /D "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdr4_2K" + try $WINE regedit /D "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdralw2k" + + unset_winver +} + +#---------------------------------------------------------------- + +load_wmp10() { + # See http://appdb.winehq.org/appview.php?iVersionId=3212 + + load_wsh56 + + # See also http://www.microsoft.com/windows/windowsmedia/player/10 + download . http://download.microsoft.com/download/1/2/A/12A31F29-2FA9-4F50-B95D-E45EF7013F87/MP10Setup.exe 69862273a5d9d97b4a2e5a3bd93898d259e86657 + + # Crashes on exit, but otherwise ok; see http://bugs.winehq.org/show_bug.cgi?id=12633 + echo Executing $WINE "$WINETRICKS_CACHE"/MP10Setup.exe $WINETRICKS_QUIET + $WINE "$WINETRICKS_CACHE"/MP10Setup.exe $WINETRICKS_QUIET || true + + # Also install the codecs + # See http://www.microsoft.com/downloads/details.aspx?FamilyID=06fcaab7-dcc9-466b-b0c4-04db144bb601 + download . http://download.microsoft.com/download/5/c/2/5c29d825-61eb-4b16-8eb8-58367d0464d5/WM9Codecs9x.exe 8b76bdcbea0057eb12b7966edab4b942ddacc253 + set_winver win2k + try $WINE "$WINETRICKS_CACHE"/WM9Codecs9x.exe $WINETRICKS_QUIET + + # Disable WMP's services, since they depend on unimplemented stuff, they trigger the GUI debugger several times + try $WINE regedit /D "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdr4_2K" + try $WINE regedit /D "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdralw2k" + + unset_winver +} + +#---------------------------------------------------------------- + +load_wenquanyi() { + # See http://wenq.org/enindex.cgi + # Donate at http://wenq.org/enindex.cgi?Download(en)#MicroHei_Beta if you want to help support free CJK font development + download . $SOURCEFORGE/wqy/wqy-microhei-0.2.0-beta.tar.gz 28023041b22b6368bcfae076de68109b81e77976 + cd "$WINETRICKS_TMP/" + gunzip -dc "$WINETRICKS_CACHE/wqy-microhei-0.2.0-beta.tar.gz" | tar -xf - + try mv wqy-microhei/wqy-microhei.ttc "$winefontsdir" + register_font wqy-microhei.ttc "WenQuanYi Micro Hei" + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_wsh56() { + # If this is just a dependency check, don't re-install + if test $PACKAGE != wsh56 && test -f "$WINDIR"/system32/wscript.exe + then + echo "prerequisite wsh56 already installed, skipping" + return + fi + + load_vcrun6 + + # See also http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=C717D943-7E4B-4622-86EB-95A22B832CAA + download . http://download.microsoft.com/download/2/8/a/28a5a346-1be1-4049-b554-3bc5f3174353/WindowsXP-Windows2000-Script56-KB917344-x86-enu.exe f4692766caa3ee9b38d4166845486c6199a33457 + + try $WINE "$WINETRICKS_CACHE"/WindowsXP-Windows2000-Script56-KB917344-x86-enu.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_wsh56js() { + # This installs jscript 5.6 (but not vbscript) + # See also http://www.microsoft.com/downloads/details.aspx?FamilyID=16dd21a1-c4ee-4eca-8b80-7bd1dfefb4f8&DisplayLang=en + download . http://download.microsoft.com/download/b/c/3/bc3a0c36-fada-497d-a3de-8b0139766f3b/Windows2000-KB917344-56-x86-enu.exe add5f74c5bd4da6cfae47f8306de213ec6ed52c8 + + try $WINE "$WINETRICKS_CACHE"/Windows2000-KB917344-56-x86-enu.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_wsh56vb() { + # This installs vbscript 5.6 (but not jscript) + # See also http://www.microsoft.com/downloads/details.aspx?familyid=4F728263-83A3-464B-BCC0-54E63714BC75 + download . http://download.microsoft.com/download/IE60/Patch/Q318089/W9XNT4Me/EN-US/vbs56men.exe 48f14a93db33caff271da0c93f334971f9d7cb22 + + try $WINE "$WINETRICKS_CACHE"/vbs56men.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_xact() { + helper_directx_dl ; + + # xactengine?_?.dll, X3DAudio?_?.dll, xaudio?_?.dll, xapofx?_?.dll - extract + cabextract -d "$WINETRICKS_TMP" -L -F '*_xact_*x86*' "$WINETRICKS_CACHE"/$DIRECTX_NAME + cabextract -d "$WINETRICKS_TMP" -L -F '*_x3daudio_*x86*' "$WINETRICKS_CACHE"/$DIRECTX_NAME + cabextract -d "$WINETRICKS_TMP" -L -F '*_xaudio_*x86*' "$WINETRICKS_CACHE"/$DIRECTX_NAME + for x in `ls "$WINETRICKS_TMP"/*.cab` + do + cabextract -d "$WINDIR"/system32 -L -F '*.dll' "$x" + done + + # xactengine?_?.dll, xaudio?_?.dll - register + for x in `ls "$WINDIR"/system32/xactengine* "$WINDIR"/system32/xaudio*` + do + try $WINE regsvr32 `basename $x` + done +} + +#---------------------------------------------------------------- + +load_xvid() { + # xvid + load_vcrun6 + download . http://www.koepi.info/Xvid-1.2.2-07062009.exe 435203e7f713c4484ca4f50f43e847f3dc118962 + try $WINE "$WINETRICKS_CACHE"/Xvid-1.2.2-07062009.exe $WINETRICKS_SILENT +} + +#---------------------------------------------------------------- + +print_version() { + echo "$VERSION" +} + +#--------- Main program ----------------------------------------- + +# On Solaris, choose more modern commands (needed for id -u). +case `uname -s` in +SunOS) PATH="/usr/xpg6/bin:/usr/xpg4/bin:$PATH" + ;; +esac + +case "$1" in +-V|--version) + echo "Winetricks version $VERSION. (C) 2007-2009 Dan Kegel et al. LGPL." + exit 0 + ;; +esac + +detectDE + +GUI=0 +case x"$1" in +x) GUI=1 ;; +x-h|x--help|xhelp) usage ; exit 1 ;; +esac + +# Prevent running with wrong user id. +# It's bad to create files as the wrong user! +die_if_user_not_dirowner "$WINEPREFIX" +die_if_user_not_dirowner "$WINETRICKS_CACHE" + +mkdir -p "$WINETRICKS_TMP" + +case $GUI in +1) dogui ; set $todo ;; +esac + +if [ ! -x "`which "$WINE"`" ] +then + die "Cannot find wine ($WINE)" +fi + +test -d "$WINEPREFIX" || $WINE cmd /c echo yes > /dev/null 2>&1 +mkdir -p "$WINETRICKS_CACHE" +olddir=`pwd` +# Clean up after failed runs, if needed +rm -rf "$WINETRICKS_TMP"/* + +# The folder-name is localized! +programfilesdir_win="`unset WINEDEBUG; $WINE cmd.exe /c echo "%ProgramFiles%"`" +test x"$programfilesdir_win" != x || die "$WINE cmd.exe /c echo '%ProgramFiles%' returned empty string" +programfilesdir_unix="`unset WINEDEBUG; $WINE winepath -u "$programfilesdir_win"`" +test x"$programfilesdir_unix" != x || die "winepath -u $programfilesdir_win returned empty string" + +# (Fixme: get fonts path from SHGetFolderPath +# See also http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx) +# +# Did the user rename Fonts to fonts? +if test ! -d "$WINDIR"/Fonts && test -d "$WINDIR"/fonts +then + winefontsdir="$WINDIR"/fonts +else + winefontsdir="$WINDIR"/Fonts +fi + +# Mac folks tend to not have sha1sum, but we can make do with openssl +if [ -x "`which sha1sum`" ] +then + SHA1SUM="sha1sum" +elif [ -x "`which openssl`" ] +then + SHA1SUM="openssl dgst -sha1" +else + die "No sha1sum utility available." +fi + +if [ ! -x "`which cabextract`" ] +then + die "Cannot find cabextract. Please install it (e.g. 'sudo apt-get install cabextract' or 'sudo yum install cabextract')." +fi + +if [ ! -x "`which unzip`" ] +then + die "Cannot find unzip. Please install it (e.g. 'sudo apt-get install unzip' or 'sudo yum install unzip')." +fi + +while test "$1" != "" +do + PACKAGE=$1 + case $1 in + -q) WINETRICKS_QUIET="/q" + WINETRICKS_QUIET_T="/qt" # Microsoft Control Pad + WINETRICKS_UNIXQUIET="-q" + WINETRICKS_SILENT="/silent" + WINETRICKS_S="/S" # for NSIS installers + WINEDEBUG=${WINEDEBUG:-"fixme-all"} + export WINEDEBUG + ;; + -v) set -x;; + art2kmin) load_art2kmin;; + atmlib) load_atmlib;; + ahk|autohotkey) load_autohotkey;; + cc580|comctl32) load_cc580;; + comctl32.ocx) load_comctl32ocx;; + colorprofile) load_colorprofile;; + corefonts) load_corefonts;; + controlpad|fm20) load_controlpad;; + cygwin) load_cygwin;; + d3dx9) load_d3dx9;; + dcom98) load_dcom98;; + dinput8) load_dinput8;; + dirac|dirac0.8) load_dirac08;; + directplay|dxplay|dplay) load_directplay;; + directx9) load_directx9;; + divx) load_divx;; + dotnet1|dotnet11) load_dotnet11; load_fontfix;; + dotnet2|dotnet20) load_dotnet20; load_fontfix;; + dotnet3|dotnet30) load_dotnet30; load_fontfix;; + droid) load_droid;; + firefox|firefox3) load_firefox;; + ffdshow) load_ffdshow;; + flash) load_flash;; + fontfix) load_fontfix;; + fontsmooth-disable|fs-disable) load_fs_disable;; + fontsmooth-gray|fontsmooth-grayscale|fontsmooth-enable|fs-enable) load_fs_grayscale;; + fontsmooth-rgb|fs-rgb|fs-cleartype) load_fs_rgb;; + fontsmooth-bgr|fs-bgr) load_fs_bgr;; + gdiplus) load_gdiplus;; + gecko) load_gecko;; + gecko-dbg|geckodbg|gecko_dbg|geckodebug|gecko_debug|gecko-debug) load_gecko_dbg;; + hosts) load_hosts;; + icodecs) load_icodecs;; + ie6) load_ie6;; + jet40) load_jet40;; + kde) load_kde;; + liberation) load_liberation;; + mdac25) load_mdac25;; + mdac27) load_mdac27;; + mdac28) load_mdac28;; + mfc40) load_mfc40;; + mono19|mono20) load_mono20;; + mono22) load_mono22;; + mono24) load_mono24;; + mpc) load_mpc;; + msi2) load_msi2;; + mshflxgd) load_mshflxgd;; + msls31) load_msls31;; + msmask) load_msmask;; + msscript) load_msscript;; + msxml3) load_msxml3;; + msxml4) load_msxml4;; + msxml6) load_msxml6;; + ogg) load_ogg;; + ole2) load_ole2;; + openwatcom|watcom) load_openwatcom;; + pdh) load_pdh;; + psdk2003) load_psdk2003;; + psdkvista) load_psdkvista;; + psdkwin7) load_psdkwin7;; + python|python26) load_python26;; + quicktime72) load_quicktime72;; + riched20) load_riched20;; + riched30) load_riched30;; + shockwave) load_shockwave;; + tahoma) load_tahoma;; + urlmon) load_urlmon;; + vbrun200|vb2run) load_vb2run;; + vbrun300|vb3run) load_vb3run;; + vbrun400|vb4run) load_vb4run;; + vbrun500|vbvm50|vb5run) load_vbvm50;; + vbrun600|vbrun60|vb6run) load_vbrun60;; + vc2005express) load_vc2005express;; + vc2005trial) load_vc2005trial;; + vcrun600|vcrun6|mfc42) load_vcrun6;; + vcrun2003) load_vcrun2003;; + vcrun2005|vcrun2005sp1) load_vcrun2005;; + vcrun2008|vcrun2008sp1) load_vcrun2008;; + vjrun20) load_vjrun20;; + vlc) load_vlc;; + wininet) load_wininet;; + wme9) load_wme9;; + wmp9) load_wmp9;; + wmp10) load_wmp10;; + wenquanyi) load_wenquanyi;; + wsh56) load_wsh56;; + wsh56js) load_wsh56js;; + wsh56vb) load_wsh56vb;; + xact|xactengine|x3daudio) load_xact;; + xvid) load_xvid;; + + fakeie6) set_fakeie6;; + allfonts) load_corefonts; load_tahoma; load_liberation; load_droid; load_wenquanyi;; + allvcodecs|allcodecs) load_vcrun6; load_ffdshow; load_xvid; load_icodecs;; + nt40|winver=nt40) set_winver nt40;; + win98|winver=win98) set_winver win98;; + win2k|winver=win2k) set_winver win2k;; + winxp|winver=winxp) set_winver winxp;; + vista|winver=vista) set_winver vista;; + winver=) unset_winver;; + native_mdac) set_native_mdac;; + native_oleaut32) override_dlls native,builtin oleaut32;; + version) print_version;; + volnum) volnum;; + *) echo Unknown arg $1; usage ; exit 1;; + esac + # Provide a bit of feedback + test "$WINETRICKS_QUIET" = "" && case $1 in + -q) echo Setting quiet mode;; + -v) echo Setting verbose mode;; + *) echo "Install of $1 done" ;; + esac + shift + # cleanup + rm -rf "$WINETRICKS_TMP"/* +done + +test "$WINETRICKS_QUIET" = "" && echo winetricks done. || true diff --git a/coverflow/anim.py b/coverflow/anim.py index a62184934..91d2d47aa 100755 --- a/coverflow/anim.py +++ b/coverflow/anim.py @@ -183,6 +183,7 @@ def animate(start, end, startt=None, endt=None, dt=None, extend="constant", meth try: iter(start), iter(end) except TypeError: + print "boo" return InterpolatedAnimator(start, end, startt, endt, extend, method) else: return [InterpolatedAnimator(s, e, startt, endt, extend, method) @@ -211,7 +212,7 @@ if __name__ == "__main__": add_time(0) print o.x # prints out 0.0 #o.x.anim = animate("linear", start=5., end=10., dt=5) # this doesn't work - o.x = animate("linear", start=0, end=1, dt=5) + o.x = animate(start=0, end=1, dt=5,method="linear") add_time(2.5) print o.x # prints out 0.5 add_time(2.5) diff --git a/data/ui/LutrisWindow.ui b/data/ui/LutrisWindow.ui index a034c369d..334cdddc6 100644 --- a/data/ui/LutrisWindow.ui +++ b/data/ui/LutrisWindow.ui @@ -98,6 +98,26 @@ + + + True + _Tools + True + + + True + + + True + Mount ISO + True + + + + + + + True diff --git a/debian/changelog b/debian/changelog index d6e3efb63..f88a2745f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +lutris (0.2~public2) lucid; urgency=low + + * New release. + + -- Mathieu Comandon Fri, 12 Feb 2010 13:28:16 +0100 + +lutris (0.2~public2) lucid; urgency=low + + * New release. + + -- Mathieu Comandon Sun, 31 Jan 2010 23:06:53 +0100 + lutris (0.2~public2) lucid; urgency=low * New release. diff --git a/debian/control b/debian/control index 10b7bac26..80f8f6481 100644 --- a/debian/control +++ b/debian/control @@ -18,8 +18,6 @@ Depends: ${misc:Depends}, python-gobject, python-apt, python-gtk2, - python-yaml, - python-pyglet, - python-gconf + python-yaml Description: UI for managing games UNKNOWN diff --git a/lutris.desktop.in b/lutris.desktop.in index ee4cb2ed0..89ce2890c 100644 --- a/lutris.desktop.in +++ b/lutris.desktop.in @@ -3,6 +3,6 @@ Name=Lutris Comment=Lutris application Categories=GNOME;Utility; Exec=lutris -Icon=lutris +Icon=/usr/share/lutris/media/icon.png Terminal=false Type=Application diff --git a/lutris/add_game_dialog.py b/lutris/add_game_dialog.py index 93113f650..e9e1dfdfe 100644 --- a/lutris/add_game_dialog.py +++ b/lutris/add_game_dialog.py @@ -56,12 +56,12 @@ class AddGameDialog(gtk.Dialog): if hasattr(runner,"description"): description = runner.description else: - print "Please fix "+runner_cls+" and add a description attribute" + logging.debug("Please fix %s and add a description attribute" % runner_cls) description = "" if hasattr(runner,"machine"): machine = runner.machine else: - print "Please fix "+runner_cls+" and add a machine attribute" + logging.debug("Please fix % and add a machine attribute" % runner_cls) machine = "" if runner.is_installed(): runner_liststore.append((machine+" ("+ description +")" ,runner_cls)) @@ -77,7 +77,6 @@ class AddGameDialog(gtk.Dialog): self.vbox.pack_start(self.notebook) #Game configuration - #self.game_config_vbox = GameConfigVBox() self.game_config_vbox = gtk.Label("Select a runner from the list") self.game_config_scrolled_window = gtk.ScrolledWindow() self.game_config_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) @@ -85,7 +84,6 @@ class AddGameDialog(gtk.Dialog): self.notebook.append_page(self.game_config_scrolled_window,gtk.Label("Game configuration")) #Runner configuration - #self.runner_config_vbox = RunnerConfigVBox() self.runner_config_vbox = gtk.Label("Select a runner from the list") self.runner_config_scrolled_window = gtk.ScrolledWindow() self.runner_config_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) @@ -119,14 +117,12 @@ class AddGameDialog(gtk.Dialog): self.lutris_config.config["runner"] = self.runner_class if self.runner_class and realname: - print self.lutris_config.config game_identifier = self.lutris_config.save(type="game") self.game_info = {"Game Name": realname,"Runner": self.runner_class , "name": game_identifier} self.destroy() def on_runner_changed(self,widget): - selected_runner = widget.get_active() scroll_windows_children = [self.game_config_scrolled_window.get_children(),self.runner_config_scrolled_window.get_children(),self.system_config_scrolled_window.get_children()] for scroll_window_children in scroll_windows_children: @@ -139,7 +135,8 @@ class AddGameDialog(gtk.Dialog): self.runner_class = widget.get_model()[selected_runner][1] self.lutris_config = LutrisConfig(self.runner_class) - + logging.debug("loading config before adding game : ") + logging.debug(self.lutris_config.config) #Load game box self.game_config_vbox = GameConfigVBox(self.lutris_config) self.game_config_scrolled_window.add_with_viewport(self.game_config_vbox) diff --git a/lutris/config.py b/lutris/config.py index c8138b0ab..dcf3df921 100644 --- a/lutris/config.py +++ b/lutris/config.py @@ -23,7 +23,8 @@ import yaml import os import logging -import lutris.constants as constants +import copy +import constants as constants class LutrisConfig(): def __init__(self,runner=None,game=None): @@ -36,11 +37,19 @@ class LutrisConfig(): for config_path in config_paths: if not os.path.exists(config_path): os.mkdir(config_path) - + + #Initialize configuration + self.config = {} + self.game_config = {} + self.runner_config = {} + self.system_config = {} + + self.game = None + self.runner = None + #By default config type is system, it can also be runner and game #this means that when you call lutris_config_instance["key"] is will #pick up the right configuration depending of config_type - self.config_type = "system" if runner: self.runner = runner @@ -49,63 +58,38 @@ class LutrisConfig(): self.game = game self.config_type = "game" - #Check if system configuration file exists. - self.system_config = None + #Read system configuration if os.path.exists(constants.system_config_full_path): self.system_config = yaml.load(file(constants.system_config_full_path, 'r').read()) else: - #Create empty configuration file + logging.debug("Creating new system config file") file(constants.system_config_full_path,"w+") - if not self.system_config: - self.system_config = {} - - #Initialize configuration directory - self.config = {} - - #A bit tricky here,if we have a game argument but no runner, we will - #still need to get the runner from the game configuration. We have to - #load runner info after the game config but have to merge the runner - #config before the game's. If you give both game and runner args, the - #runner arg will get ignored - self.game_identifier = None - if game: - self.game_identifier = game - game_config_full_path = os.path.join(constants.game_config_path,game+constants.config_extension) + if self.game: + game_config_full_path = os.path.join(constants.game_config_path, + self.game + constants.config_extension) if os.path.exists(game_config_full_path): - try: self.game_config = yaml.load(file(game_config_full_path,'r').read()) - runner = self.game_config["runner"] + self.runner = self.game_config["runner"] except yaml.scanner.ScannerError: - print "error parsing "+game_config_full_path + logging.debug("error parsing config file %s" % game_config_full_path) except KeyError: - print "Runner key is mandatory !" - else: - self.game_config = {} - else: - self.game_config = {} - self.config.update(self.game_config) - if runner: - runner_config_full_path = os.path.join(constants.runner_config_path,runner+constants.config_extension) - if os.path.exists(runner_config_full_path): - self.lutris_config = yaml.load(file(runner_config_full_path,'r').read()) - else: - self.lutris_config = {} - self.config.update(self.lutris_config) - if runner in self.game_config: - self.config[runner].update(self.game_config[runner]) - if "system" in self.config: - if self.config["system"] is None: - self.config["system"] = {} - self.config["system"].update(self.config["system"]) + logging.debug("Runner key is mandatory !") + if self.runner: + runner_config_full_path = os.path.join(constants.runner_config_path, + self.runner + constants.config_extension) + if os.path.exists(runner_config_full_path): + self.runner_config = yaml.load(file(runner_config_full_path,'r').read()) + self.update_global_config() + def __getitem__(self,key): """Allows to access config data directly by keys""" if self.config_type == "game": value = self.game_config[key] elif self.config_type == "runner": - value = self.lutris_config[key] + value = self.runner_config[key] else: value = self.system_config[key] return value @@ -114,34 +98,19 @@ class LutrisConfig(): if self.config_type == "game": self.game_config[key] = value elif self.config_type == "runner": - self.config[self.runner][key] = value - else: - if self.config["system"] is None: - self.config["system"] = {} - print self.config - self.config["system"][key] = value - - - def has_key(self, key, create = False): - """ - Check is a key is present in the config, keys/can/be/given/in/paths/like/that - If create is set, the missing keys will be created and always return True - """ - logging.debug("I dont think this function is useful anymore") - keys = key.split("/") - past_keys = "" - for key in keys: - generate_key_pointer = "self.lutris_config"+past_keys+".has_key('" + key + "')" - logging.debug(generate_key_pointer) - if not eval(generate_key_pointer): - if not create: - return False - else: - create_key = "self.lutris_config"+past_keys+"['"+key+"'] = {}" - exec(create_key) - past_keys = past_keys + "['" + key + "']" - return True + self.runner_config[key] = value + elif self.config_type == "system": + self.system_config = value + self.update_global_config() + def update_global_config(self): + self.config.update(copy.deepcopy(self.system_config)) + self.config.update(copy.deepcopy(self.runner_config)) + self.config.update(copy.deepcopy(self.game_config)) + if self.config_type == "game" and self.runner in self.game_config: + pass + #self.config[self.runner].update(self.game_config[self.runner]) + def remove(self,game_name): logging.debug("removing %s" % game_name) os.remove(os.path.join(constants.game_config_path,game_name+constants.config_extension)) @@ -153,7 +122,7 @@ class LutrisConfig(): if type is None: type = self.config_type yaml_config = yaml.dump(self.config,default_flow_style=False) - print "Saving config (type %s)" % type + logging.debug("Saving config (type %s)" % type) print yaml_config if type == "system": file(constants.system_config_full_path,"w").write(yaml_config) @@ -161,11 +130,12 @@ class LutrisConfig(): runner_config_path = os.path.join(constants.runner_config_path,self.runner+constants.config_extension) file(runner_config_path,"w").write(yaml_config) elif type == "game": - if not self.game_identifier: - self.game_identifier = self.config["runner"] + "-" + self.config["realname"].replace(" ","_") - self.game_config_path = os.path.join(constants.game_config_path,self.game_identifier+constants.config_extension) + if not self.game: + self.game = self.config["runner"] + "-" + self.config["realname"].replace(" ","_") + self.game_config_path = os.path.join(constants.game_config_path, + self.game + constants.config_extension) file(self.game_config_path,"w").write(yaml_config) - return self.game_identifier + return self.game else: print "Config type is %s or %s" % (self.config_type, type) print "i don't know how to save this yet" @@ -178,3 +148,35 @@ class LutrisConfig(): if "game_path" in self.config: return self.config["game_path"] return os.path.expanduser("~") + + + +if __name__ == "__main__": + logging.basicConfig(level=logging.DEBUG) + logging.debug('logging enabled') + lc = LutrisConfig(runner="wine") + print "system config : " + print lc.system_config + print "runner config : " + print lc.runner_config + print "global config" + print lc.config + + print ("*****************") + print ("* testing games *") + print ("*****************") + + lc = LutrisConfig(game="wine-Ghostbusters") + print "system config : " + print lc.system_config + print ("-----------------------") + print "runner config : " + print lc.runner_config + print ("-----------------------") + print "game config :" + print lc.game_config + print ("-----------------------") + print "global config" + print lc.config + + \ No newline at end of file diff --git a/lutris/config_vbox.py b/lutris/config_vbox.py index 65af1da1f..27d39867a 100644 --- a/lutris/config_vbox.py +++ b/lutris/config_vbox.py @@ -27,7 +27,7 @@ class ConfigVBox(gtk.VBox): def __init__(self,save_in_key): gtk.VBox.__init__(self) self.options = None - self.game_config = None # FIXME : remove this + #self.game_config = None # FIXME : remove this #Section of the configuration file to save options in. Can be "game", "runner" or "system" self.save_in_key= save_in_key @@ -97,9 +97,10 @@ class ConfigVBox(gtk.VBox): combobox.add_attribute(cell, 'text', 0) index = selected_index = -1 if value: + logging.debug(value) for choice in choices: if choice[1] == value: - selected_index = index + selected_index = index +1 index = index +1 combobox.set_active(selected_index) combobox.connect('changed',self.on_combobox_change,option_name) @@ -214,25 +215,25 @@ class ConfigVBox(gtk.VBox): self.pack_start(treeview_scroll,True,True) - def generate_file_widget(self,widget_config,file_value=None): - # FIXME : Remove me - print "OLD CRAPPY FUNCTION CALLED (generate_file_widget)" - widget_type = widget_config["type"] - self.key_name_for_file = widget_config["name"] - #lutris_config = LutrisConfig() - if widget_type == "single": - file_widget = gtk.HBox() - file_label = gtk.Label(widget_config["label"]) - file_widget.pack_start(file_label,False,False,5) - self.file_chooser_button = gtk.FileChooserButton("Select a file") - self.file_chooser_button.connect("file-set",self.add_file_callback) - self.file_chooser_button.set_current_folder(self.lutris_config.get_path(self.runner_class)) - if file_value: - self.file_chooser_button.set_filename(file_value) - #self.file_chooser_button.set_current_folder("/home/strider/Games/") - file_widget.pack_start(self.file_chooser_button,True,True,5) - - self.pack_start(file_widget,False,False,10) +# def generate_file_widget(self,widget_config,file_value=None): +# # FIXME : Remove me +# print "OLD CRAPPY FUNCTION CALLED (generate_file_widget)" +# widget_type = widget_config["type"] +# self.key_name_for_file = widget_config["name"] +# #lutris_config = LutrisConfig() +# if widget_type == "single": +# file_widget = gtk.HBox() +# file_label = gtk.Label(widget_config["label"]) +# file_widget.pack_start(file_label,False,False,5) +# self.file_chooser_button = gtk.FileChooserButton("Select a file") +# self.file_chooser_button.connect("file-set",self.add_file_callback) +# self.file_chooser_button.set_current_folder(self.lutris_config.get_path(self.runner_class)) +# if file_value: +# self.file_chooser_button.set_filename(file_value) +# #self.file_chooser_button.set_current_folder("/home/strider/Games/") +# file_widget.pack_start(self.file_chooser_button,True,True,5) +# +# self.pack_start(file_widget,False,False,10) def on_files_treeview_event(self,treeview,event): key = event.keyval @@ -251,8 +252,8 @@ class ConfigVBox(gtk.VBox): self.lutris_config.config[self.save_in_key][option] = self.files self.files_chooser_dialog = None - def add_file_callback(self,widget,response=None): - # FIXME : Remove me - print "OLD CRAPPY FUNCTION CALLED (add_file_callback)" - self.file = widget.get_filename() - self.game_config["exe"] = self.file +# def add_file_callback(self,widget,response=None): +# # FIXME : Remove me +# print "OLD CRAPPY FUNCTION CALLED (add_file_callback)" +# self.file = widget.get_filename() +# self.game_config["exe"] = self.file diff --git a/lutris/desktop_control.py b/lutris/desktop_control.py index a3be713e7..ed51e94ed 100644 --- a/lutris/desktop_control.py +++ b/lutris/desktop_control.py @@ -112,10 +112,21 @@ class LutrisDesktopControl(): return None def reset_desktop(self): + #Restore panels + #FIXME : Restore only with panels where shown before starting game self.hide_panels(False) + + #Restore resolution if self.default_resolution is None: + os.popen("xrandr -s 1") os.popen("xrandr -s 0") else: + os.popen("xrandr -s 1") os.popen("xrandr -s %s" % self.default_resolution) + + #Restore gamma + os.popen("xgamma -gamma 1.0") + + \ No newline at end of file diff --git a/lutris/game.py b/lutris/game.py index f98eb10fb..7854900c8 100644 --- a/lutris/game.py +++ b/lutris/game.py @@ -1,3 +1,4 @@ +import os # -*- coding:Utf-8 -*- ############################################################################### ## Lutris @@ -24,6 +25,7 @@ import subprocess import gobject import logging +import os,time from lutris.config import LutrisConfig from lutris.thread import LutrisThread from lutris.desktop_control import LutrisDesktopControl @@ -100,9 +102,8 @@ class LutrisGame(): command = oss_wrapper + " " + command logging.debug(command) - if game_run_args: - self.timer_id = gobject.timeout_add(1000, self.poke_process) + self.timer_id = gobject.timeout_add(5000, self.poke_process) self.game_thread = LutrisThread(command,path) self.game_thread.start() @@ -111,14 +112,14 @@ class LutrisGame(): def poke_process(self): if self.game_thread.pid: - pass + os.system("gnome-screensaver-command --poke") else: self.quit_game() return False return True def quit_game(self): - + logging.debug("game has quit at %s" % time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime() ) ) if self.game_thread is not None and self.game_thread.pid: if self.game_thread.cedega: for pid in self.game_thread.pid: @@ -127,5 +128,4 @@ class LutrisGame(): self.game_thread.game_process.terminate() self.lutris_desktop_control.reset_desktop() pathname = os.path.dirname(sys.argv[0]) - logging.debug(pathname) - os.chdir(os.path.abspath(pathname)) + os.chdir(os.path.abspath(pathname)) \ No newline at end of file diff --git a/lutris/installer_config_vbox.py b/lutris/installer_config_vbox.py new file mode 100644 index 000000000..44158bffc --- /dev/null +++ b/lutris/installer_config_vbox.py @@ -0,0 +1,48 @@ +# -*- coding:Utf-8 -*- +############################################################################### +## Lutris +## +## Copyright (C) 2009 Mathieu Comandon strycore@gmail.com +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################### + +import gtk +import runners +from lutris.config_vbox import ConfigVBox + +class InstallerConfigVBox(ConfigVBox): + def __init__(self,lutris_config): + ConfigVBox.__init__(self,"game") + self.lutris_config = lutris_config + self.lutris_config.config_type = "game" + self.runner_class = self.lutris_config.runner + runner = eval("runners."+self.runner_class+"."+self.runner_class+"()") + if hasattr(runner,"installer_options"): + self.options = runner.installer_options + else: + no_option_label = gtk.Label("No game options") + self.pack_start(no_option_label) + return + self.generate_widgets() + + + + + + + + + diff --git a/lutris/installer_dialog.py b/lutris/installer_dialog.py new file mode 100644 index 000000000..780ffa262 --- /dev/null +++ b/lutris/installer_dialog.py @@ -0,0 +1,166 @@ +# -*- coding:Utf-8 -*- +############################################################################### +## Lutris +## +## Copyright (C) 2009 Mathieu Comandon strycore@gmail.com +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################### + + + +import gtk +import runners +import os +import logging +from lutris.config import LutrisConfig +from lutris.installer_config_vbox import InstallerConfigVBox +from lutris.runner_config_vbox import RunnerConfigVBox +from lutris.system_config_vbox import SystemConfigVBox + +class InstallerDialog(gtk.Dialog): + def __init__(self,parent): + gtk.Dialog.__init__(self) + self.parent_window = parent + self.set_title("Install a game") + self.set_size_request(600,500) + + #Real name + realname_hbox = gtk.HBox() + self.realname_label = gtk.Label("Name") + realname_hbox.pack_start(self.realname_label,False,False,5) + self.realname_entry = gtk.Entry() + realname_hbox.pack_start(self.realname_entry) + self.vbox.pack_start(realname_hbox,False,False,5) + + self.lutris_config = LutrisConfig() + + #Runner + #get a list of available runners + runner_liststore = gtk.ListStore(str,str) + runner_liststore.append(("Choose a runner for the list","")) + for runner_cls in runners.__all__: + runner = eval("runners."+runner_cls+"."+runner_cls+"()") + if hasattr(runner,"description"): + description = runner.description + else: + logging.debug("Please fix %s and add a description attribute" % runner_cls) + description = "" + if hasattr(runner,"machine"): + machine = runner.machine + else: + logging.debug("Please fix % and add a machine attribute" % runner_cls) + machine = "" + if runner.is_installed(): + runner_liststore.append((machine+" ("+ description +")" ,runner_cls)) + + self.runner_combobox = gtk.ComboBox(runner_liststore) + self.runner_combobox.connect("changed",self.on_runner_changed) + cell = gtk.CellRendererText() + self.runner_combobox.pack_start(cell, True) + self.runner_combobox.add_attribute(cell, 'text', 0) + self.vbox.pack_start(self.runner_combobox,False,True,5) + + self.notebook = gtk.Notebook() + self.vbox.pack_start(self.notebook) + + #Game configuration + self.installer_config_vbox = gtk.Label("Select a runner from the list") + self.installer_config_scrolled_window = gtk.ScrolledWindow() + self.installer_config_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.installer_config_scrolled_window.add_with_viewport(self.installer_config_vbox) + self.notebook.append_page(self.installer_config_scrolled_window,gtk.Label("Installer")) + + #Runner configuration + self.runner_config_vbox = gtk.Label("Select a runner from the list") + self.runner_config_scrolled_window = gtk.ScrolledWindow() + self.runner_config_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) + self.runner_config_scrolled_window.add_with_viewport(self.runner_config_vbox) + self.notebook.append_page(self.runner_config_scrolled_window,gtk.Label("Runner configuration")) + + #System configuration + self.system_config_vbox = SystemConfigVBox(self.lutris_config) + self.system_config_scrolled_window = gtk.ScrolledWindow() + self.system_config_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) + self.system_config_scrolled_window.add_with_viewport(self.system_config_vbox) + self.notebook.append_page(self.system_config_scrolled_window,gtk.Label("System configuration")) + + #Action area + cancel_button = gtk.Button(None, gtk.STOCK_CANCEL) + install_button = gtk.Button(None, gtk.STOCK_ADD) + self.action_area.pack_start(cancel_button) + self.action_area.pack_start(install_button) + cancel_button.connect("clicked", self.close) + install_button.connect("clicked", self.install_game) + #Finish + self.show_all() + self.run() + + def install_game(self, button): + """OK button pressed in the Add Game Dialog""" + #Get name + realname = self.realname_entry.get_text() + #Get runner + self.lutris_config.config["realname"] = realname + self.lutris_config.config["runner"] = self.runner_class + + if self.runner_class and realname: + game_identifier = self.lutris_config.save(type="game") + self.game_info = {"Game Name": realname,"Runner": self.runner_class , "name": game_identifier} + self.destroy() + + + def on_runner_changed(self,widget): + selected_runner = widget.get_active() + scroll_windows_children = [self.installer_config_scrolled_window.get_children(),self.runner_config_scrolled_window.get_children(),self.system_config_scrolled_window.get_children()] + for scroll_window_children in scroll_windows_children: + for child in scroll_window_children: + child.destroy() + + if selected_runner == 0: + self.no_runner_selected() + return + + self.runner_class = widget.get_model()[selected_runner][1] + self.lutris_config = LutrisConfig(self.runner_class) + logging.debug("loading config before adding game : ") + logging.debug(self.lutris_config.config) + #Load game box + self.installer_config_vbox = InstallerConfigVBox(self.lutris_config) + self.installer_config_scrolled_window.add_with_viewport(self.installer_config_vbox) + self.installer_config_scrolled_window.show_all() + + #Load runner box + self.runner_options_vbox = RunnerConfigVBox(self.lutris_config) + self.runner_config_scrolled_window.add_with_viewport(self.runner_options_vbox) + self.runner_config_scrolled_window.show_all() + + #Load system box + self.system_config_vbox = SystemConfigVBox(self.lutris_config) + self.system_config_scrolled_window.add_with_viewport(self.system_config_vbox) + self.system_config_scrolled_window.show_all() + + + def close(self, widget=None, other=None): + self.destroy() + + def no_runner_selected(self): + no_runner_label = gtk.Label("Choose a runner from the list") + no_runner_label.show() + self.runner_config_scrolled_window.add_with_viewport(no_runner_label) + + + + diff --git a/lutris/mount_iso_dialog.py b/lutris/mount_iso_dialog.py new file mode 100644 index 000000000..d41d27e66 --- /dev/null +++ b/lutris/mount_iso_dialog.py @@ -0,0 +1,86 @@ +# -*- coding:Utf-8 -*- +############################################################################### +## Lutris +## +## Copyright (C) 2009 Mathieu Comandon strycore@gmail.com +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################### + +import gtk +import subprocess +import logging + +class MountIsoDialog(gtk.Dialog): + def __init__(self): + + self.check_fuseiso() + + gtk.Dialog.__init__(self) + self.set_title("Mount ISO image") + self.set_size_request(300,200) + + self.iso_filechooserbutton = gtk.FileChooserButton("Open an ISO file", backend=None) + self.iso_label = gtk.Label("ISO file") + self.iso_label.set_size_request(90,20) + self.iso_hbox = gtk.HBox() + self.iso_hbox.pack_start(self.iso_label,False,False) + self.iso_hbox.pack_start(self.iso_filechooserbutton) + self.vbox.pack_start(self.iso_hbox,False,False,10) + + self.mount_point_dialog = gtk.FileChooserDialog(title="Select mount point", + parent=self, + action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, + buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, + gtk.STOCK_OK, gtk.RESPONSE_ACCEPT), + backend=None) + + self.mount_point_filechooserbutton = gtk.FileChooserButton(self.mount_point_dialog) + self.mount_point_label = gtk.Label("Mount point") + self.mount_point_label.set_size_request(90,20) + self.mount_point_hbox = gtk.HBox() + self.mount_point_hbox.pack_start(self.mount_point_label,False,False) + self.mount_point_hbox.pack_start(self.mount_point_filechooserbutton) + self.vbox.pack_start(self.mount_point_hbox,False,False,10) + + #Action buttons + cancel_button = gtk.Button(None, gtk.STOCK_CANCEL) + ok_button = gtk.Button(None, gtk.STOCK_OK) + self.action_area.pack_start(cancel_button) + self.action_area.pack_start(ok_button) + cancel_button.connect("clicked", self.close) + ok_button.connect("clicked", self.ok_clicked) + + self.show_all() + self.run() + + def check_fuseiso(self): + fuseiso_command = subprocess.Popen(["which","fuseiso"],stdout=subprocess.PIPE).stdout + fuseiso_is_installed = fuseiso_command.readline() + if "fuseiso" in fuseiso_is_installed: + logging.debug("fuseiso is installed") + else: + logging.debug("fuseiso not here, problems ahead") + + def close(self,widget): + self.destroy() + + def ok_clicked(self,wigdet): + #TODO: Check if file is valid + iso_file = self.iso_filechooserbutton.get_filename() + mount_point = self.mount_point_filechooserbutton.get_filename() + fuseiso_command = subprocess.Popen(["fuseiso",iso_file,mount_point],stdout=subprocess.PIPE,stderr=subprocess.STDOUT) + print "mount done!" + self.destroy() diff --git a/lutris/runner_config_vbox.py b/lutris/runner_config_vbox.py index bd69dc634..7bfe54d92 100644 --- a/lutris/runner_config_vbox.py +++ b/lutris/runner_config_vbox.py @@ -35,7 +35,6 @@ class RunnerConfigVBox(ConfigVBox): self.pack_start(warningLabel) return self.lutris_config = lutris_config - #self.lutris_config.config_type = "runner" self.generate_widgets() diff --git a/lutris/system_config_vbox.py b/lutris/system_config_vbox.py index 2cfe26678..eef101a30 100644 --- a/lutris/system_config_vbox.py +++ b/lutris/system_config_vbox.py @@ -30,7 +30,6 @@ class SystemConfigVBox(ConfigVBox): """VBox init""" ConfigVBox.__init__(self,"system") self.lutris_config = lutris_config - self.lutris_config.config_type = "system" #TODO : Move the list of window manager somewhere else, in lutris_desktop_control for example. #TODO : Auto detect the installed WMs on the user's machine diff --git a/lutris/thread.py b/lutris/thread.py index 571be173d..423905674 100644 --- a/lutris/thread.py +++ b/lutris/thread.py @@ -46,8 +46,8 @@ class LutrisThread(threading.Thread): if "cedega" in self.command: self.cedega = True logging.debug(self.command) - self.game_process = subprocess.Popen(self.command,shell = True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,cwd=self.path) - self.output = self.game_process.communicate() + self.game_process = subprocess.Popen(self.command,shell = True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,cwd=self.path) + self.output = self.game_process.stdout def poke_process(self): if not self.game_process: @@ -64,13 +64,9 @@ class LutrisThread(threading.Thread): self.return_code = self.game_process.poll() if self.return_code is not None and not self.cedega: logging.debug("Game quit") - if self.output[0]: - for stdout in self.output[0].split("\n"): + if self.output: + for stdout in self.output.split("\n"): logging.debug(stdout) - if self.output[1]: - logging.debug("The game returned the following errors") - for stderr in self.output[1].split("\n"): - logging.debug(stderr) self.pid = None return False return True diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 000000000..58516a21d --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1 @@ +application.args=-v diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 000000000..c1f155a78 --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 000000000..7ceac31ca --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,12 @@ +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project +auxiliary.org-netbeans-modules-editor-indent.text.x-python.CodeStyle.project.separateFromImps=true +java.lib.path= +lutris.dir=. +main.file=bin/lutris +platform.active=Python_2.6.4+ +python.lib.path= diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 000000000..7f40093d2 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,13 @@ + + + org.netbeans.modules.python.project + + + lutris + + + + + + + diff --git a/po/lutris.pot b/po/lutris.pot new file mode 100644 index 000000000..e058caeb6 --- /dev/null +++ b/po/lutris.pot @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-02-12 13:28+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../data/ui/PreferencesLutrisDialog.ui.h:1 ../data/ui/AddgameDialog.ui.h:1 +msgid "gtk-cancel" +msgstr "" + +#: ../data/ui/PreferencesLutrisDialog.ui.h:2 ../data/ui/AddgameDialog.ui.h:2 +msgid "gtk-ok" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:1 +msgid "Add game" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:2 +msgid "Cedega" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:3 +msgid "Fullscreen" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:4 +msgid "Global preferences" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:5 +msgid "Import" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:6 +msgid "Import games from ScummVM" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:7 +msgid "Install and configure runners" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:8 +msgid "Install game" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:9 +msgid "Lutris" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:10 +msgid "Manage runners" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:11 +msgid "Mount ISO" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:12 +msgid "Quit" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:13 +msgid "Remove" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:14 +msgid "Reset" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:15 +msgid "ScummVM" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:16 +msgid "Steam" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:17 +msgid "_Help" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:18 +msgid "_Lutris" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:19 +msgid "_Tools" +msgstr "" + +#: ../data/ui/LutrisWindow.ui.h:20 +msgid "configure the default options" +msgstr "" diff --git a/runners/__init__.py b/runners/__init__.py index c41c606ee..1b9c4f246 100755 --- a/runners/__init__.py +++ b/runners/__init__.py @@ -1,2 +1,4 @@ -__all__ = ["linux","wine","sdlmame","mednafen","scummvm","cedega", -"snes9x", "steam","uae","nulldc","vavoom","openmsx","dosbox"] +__all__ = ["linux","wine","sdlmame","mednafen",\ + "scummvm","cedega","snes9x", "steam",\ + "uae","nulldc","vavoom","openmsx",\ + "dosbox","pcsx"] diff --git a/runners/pcsx.py b/runners/pcsx.py new file mode 100644 index 000000000..1fdb92d3b --- /dev/null +++ b/runners/pcsx.py @@ -0,0 +1,46 @@ +# -*- coding:Utf-8 -*- +############################################################################### +## Lutris +## +## Copyright (C) 2009 Mathieu Comandon strycore@gmail.com +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################### + + +from runner import Runner + +class pcsx(Runner): + def __init__(self,settings = None): + """ + pcsx-df is what seems the best candidate for a playstation emulator. + Sadly, it was removed from the Debian archives and thus Ubuntu because + of a small licensing issue : + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=514446 + The package also lacks a maintainer : + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=510530 + """ + self.executable = "pcsx" + self.package = "pcsx-df" + self.description = "Runs PlayStation games" + self.machine = "Playstation" + self.game_options = [{"option":"iso","type":"single","label":"iso"}] + self.runner_options = [] + #Load settings + if settings: + self.iso = settings["game"]["iso"] + + def play(self): + return [self.executable," -nogui -cdfile \""+self.iso+"\""] \ No newline at end of file diff --git a/runners/steam.py b/runners/steam.py index fc2fc42f9..2e17dc9c0 100755 --- a/runners/steam.py +++ b/runners/steam.py @@ -8,7 +8,7 @@ __date__ = "$Oct 6, 2009 12:23:49 PM$" class steam(wine): - def __init__(self): + def __init__(self,settings = None): self.executable = "Steam.exe" self.description = "Runs Steam games with Wine" self.machine = "Steam Platform" diff --git a/runners/wine.py b/runners/wine.py index f6c043929..f2515e6ba 100755 --- a/runners/wine.py +++ b/runners/wine.py @@ -9,6 +9,7 @@ class wine(Runner): self.package = "wine" self.machine = "Windows games" self.description = "Run Windows games with Wine" + self.installer_options = [{"option": "exe","type": "single","label": "Executable"}] self.game_options = [ {"option": "exe", "type":"single", "label":"Executable"}, {"option": "args", "type": "string", "label": "Arguments" }]