diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-08 21:56:42 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-08 21:56:42 +0000 |
commit | 26788a65a7f9094a0acd44ea69c3cdbea5b1f498 (patch) | |
tree | 86157cd8ec540bf1d7a606df77f46abbbef86121 /tools/valgrind | |
parent | 0d5a3df2a5d0b89305bbad7c0efe8532e1cccb40 (diff) | |
download | chromium_src-26788a65a7f9094a0acd44ea69c3cdbea5b1f498.zip chromium_src-26788a65a7f9094a0acd44ea69c3cdbea5b1f498.tar.gz chromium_src-26788a65a7f9094a0acd44ea69c3cdbea5b1f498.tar.bz2 |
wine_valgrind: Use common Valgrind scripts to run Wine/Valgrind tests.
Use test and valgrind suppressions from the same locations as the other valgrind bots.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/561045
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38399 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/valgrind')
-rwxr-xr-x | tools/valgrind/chrome_tests.py | 23 | ||||
-rwxr-xr-x | tools/valgrind/common.py | 19 | ||||
-rwxr-xr-x | tools/valgrind/valgrind_test.py | 75 | ||||
-rw-r--r-- | tools/valgrind/wine_memcheck/suppressions.txt | 543 | ||||
-rw-r--r-- | tools/valgrind/wine_memcheck/winetricks | 3548 |
5 files changed, 4184 insertions, 24 deletions
diff --git a/tools/valgrind/chrome_tests.py b/tools/valgrind/chrome_tests.py index b62fdf7..c94aa77 100755 --- a/tools/valgrind/chrome_tests.py +++ b/tools/valgrind/chrome_tests.py @@ -124,15 +124,19 @@ class ChromeTests: self._data_dirs.append(os.path.join(module_dir, "data", "valgrind")) if not self._options.build_dir: - dirs = [ - os.path.join(self._source_dir, "xcodebuild", "Debug"), - os.path.join(self._source_dir, "sconsbuild", "Debug"), - os.path.join(self._source_dir, "out", "Debug"), - ] - if exe: - self._options.build_dir = FindDirContainingNewestFile(dirs, exe) + if common.IsWine(): + self._options.build_dir = os.path.join( + self._source_dir, "chrome", "Debug") else: - self._options.build_dir = FindNewestDir(dirs) + dirs = [ + os.path.join(self._source_dir, "xcodebuild", "Debug"), + os.path.join(self._source_dir, "sconsbuild", "Debug"), + os.path.join(self._source_dir, "out", "Debug"), + ] + if exe: + self._options.build_dir = FindDirContainingNewestFile(dirs, exe) + else: + self._options.build_dir = FindNewestDir(dirs) cmd = list(self._command_preamble) for directory in self._data_dirs: @@ -156,6 +160,9 @@ class ChromeTests: for arg in valgrind_test_args: cmd.append(arg) if exe: + if common.IsWine(): + cmd.append(os.environ.get('WINE')) + exe = exe + '.exe' cmd.append(os.path.join(self._options.build_dir, exe)) # Valgrind runs tests slowly, so slow tests hurt more; show elapased time # so we can find the slowpokes. diff --git a/tools/valgrind/common.py b/tools/valgrind/common.py index 8f85d40..52af411 100755 --- a/tools/valgrind/common.py +++ b/tools/valgrind/common.py @@ -27,7 +27,13 @@ def _print_line(line, flush=True): sys.stdout.flush() -def RunSubprocess(proc, timeout=0, detach=False): +def RunSubprocessInBackground(proc): + """Runs a subprocess in the background. Returns a handle to the process.""" + logging.info("running %s in the background" % " ".join(proc)) + return subprocess.Popen(proc) + + +def RunSubprocess(proc, timeout=0, detach=False, background=False): """ Runs a subprocess, until it finishes or |timeout| is exceeded and the process is killed with taskkill. A |timeout| <= 0 means no timeout. @@ -128,8 +134,19 @@ def IsWindows(): return sys.platform == 'cygwin' or sys.platform.startswith('win') +def IsWine(): + """This needs to be set by the script that starts the buildbot, i.e. + /etc/init.d/buildbot, or manually on the command line.""" + return (os.environ.get('WINE') and + os.environ.get('WINEPREFIX') and + os.environ.get('WINESERVER')) + + def PlatformName(): """Return a string to be used in paths for the platform.""" + # This has to be before IsLinux() + if IsWine(): + return 'wine' if IsLinux(): return 'linux' if IsMac(): diff --git a/tools/valgrind/valgrind_test.py b/tools/valgrind/valgrind_test.py index c5986e6..0a736a1 100755 --- a/tools/valgrind/valgrind_test.py +++ b/tools/valgrind/valgrind_test.py @@ -19,6 +19,7 @@ import shutil import stat import sys import tempfile +import time import common @@ -128,7 +129,7 @@ class ValgrindTool(object): if self._options.gtest_repeat: self._args.append("--gtest_repeat=%s" % self._options.gtest_repeat) if self._options.gtest_print_time: - self._args.append("--gtest_print_time"); + self._args.append("--gtest_print_time") return True @@ -136,6 +137,12 @@ class ValgrindTool(object): return self.ParseArgv(args) def PrepareForTest(self): + if common.IsWine(): + self.PrepareForTestWine() + elif common.IsMac(): + self.PrepareForTestMac() + + def PrepareForTestMac(self): """Runs dsymutil if needed. Valgrind for Mac OS X requires that debugging information be in a .dSYM @@ -149,9 +156,6 @@ class ValgrindTool(object): it looks like a fake_dsym. A non-fake dsym that already exists is assumed to be up-to-date. """ - if not common.IsMac(): - return - test_command = self._args[0] dsym_bundle = self._args[0] + '.dSYM' dsym_file = os.path.join(dsym_bundle, 'Contents', 'Resources', 'DWARF', @@ -201,6 +205,39 @@ class ValgrindTool(object): "not be shown. Either tell xcode to generate .dSYM " "file, or use --generate_dsym option to this tool.") + def PrepareForTestWine(self): + """Set up the Wine environment. + + We need to run some sanity checks, set up a Wine prefix, and make sure + wineserver is running by starting a dummy win32 program. + """ + if not os.path.exists('/usr/share/ca-certificates/root_ca_cert.crt'): + logging.warning('WARNING: SSL certificate missing! SSL tests will fail.') + logging.warning('You need to run:') + logging.warning('sudo cp src/net/data/ssl/certificates/root_ca_cert.crt ' + '/usr/share/ca-certificates/') + logging.warning('sudo vi /etc/ca-certificates.conf') + logging.warning(' (and add the line root_ca_cert.crt)') + logging.warning('sudo update-ca-certificates') + + # Shutdown the Wine server in case the last run got interrupted. + common.RunSubprocess([os.environ.get('WINESERVER'), '-k']) + + # Yes, this can be dangerous if $WINEPREFIX is set incorrectly. + shutil.rmtree(os.environ.get('WINEPREFIX'), ignore_errors=True) + + winetricks = os.path.join(self._source_dir, 'tools', 'valgrind', + 'wine_memcheck', 'winetricks') + common.RunSubprocess(['sh', winetricks, + 'nocrashdialog', 'corefonts', 'gecko']) + time.sleep(1) + + # Start a dummy program like winemine so Valgrind won't run memcheck on + # the wineserver startup routine when it launches the test binary, which + # is slow and not interesting to us. + common.RunSubprocessInBackground([os.environ.get('WINE'), 'winemine']) + return + def ValgrindCommand(self): """Get the valgrind command to run.""" # Note that self._args begins with the exe to be run. @@ -212,7 +249,7 @@ class ValgrindTool(object): "--num-callers=%i" % self._num_callers] if self._options.trace_children: - proc += ["--trace-children=yes"]; + proc += ["--trace-children=yes"] proc += self.ToolSpecificFlags() proc += self._tool_flags @@ -254,11 +291,15 @@ class ValgrindTool(object): proc = self.ValgrindCommand() os.putenv("G_SLICE", "always-malloc") - logging.info("export G_SLICE=always-malloc"); + logging.info("export G_SLICE=always-malloc") os.putenv("NSS_DISABLE_ARENA_FREE_LIST", "1") - logging.info("export NSS_DISABLE_ARENA_FREE_LIST=1"); + logging.info("export NSS_DISABLE_ARENA_FREE_LIST=1") os.putenv("GTEST_DEATH_TEST_USE_FORK", "1") - logging.info("export GTEST_DEATH_TEST_USE_FORK=1"); + logging.info("export GTEST_DEATH_TEST_USE_FORK=1") + + if common.IsWine(): + os.putenv("CHROME_ALLOCATOR", "winheap") + logging.info("export CHROME_ALLOCATOR=winheap") return common.RunSubprocess(proc, self._timeout) @@ -271,6 +312,10 @@ class ValgrindTool(object): # cleanup is still a TODO? if not self._nocleanup_on_exit: shutil.rmtree(self.TMP_DIR, ignore_errors=True) + + if common.IsWine(): + # Shutdown the Wine server. + common.RunSubprocess([os.environ.get('WINESERVER'), '-k']) return True def RunTestsAndAnalyze(self): @@ -297,14 +342,14 @@ class ValgrindTool(object): with a magic wrapper. Build the magic wrapper here. """ (fd, indirect_fname) = tempfile.mkstemp(dir=self.TMP_DIR, prefix="browser_wrapper.", text=True) - f = os.fdopen(fd, "w"); + f = os.fdopen(fd, "w") f.write("#!/bin/sh\n") f.write(command) f.write(' "$@"\n') f.close() os.chmod(indirect_fname, stat.S_IRUSR|stat.S_IXUSR) os.putenv("BROWSER_WRAPPER", indirect_fname) - logging.info('export BROWSER_WRAPPER=' + indirect_fname); + logging.info('export BROWSER_WRAPPER=' + indirect_fname) def Main(self, args): '''Call this to run through the whole process: Setup, Execute, Analyze''' @@ -350,12 +395,12 @@ class Memcheck(ValgrindTool): ret = ["--leak-check=full", "--gen-suppressions=all", "--demangle=no"] if self._options.show_all_leaks: - ret += ["--show-reachable=yes"]; + ret += ["--show-reachable=yes"] else: - ret += ["--show-possible=no"]; + ret += ["--show-possible=no"] if self._options.track_origins: - ret += ["--track-origins=yes"]; + ret += ["--track-origins=yes"] return ret @@ -454,9 +499,9 @@ class ThreadSanitizer(ValgrindTool): class ToolFactory: def Create(self, tool_name): - if tool_name == "memcheck": + if tool_name == "memcheck" and not common.IsWine(): return Memcheck() - if tool_name == "memcheck_wine": + if tool_name == "wine_memcheck" and common.IsWine(): return Memcheck() if tool_name == "tsan": if not common.IsLinux(): diff --git a/tools/valgrind/wine_memcheck/suppressions.txt b/tools/valgrind/wine_memcheck/suppressions.txt new file mode 100644 index 0000000..4c5e85b --- /dev/null +++ b/tools/valgrind/wine_memcheck/suppressions.txt @@ -0,0 +1,543 @@ +# There are four kinds of suppressions in this file. +# +# 1. Third party stuff we have no control over. +# +# 2. Bugs involving Wine. +# +# 3. Chromium specific errors that are intentional unit test errors, +# or stuff that is somehow a false positive in our own code, +# or stuff that is so trivial it's not worth fixing. +# +# 4. Suppressions for real chromium bugs that are not yet fixed. +# These should all be in chromium's bug tracking system (but a few aren't yet). +# Periodically we should sweep this file and the bug tracker clean by +# running overnight and removing outdated bugs/suppressions. +#----------------------------------------------------------------------- + +# 1. Third party stuff we have no control over. + +# System bugs that aren't Wine's fault. +{ + suppress_nss_leak + Memcheck:Leak + fun:malloc + obj:* + fun:__nss_database_lookup +} +{ + bogus_Xcursor_Leak + Memcheck:Leak + fun:malloc + obj:/usr/lib/libXcursor.so.1.0.2 +} +{ + todo_suppress_libasound_leak + Memcheck:Leak + ... + obj:/usr/lib*/libasound.so.2.0.0 +} +{ + todo_suppress_libfontconfig_leak + Memcheck:Leak + fun:malloc + obj:/usr/lib*/libfontconfig.so.1.* +} +# visual C++ +{ + todo_visual_c_chkstk_2 + Memcheck:Addr4 + fun:_chkstk +} +{ + # Same leak exists in src/tools/valgrind/memcheck/suppressions.txt + # with a mangled stack signature. + Uninitialized value in deflate + Memcheck:Cond + ... + fun:MOZ_Z_deflate +} + +# 2. Bugs involving Wine + +# These three happen if valgrind doesn't notice and handle speculative +# implementations of strchr/strlen/strcat properly. +{ + visual_c_ignore_strchr + Memcheck:Cond + fun:strchr +} +{ + visual_c_ignore_strlen + Memcheck:Cond + fun:strlen +} +{ + visual_c_ignore_strcat + Memcheck:Cond + fun:strcat +} + +# Naming convention for Wine suppressions: +# # If we think it's solid: +# # suppress_wine_dirname__functionname[_moreifneeded] +# # If we aren't sure, change suppress to todo + +# thread_detach() should clean this up?? +{ + todo_wine_dlls_winex11drv__x11drv_init_thread_data_main + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:x11drv_init_thread_data +} +{ + todo_wine_dlls_winex11drv_XOpenDisplay + Memcheck:Leak + fun:malloc + ... + fun:xcb_connect + fun:_XConnectXCB + fun:XOpenDisplay +} +{ + todo_wine_dlls_winex11drv_XOpenDisplay_2 + Memcheck:Leak + fun:malloc + ... + fun:xcb_get_extension_data + fun:xcb_prefetch_maximum_request_length + fun:xcb_get_maximum_request_length + fun:XOpenDisplay + fun:DllMain +} +{ + todo_suppress_alloc_module_leak + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:RtlCreateUnicodeString + fun:alloc_module +} +{ + todo_suppress_dlopen_leak2 + Memcheck:Leak + fun:*alloc + ... + fun:dl_open_worker + fun:_dl_catch_error + fun:_dl_open + fun:dlopen_doit + fun:_dl_catch_error +} +# ntdll/loader.c explicitly avoids freeing when .exe's exit at the moment +{ + todo_suppress_wine_alloc_module_leak + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:RtlCreateUnicodeString + fun:alloc_module +} +# shell32 isn't freeing its imagelist cache on unload? +{ + wine_bug_20544 + Memcheck:Leak + fun:malloc + fun:XInitExtension + fun:XextAddDisplay + fun:* + fun:XShmQueryVersion + fun:X11DRV_CreateDIBSection + fun:CreateDIBSection + fun:ImageList_CreateImage + fun:ImageList_Create + fun:SIC_Initialize + fun:DllMain +} +# winmm isn't freeing everything on unload? +{ + wine_bug_20545 + Memcheck:Leak + ... + fun:Rtl*AllocateHeap + fun:MMDRV_InitPerType + fun:MMDRV_Install + fun:MMDRV_Init +} +# yet another leak on unload, seen on chromium's net http and ftp tests +{ + wine_bug_20549 + Memcheck:Leak + fun:malloc + ... + fun:SECUR32_initSchannelSP +} +{ + # yet another gnutls leak? + gnutls_leak_bug_2 + Memcheck:Leak + fun:calloc + ... +# fun:_gnutls_hash_init (commented out because sometimes this shows up without symbols) +# fun:gnutls_handshake + fun:schan_InitializeSecurityContextW + fun:InitializeSecurityContextW +} +# leak on thread creation? +{ + wine_bug_20552 + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:alloc_thread_tls + fun:MODULE_DllThreadAttach +} +{ + wine_secur32_ignore_fork_helper_leak + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:fork_helper + fun:SECUR32_initNTLMSP +} +{ + wine_bug_20548_ReadFile + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:NtReadFile +} +{ + wine_bug_20548_WS_shutdown + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:WS2_register_async_shutdown + fun:WS_shutdown +} +{ + wine_bug_20654 + Memcheck:Leak + ... + fun:RtlAllocateHeap + fun:get_full_path_helper + fun:RtlGetFullPathName_U +} +{ + # This leak is expected - wine doesn't have a reliable way to free the default provider on exit. + wine_bug_20679 + Memcheck:Leak + ... + fun:CRYPT_GetDefaultProvider +} +{ + # Benign window title leak? + wine_bug_20692_wontfix + Memcheck:Leak + ... + fun:DEFWND_SetText* + ... + fun:CreateWindow* +} +{ + wine_bug_21045 + Memcheck:Leak + fun:RtlAllocateHeap + fun:SECUR32_addPackages + fun:SECUR32_initNegotiateSP +} + +# 3. Chromium specific errors that are intentional unit test errors, +# or stuff that is somehow a false positive in our own code, +# or stuff that is so trivial it's not worth fixing. + +{ + wine_bug_20551_as_seen_by_chromium + Memcheck:Leak + ... + fun:RtlAllocateHeap + ... + fun:GlobalAlloc + ... + fun:Clipboard::WriteObjects +} +{ + suppress_chromium_crasher + Memcheck:Addr1 + ... + fun:*Test_Crasher* +} +{ + ignore_mozilla_errors + Memcheck:Cond + obj:*/ImporterTest/profile/mozcrt19.dll +} +{ + ignore_mozilla_errors2 + Memcheck:Cond + obj:*/chrome/test/data/firefox3_nss/mozcrt19.dll +} +{ + ignore_gears_errors + Memcheck:Addr4 + obj:*/gears.dll +} +{ + ignore_nss_decryptor_init_errors + Memcheck:Leak + fun:RtlAllocateHeap + ... + fun:NSSDecryptor::Init +} +# Not sure why Valgrind started to think everything happening in the +# usr1_handler is invalid. Can't seem to reproduce these locally. +# This happens in URLFetcherTest.SameThreadsTest. +{ + ignore_wine_ntdll_usr1_handler_a + Memcheck:Addr1 + ... + fun:usr1_handler +} +{ + ignore_wine_ntdll_usr1_handler_b + Memcheck:Addr2 + ... + fun:usr1_handler +} +{ + ignore_wine_ntdll_usr1_handler_c + Memcheck:Addr4 + ... + fun:usr1_handler +} +{ + # This occurs at the same time as the usr1_handler errors above. + ignore_wine_ntdll_no_symbol + Memcheck:Addr4 + obj:*ntdll.dll.so +} +{ + # mysterious leaks in rsaenh.dll.so, no symbols / incorrect symbols. + ignore_wine_rsaenh_no_symbols + Memcheck:Leak + fun:RtlAllocateHeap + obj:*rsaenh.dll.so + +} +{ + # Maybe a leak in strtoi() ?? StringToInt() seems to be leak free. + ignore_strtoi_leak + Memcheck:Leak + fun:RtlAllocateHeap + ... + fun:StringToInt +} +{ + # Maybe a leak in _strtoi64() ?? StringToInt64() seems to be leak free. + ignore_strtoi64_leak + Memcheck:Leak + fun:RtlAllocateHeap + ... + fun:StringToInt64 +} +{ + # A leak in _vsnprintf_s? + ignore_vsnprintf_s + Memcheck:Leak + fun:RtlAllocateHeap + ... + fun:_vsnprintf_s + fun:base::vsnprintf + fun:vsnprintfT +} +{ + # A leak in _wfopen_s() ?? ReadFileToString() behaves correctly. + ignore_wfopen_s_leak + Memcheck:Leak + fun:RtlAllocateHeap + ... + fun:_wfopen_s + fun:file_util::ReadFileToString + fun:FileReader::ReadFileOnBackgroundThread +} +{ + # Leaking an 8 byte Clipboard object in the test code. + ignore_get_clipboard + Memcheck:Leak + fun:RtlAllocateHeap + ... + fun:operator new + fun:TestViewsDelegate::GetClipboard + fun:views::NativeTextfieldWin::OnCopy +} +{ + # mysterious leak in _calloc_crt. Bug in Wine perhaps?? Hard to reproduce. + ignore_calloc_crt + Memcheck:Leak + fun:RtlAllocateHeap + fun:win_heap_malloc + fun:malloc + fun:calloc + fun:_calloc_impl + fun:_calloc_crt + STOP +} +{ + # Boy, oh, boy do we need a better way to deal with this. + # See https://bugs.kde.org/show_bug.cgi?id=190660 + valgrind_bug_190660 + Memcheck:Addr4 + fun:strlen +} +{ + # Boy, oh, boy do we need a better way to deal with this. + # See https://bugs.kde.org/show_bug.cgi?id=190660 + valgrind_bug_190660 + Memcheck:Addr4 + fun:strcmp +} +{ + # Boy, oh, boy do we need a better way to deal with this. + # See https://bugs.kde.org/show_bug.cgi?id=190660 + valgrind_bug_190660 + Memcheck:Addr4 + fun:strchr +} +{ + # Boy, oh, boy do we need a better way to deal with this. + # See https://bugs.kde.org/show_bug.cgi?id=190660 + valgrind_bug_190660 + Memcheck:Addr4 + fun:strcat +} +{ + # Boy, oh, boy do we need a better way to deal with this. + # See https://bugs.kde.org/show_bug.cgi?id=190660 + valgrind_bug_190660 + Memcheck:Addr4 + fun:strncpy +} +{ + # Same leak exists in src/tools/valgrind/memcheck/suppressions.txt + # with a mangled stack signature. + intentional_ChromeThreadTest_NotReleasedIfTargetThreadNonExistent_Test_leak + Memcheck:Leak + ... + fun:operator new + fun:ChromeThreadTest_NotReleasedIfTargetThreadNonExistent_Test::TestBody + fun:testing::Test::Run +} + +# 4. Suppressions for real chromium bugs that are not yet fixed. +{ + # Same leak exists in src/tools/valgrind/memcheck/suppressions.txt + # with a mangled stack signature. + bug_15276 + Memcheck:Cond + fun:cld::OctaHashV3Lookup4 + fun:cld::DoOctaScoreV3 + fun:ScoreQuadgrams + fun:CompactLangDetImpl::DetectLanguageSummaryV25 + fun:CompactLangDet::DetectLanguage +} +{ + # Same leak exists in src/tools/valgrind/memcheck/suppressions.txt + # with a mangled stack signature. + bug_20653a + Memcheck:Param + write(buf) + ... + fun:sqlite3OsWrite + fun:pager_write_pagelist +} +{ + # Same leak exists in src/tools/valgrind/memcheck/suppressions.txt + # with a mangled stack signature. + bug_20653b + Memcheck:Param + write(buf) + ... + fun:*Write + fun:sqlite3OsWrite + ... + fun:pager_write +} +{ + bug_30547 + Memcheck:Leak + ... + fun:operator new + fun:ImportantFileWriter::WriteNow + fun:BookmarkStorage::SaveNow + fun:BookmarkStorage::BookmarkModelDeleted +} +{ + bug_30614 + Memcheck:Cond + fun:strncpy + fun:AffixMgr::parse_affix + ... + fun:SpellCheck::InitializeHunspell +} +{ + bug_31640 + Memcheck:Leak + fun:RtlAllocateHeap + ... + fun:xmlGetGlobalState + fun:__xmlGenericError + fun:ScopedXmlErrorFunc::ScopedXmlErrorFunc + fun:UpdateManifest::Parse +} +{ + bug_31643 + Memcheck:Leak + ... + fun:operator new + fun:browser_sync::UIModelWorker::DoWorkAndWaitUntilDone + fun:Syncer::SyncShare +} +{ + bug_31644 + Memcheck:Leak + ... + fun:operator new + fun:NewRunnableMethod<ExtensionsServiceBackend,void (__thiscall ExtensionsServiceBackend::*)(void)> + fun:ExtensionsService::ClearProvidersForTesting +} +{ + bug_33424 + Memcheck:Leak + ... + fun:net::TCPClientSocketWin::Read + fun:net::*::DoReadHeaders + ... + fun:net::*::OnIOComplete +} +{ + # This is a bit flaky, but it happens with both + # FLAKY_FTPDirectoryListing_Test and FLAKY_FTPCacheLoginBoxCredentials_Test + bug_33425 + Memcheck:Leak + ... + fun:net::TCPClientSocketWin::Read + fun:net::FtpNetworkTransaction::DoCtrlRead + fun:net::FtpNetworkTransaction::DoLoop + fun:net::FtpNetworkTransaction::OnIOComplete + fun:DispatchToMethod<net::FtpNetworkTransaction,void (__thiscall net::FtpNetworkTransaction::*)(int),int> +} +{ + # This is an invalid read/write that shows up sporadically. + bug_33426 + Memcheck:Addr4 + fun:_free_base + ... + fun:std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char> >::~basic_stringbuf<char,std::char_traits<char>,std::allocator<char> > + fun:std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> >::~basic_stringstream<char,std::char_traits<char>,std::allocator<char> > + fun:std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> >::`vbase destructor' + fun:testing::internal::StrStreamToString + fun:testing::Message::GetString + fun:testing::AssertionResult::operator<<<enum net::LoadLog::EventPhase> + ... + fun:SSLClientSocketTest_ConnectMismatched_Test::TestBody +} diff --git a/tools/valgrind/wine_memcheck/winetricks b/tools/valgrind/wine_memcheck/winetricks new file mode 100644 index 0000000..3ea5dfa --- /dev/null +++ b/tools/valgrind/wine_memcheck/winetricks @@ -0,0 +1,3548 @@ +#!/bin/sh +# Quick and dirty script to download and install various +# redistributable runtime libraries +# +# Current maintainers: Austin English, Dan Kegel +# Copyright 2007, 2008, 2009, 2010 Google (Dan Kegel, dank@kegel.com) +# Copyright 2008, 2009, 2010 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=20100201 + +early_wine() +{ + WINEDLLOVERRIDES=mshtml= $WINE "$@" +} + +# Default values for important settings if not already in environment. +# These settings should not need editing here. +case "$OS" in + "Windows_NT") + # Cheezy fix for getting rid of double slashes when running cygwin in wine + case $HOME in + /) HOME="" ;; + esac + WINE="" + WINEPREFIX=${WINEPREFIX:-$HOME/.wine} + DRIVE_C="C:/" + XXXPATH=cygpath + ;; + *) + WINE=${WINE:-wine} + WINEPREFIX=${WINEPREFIX:-$HOME/.wine} + DRIVE_C="$WINEPREFIX/drive_c" + XXXPATH="early_wine winepath" + ;; +esac + +# 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_CACHE_WIN="`$XXXPATH -w $WINETRICKS_CACHE | tr '\012' ' ' | sed 's/ $//'`" +WINETRICKS_TMP="$DRIVE_C"/winetrickstmp +WINETRICKS_TMP_WIN='c:\winetrickstmp' +mkdir -p $WINETRICKS_TMP + +# Overridden for windows +ISO_MOUNT_ROOT=/mnt/winetricks + +WINDIR="$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 + + # For some reason, nulls were showing up in $@?!, causing truncated output in zenity + msg="`echo $@ | tr '\000' ' '`" + case $DE in + gnome) zenity --error --title=Winetricks --text="$msg" --no-wrap;; + kde) kdialog --title Winetricks --error "$msg" ;; + x) xmessage -title Winetricks -center " Error: $msg " ;; + 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 -L "$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 + # WARNING: do not use single quote in any package description; that breaks the gui menu. + 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 2007 runtime" + echo " atmlib Adobe Type Manager. Needed for Adobe CS4" + echo " autohotkey Autohotkey (open source gui scripting language)" + echo " cmake CMake, the cross-platform, open-source build system" + 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 " d3dx10 MS d3dx10_??.dll (from DirectX user redistributable)" + echo " dcom98 MS DCOM (ole32, oleaut32); requires Windows 98 license, but does not check for one" + 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 " directx9-beta MS DirectX 9 user redistributable - beta verb (not recommended! use d3dx9 instead)" + echo " divx divx video codec" + echo " dotnet11 MS .NET 1.1 (requires Windows license, but does not check for one)" +# Doesn't work yet, don't make it public +# echo " dotnet11sdk MS .NET Framework SDK Version 1.1 (requires Windows license, but does not check for one; may not work yet)" + echo " dotnet20 MS .NET 2.0 (requires Windows license, but does not check for one)" +# Doesn't work yet, don't make it public +# echo " dotnet20sdk MS .NET Framework SDK Version 2.0 (requires Windows license, but does not check for one, may not work yet)" + echo " dotnet20sp2 MS .NET 2.0 sp2 (requires Windows license, but does not check for one)" + echo " dotnet30 MS .NET 3.0 (requires Windows license, but does not check for one, might not work yet)" + echo " droid Droid fonts (on LCD, looks better with fontsmooth-rgb)" + echo " ffdshow ffdshow video codecs" + echo " firefox Firefox web browser" + 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-bgr Enables subpixel smoothing for BGR LCDs" + echo " fontsmooth-disable Disables font smoothing" + echo " fontsmooth-gray Enables grayscale font smoothing" + echo " fontsmooth-rgb Enables subpixel smoothing for RGB LCDs" + echo " gdiplus MS gdiplus.dll" + echo " gecko-dbg The HTML rendering Engine (Mozilla), with debugging symbols" + echo " gecko The HTML rendering Engine (Mozilla)" + echo " hosts Adds empty C:\windows\system32\drivers\etc\{hosts,services} files" + echo " icodecs Intel Codecs (Indeo)" + echo " ie6 Microsoft Internet Explorer 6.0" + echo " ie7 Microsoft Internet Explorer 7.0" + echo " jet40 MS Jet 4.0 Service Pack 8" + echo " kde KDE for Windows installer" + 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 " mingw-gdb GDB for MinGW" + echo " mingw Minimalist GNU for Windows, including GCC for Windows!" + echo " mono20 mono-2.0.1" + echo " mono22 mono-2.2" + echo " mono24 mono-2.4" + echo " mozillabuild Mozilla build environment" + echo " mpc Media Player Classic" + echo " mshflxgd MS Hierarchical Flex Grid Control" + echo " msi2 MS Installer 2.0" + echo " msls31 MS Line Services 3.1 (needed by native riched?)" + echo " msmask MS Masked Edit Control" + echo " mspaint MS Paint (gotta draw stick figures somehow...)" + 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 " physx NVIDIA/AGEIA PhysX runtime" + echo " psdk2003 MS Platform SDK 2003" + echo " psdkvista MS Vista SDK (does not install yet)" + echo " psdkwin7 MS Windows 7 SDK (installing just headers and c++ compiler works)" + echo " python26 Python 2.6.2 (and pywin32)" + echo " python-comtypes Python 0.6.1-1 comtypes package" + echo " quicktime72 Apple Quicktime 7.2" + echo " riched20 MS riched20 and riched32" + echo " riched30 MS riched30" + echo " richtx32 MS Rich TextBox Control 6.0" + echo " shockwave Adobe Shockwave Player" + echo " tahoma MS Tahoma font (not part of corefonts)" + echo " urlmon MS urlmon.dll" + echo " usp10 MS usp10.dll (Uniscribe)" + 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 Service Pack 6 runtime" + echo " vc2005express MS Visual C++ 2005 Express" + echo " vc2005expresssp1 MS Visual C++ 2005 Express SP1 (does not work yet)" + echo " vc2005sp1 MS Visual C++ 2005 Service Pack 1 and ATL fix (install trial 1st)" + echo " vc2005hotfix MS Visual C++ 2005 hotfixes (install sp1 1st)" + echo " vc2005trial MS Visual C++ 2005 Trial" + 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 " vcrun6 MS Visual C++ 6 sp4 libraries (mfc42, msvcp60, msvcrt)" + echo " vcrun6sp6 MS Visual C++ 6 sp6 libraries (mfc42, msvcp60, msvcrt; 64 MB download)" + echo " vjrun20 MS Visual J# 2.0 SE libraries (requires dotnet20)" + echo " vlc VLC media player" + echo " wenquanyi WenQuanYi CJK font (on LCD looks better with fontsmooth-rgb)" + echo " wininet MS wininet.dll (requires Windows license, but does not check for one)" + echo " wme9 MS Windows Media Encoder 9 (requires Windows license, but does not check for one)" + echo " wmp10 MS Windows Media Player 10 (requires Windows license, but does not check for one)" + echo " wmp9 MS Windows Media Player 9 (requires Windows license, but does not check for one)" + echo " wsh56js MS Windows scripting 5.6, jscript only, no cscript" + echo " wsh56 MS Windows Scripting Host 5.6" + 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 "Pseudopackages:" + echo " allfonts All listed fonts (corefonts, tahoma, liberation)" + echo " allcodecs All listed codecs (xvid, ffdshow, icodecs)" + echo " ddr=gdi Set DirectDrawRenderer to GDI (default)" + echo " ddr=opengl Set DirectDrawRenderer to OpenGL" + echo " fakeie6 Set registry to claim IE6sp1 is installed" + echo " glsl-disable Disable GLSL use by Wine Direct3D" + echo " glsl-enable Enable GLSL use by Wine Direct3D (default)" + echo " heapcheck Enable heap checking" + echo " multisampling=enabled Enable Direct3D multisampling" + echo " multisampling=disabled Disable Direct3D multisampling (default)" + echo " native_mdac Override odbc32, odbccp32 and oledb32" + echo " native_oleaut32 Override oleaut32" + echo " nocrashdialog Disable the graphical crash dialog" + echo " orm=backbuffer Registry tweak: OffscreenRenderingMode=backbuffer" + echo " orm=fbo Registry tweak: OffscreenRenderingMode=fbo (default)" + echo " orm=pbuffer Registry tweak: OffscreenRenderingMode=pbuffer" + echo " rtlm=auto Set RenderTargetLockMode to auto (default)" + echo " rtlm=disabled Set RenderTargetLockMode to disabled" + echo " rtlm=readdraw Set RenderTargetLockMode to readdraw" + echo " rtlm=readtex Set RenderTargetLockMode to readtex" + echo " rtlm=texdraw Set RenderTargetLockMode to texdraw" + echo " rtlm=textex Set RenderTargetLockMode to textex" + echo " sandbox Sandbox the wineprefix - remove links to ~" + echo " sound=alsa Set sound driver to ALSA" + echo " sound=audioio Set sound driver to AudioIO" + echo " sound=coreaudio Set sound driver to CoreAudio" + echo " sound=esound Set sound driver to Esound" + echo " sound=jack Set sound driver to Jack" + echo " sound=nas Set sound driver to Nas" + echo " sound=oss Set sound driver to OSS" + echo " sound=disabled Disable sound" + 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 "$@" + # Mark executable - needed if running on windows vista + case "$1" in + *.exe) chmod +x "$1" || true + cmd /c "$@" + ;; + *) + "$@" + ;; + esac + status=$? + if test $status -ne 0 + then + die "Note: command '$@' returned status $status. Aborting." + fi +} + +try_regedit() { + # on windows, doesn't work without cmd /c + case "$OS" in + "Windows_NT") cmdc="cmd /c";; + *) unset cmdc + esac + + try early_wine $cmdc regedit "$@" +} + +regedit() { + die oops, bug, please report +} + +# 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 + # Need to decompress .exe's that are compressed, else cygwin fails + # Only affects cygwin, so don't barf if 'file' not installed + FILE=`which file` + case $FILE-$file in + /*-*.exe) + case `file $file` in + *gzip*) mv $file $file.gz; gunzip < $file.gz > $file;; + esac + esac + + 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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\set-winver.reg + rm "$WINETRICKS_TMP"/set-winver.reg +} + +set_ddr() { + echo "Setting DirectDrawRenderer to $1" + cat > "$WINETRICKS_TMP"/set-ddr.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\Direct3D] +"DirectDrawRenderer"="$1" + +_EOF_ + try_regedit "$WINETRICKS_TMP"/set-ddr.reg +} +set_orm() { + echo "Setting OffscreenRenderingMode to $1" + cat > "$WINETRICKS_TMP"/set-orm.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\Direct3D] +"OffscreenRenderingMode"="$1" + +_EOF_ + try_regedit "$WINETRICKS_TMP_WIN"\\set-orm.reg +} + +set_rtlm() { + echo "Setting RenderTargetLockMode to $1" + cat > "$WINETRICKS_TMP"/set-rtlm.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\Direct3D] +"RenderTargetLockMode"="$1" + +_EOF_ + try_regedit "$WINETRICKS_TMP"/set-rtlm.reg +} + +set_multisampling() { + echo "Setting Multisampling to $1" + cat > "$WINETRICKS_TMP"/set-multi.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\Direct3D] +"Multisampling"="$1" + +_EOF_ + try_regedit "$WINETRICKS_TMP"/set-multi.reg +} + +set_sound_driver() { + echo "Setting sound driver to $1" + cat > "$WINETRICKS_TMP"/set-sound.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\Drivers] +"Audio"="$1" + +_EOF_ + try_regedit "$WINETRICKS_TMP_WIN"\\set-sound.reg +} + +disable_crashdialog() { + echo "Disabling graphical crash dialog" + cat > "$WINETRICKS_TMP"/crashdialog.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\WineDbg] +"ShowCrashDialog"=dword:00000000 + +_EOF_ + try_regedit "$WINETRICKS_TMP_WIN"\\crashdialog.reg +} + +sandbox() { + # remove symlinks + try rm "$WINEPREFIX/drive_c/users/$USER/Desktop" + try rm "$WINEPREFIX/drive_c/users/$USER/My Documents" + try rm "$WINEPREFIX/drive_c/users/$USER/My Music" + try rm "$WINEPREFIX/drive_c/users/$USER/My Pictures" + try rm "$WINEPREFIX/drive_c/users/$USER/My Videos" + # create replacement directories + try mkdir "$WINEPREFIX/drive_c/users/$USER/Desktop" + try mkdir "$WINEPREFIX/drive_c/users/$USER/My Documents" + try mkdir "$WINEPREFIX/drive_c/users/$USER/My Music" + try mkdir "$WINEPREFIX/drive_c/users/$USER/My Pictures" + try mkdir "$WINEPREFIX/drive_c/users/$USER/My Videos" +} + +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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\register-font.reg +} + +append_path() { + # Prepend $1 to the windows path in the registry. Caller must use single quotes and double backslashes in argument. + NEW_PATH="$1" + WIN_PATH="`WINEDEBUG= $WINE cmd.exe /c echo "%PATH%" | sed 's,\\\\,\\\\\\\\,g'`" + + cat > "$WINETRICKS_TMP"/path.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment] +_EOF_ + echo '"PATH"="'"$NEW_PATH;$WIN_PATH\"" | sed "s/\\\\/\\\\\\\\/g" >> "$WINETRICKS_TMP"/path.reg + + try_regedit "$WINETRICKS_TMP_WIN"\\path.reg + rm -f "$WINETRICKS_TMP"/path.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://www.microsoft.com/downloads/details.aspx?familyid=d9ae78d9-9dc6-4b38-9fa6-2c745a175aed&displaylang=en + download . http://download.microsoft.com/download/D/2/A/D2A2FC8B-0447-491C-A5EF-E8AA3A74FB98/AccessRuntime.exe 571811b7536e97cf4e4e53bbf8260cddd69f9b2d + cd "$WINETRICKS_CACHE" + try $WINE AccessRuntime.exe $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/AutoHotkey104805_Install.exe 13e5a9ca6d5b7705f1cd02560c3af4d38b1904fc + try $WINE "$WINETRICKS_CACHE"/AutoHotkey104805_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:$winetricks_tmp_win" /c $WINETRICKS_QUIET + try unzip -o $WINETRICKS_UNIXQUIET -d "$WINDIR"/temp "$WINETRICKS_TMP"/comctl32.exe + try $WINE "$WINDIR"/temp/x86/50ComUpd.Exe "/T:$winetricks_tmp_win" /c $WINETRICKS_QUIET + try cp "$WINETRICKS_TMP"/comcnt.dll "$WINDIR"/system32/comctl32.dll + + override_dlls native,builtin comctl32 + + # some builtin apps don't like native comctl32 + override_app_dlls winecfg.exe builtin comctl32 + override_app_dlls explorer.exe builtin comctl32 + override_app_dlls iexplore.exe builtin comctl32 +} + +#---------------------------------------------------------------- + +load_cmake() { + download . http://www.cmake.org/files/v2.6/cmake-2.6.4-win32-x86.exe 00bd502423546b8bce19ffc180ea78e0e2f396cf + try $WINE "$WINETRICKS_CACHE"/cmake-2.6.4-win32-x86.exe +} + +#---------------------------------------------------------------- + +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() { + # See http://bugs.winehq.org/show_bug.cgi?id=21206 + # Current is 1.7, but that doesn't install on wine, so jump through + # hoops to get 1.5 + #download cygwin http://cygwin.com/setup.exe fdc9379ed58231cddd25bb7b448426681a3dd3c3 + # this is some random verison of cygwin's setup from mid-2009, before the change that wine couldn't handle. + download cygwin http://kegel.com/cygwin/1.5/setup.exe 5cfb8ebe4f385b0fcffa04d22d607ec75ea05180 + mkdir -p "$DRIVE_C"/cygpkgs + # If you happen to have saved your cygpkgs directory, unpack it now + test -f "$WINETRICKS_CACHE/cygwin/cygpkgs.tgz" && (cd "$DRIVE_C"; gunzip -dc "$WINETRICKS_CACHE/cygwin/cygpkgs.tgz" | tar -xf -) + cp "$WINETRICKS_CACHE/cygwin/setup.exe" "$DRIVE_C"/cygpkgs + cd "$DRIVE_C"/cygpkgs + warn "Paste in ftp://www.fruitbat.org/pub/cygwin/circa/2009/09/08/111037 as the repo url for now, until bug 21206 is fixed" + # -X option is insecure, but we have to use it because fruitbat.org didn't archive .sig files :-( + try $WINE setup.exe -X + 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_d3dx10() { + helper_directx_dl + + # Kinder, less invasive directx10 - only extract and override d3dx10_??.dll + cabextract -d "$WINETRICKS_TMP" -L -F '*d3dx10*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 d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 + override_dlls native d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41 d3dx10_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." + + # Setting windows version to win2k apparently crashes the installer on OS X... + # See http://code.google.com/p/winezeug/issues/detail?id=71 + if [ "`uname -s`" = "Darwin" ] + then + set_winver winxp + else + set_winver $DIRECTX_WINDOWS + fi + + 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 + # 7.0.? ad420bf8bf72e924e658c9c6ad6bba76b848fb79 as of 23 Sep 2009 as http://download.divx.com/divx/DivXInstaller.exe + # 7.0.? 3385aa8f6ba64ae32e06f651bbbea247bcc1a44d as of 12 Dec 2009 as http://download.divx.com/divx/DivXInstaller.exe + + download divx-7 http://download.divx.com/divx/DivXInstaller.exe 3385aa8f6ba64ae32e06f651bbbea247bcc1a44d + + try $WINE "$WINETRICKS_CACHE"/divx-7/DivXInstaller +} + +#---------------------------------------------------------------- + +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" + + # If this is just a dependency check, don't re-install + if test $PACKAGE != dotnet11 && test -d "$DOTNET_INSTALL_DIR" + then + echo "prerequisite dotnet11 already installed, skipping" + return + fi + + # 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_dotnet11sdk() { + load_dotnet11 + + warn "Installer hangs at end... not sure if it works fully." + # http://www.microsoft.com/downloads/details.aspx?familyid=9B3A2CA6-3647-4070-9F41-A333C6B9181D + download dotnet11sdk http://download.microsoft.com/download/5/2/0/5202f918-306e-426d-9637-d7ee26fbe507/setup.exe 9509b14924bcaf84a7780de3f6ad7894004c3450 + cd "$WINETRICKS_CACHE"/dotnet11sdk + try $WINE setup.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_dotnet20() { + load_fontfix + + # 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 + warn "Instaling .net 2.0 runtime. Can take several minutes. See http://wiki.winehq.org/MicrosoftDotNet for tips." + + # 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 0d2e3f025bcdf852b192c9408a361ac2659fa249 + 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_dotnet20sp2() { + warn "Instaling .net 2.0 runtime. Can take several minutes. See http://wiki.winehq.org/MicrosoftDotNet for tips." + + # 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 0d2e3f025bcdf852b192c9408a361ac2659fa249 + try cp -f "$WINETRICKS_CACHE"/dotnet20/l_intl.nls "$WINDIR/system32/" + + # http://www.microsoft.com/downloads/details.aspx?familyid=5B2C0358-915B-4EB5-9B1D-10E506DA9D0F + download dotnet20 http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe 22d776d4d204863105a5db99e8b8888be23c61a7 + if [ "$WINETRICKS_QUIET"x = ""x ] + then + try $WINE "$WINETRICKS_CACHE"/dotnet20/NetFx20SP2_x86.exe + else + try $WINE "$WINETRICKS_CACHE"/dotnet20/NetFx20SP2_x86.exe /q /c:"install.exe /q" + fi + unset_winver +} + +#---------------------------------------------------------------- + +load_dotnet20sdk() { + load_dotnet20 + + # http://www.microsoft.com/downloads/details.aspx?familyid=9B3A2CA6-3647-4070-9F41-A333C6B9181D + download dotnet20sdk http://download.microsoft.com/download/c/4/b/c4b15d7d-6f37-4d5a-b9c6-8f07e7d46635/setup.exe 4e4b1072b5e65e855358e2028403f2dc52a62ab4 + cd "$WINETRICKS_CACHE"/dotnet20sdk + try $WINE setup.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_dotnet30() { + # If this is just a dependency check, don't re-install + if test $PACKAGE != dotnet30 && test -d "$WINDIR/Microsoft.NET/Framework/v3.0/Microsoft .NET Framework 3.0" + then + echo "prerequisite dotnet30 already installed, skipping" + return + fi + + warn "Instaling .net 3.0 runtime. Can take 15-30 minutes. See http://wiki.winehq.org/MicrosoftDotNet for tips." + 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 + + # AF's workaround to avoid long pause + LANGPACKS_BASE_PATH="${WINDIR}/SYSMSICache/Framework/v3.0" + test -d "${LANGPACKS_BASE_PATH}" || mkdir -p "${LANGPACKS_BASE_PATH}" + for lang in ar cs da de el es fi fr he it jp ko nb nl pl pt-BR pt-PT ru \ + sv tr zh-CHS zh-CHT + do + ln -sf "${WINDIR}/system32/spupdsvc.exe" "${LANGPACKS_BASE_PATH}/dotnetfx3langpack${lang}.exe" + done + + 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 +} + +#---------------------------------------------------------------- + +load_dotnet35() { + warn "This does not work yet, see bug 20110" + + # According to AF's recipe, installing dotnet30 first works around msi bugs + load_dotnet30 + + # http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6 + download dotnet35 http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe + + # See also http://blogs.msdn.com/astebner/archive/2008/07/17/8745415.aspx + cd "$DRIVE_C" + cabextract $WINETRICKS_UNIXQUIET "$WINETRICKS_CACHE"/dotnet35/dotnetfx35.exe + cd wcu/dotNetFramework + try $WINE dotNetFx35setup.exe /lang:ENU +} + +#---------------------------------------------------------------- + +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_regedit "$WINETRICKS_TMP_WIN"\\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.6/win32/en-US/Firefox%20Setup%203.5.6.exe" d27779d9dca25d032ceaafd3da9df1651121f8bd "Firefox Setup 3.5.6.exe" + if [ "$WINETRICKS_QUIET"x = ""x ] + then + try $WINE "$WINETRICKS_CACHE"/"Firefox Setup 3.5.6.exe" + else + try $WINE "$WINETRICKS_CACHE"/"Firefox Setup 3.5.6.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 + # 2009-12-09: sha1sum f4ec0e95099e354fd01cd3bb27c202f54932dc70 + + download . http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_ax.exe f4ec0e95099e354fd01cd3bb27c202f54932dc70 + 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 + # 2009-12-09: sha1sum ccb4811b1cc26721c4abb2e5a080868acdee7b87 + + download . http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player.exe ccb4811b1cc26721c4abb2e5a080868acdee7b87 + 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. + # I've seen psdkwin7 setup crash because of this; the symptom was a messagebox saying + # SDKSetup encountered an error: The type initializer for 'Microsoft.WizardFramework.WizardSettings' threw an exception + # and WINEDEBUG=+relay,+seh shows an exception very quickly after + # Call KERNEL32.CreateFileW(0c83b36c L"Z:\\USR\\SHARE\\FONTS\\TRUETYPE\\TTF-ORIYA-FONTS\\SAMYAK-ORIYA.TTF",80000000,00000001,00000000,00000003,00000080,00000000) ret=70d44091 + if xlsfonts 2>/dev/null | egrep -i "samyak|oriya" + then + die "Please uninstall the Samyak/Oriya font, e.g. 'sudo dpkg -r ttf-oriya-fonts', then log out and log in again. That font causes strange crashes in .net programs." + 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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\geckopath.reg + + # register the dll, since it was disabled before + try $WINE regsvr32 mshtml +} + +#---------------------------------------------------------------- + +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_regedit "$WINETRICKS_TMP_WIN"\\geckopath.reg + + # register the dll, since it was disabled before + try $WINE regsvr32 mshtml +} + +#---------------------------------------------------------------- + +load_gdiplus() { + # http://www.microsoft.com/downloads/details.aspx?familyid=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&displaylang=en + download . http://download.microsoft.com/download/a/b/c/abc45517-97a0-4cee-a362-1957be2f24e1/WindowsXP-KB975337-x86-ENU.exe b9a84bc3de92863bba1f5eb1d598446567fbc646 + try $WINE "$WINETRICKS_CACHE"/WindowsXP-KB975337-x86-ENU.exe /extract:$WINETRICKS_TMP_WIN $WINETRICKS_QUIET + # And then make it globally available. + try cp "$WINETRICKS_TMP/asms/10/msft/windows/gdiplus/gdiplus.dll" "$WINDIR"/system32/ + + # For some reason, native,builtin isn't good enough...? + override_dlls native gdiplus +} + +#---------------------------------------------------------------- + +load_glsl_disable() { + echo "Disabling GLSL" + cat > "$WINETRICKS_TMP"/disableglsl.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\Direct3D] +"UseGLSL"="disabled" + +_EOF_ + try_regedit "$WINETRICKS_TMP_WIN"\\disableglsl.reg +} + +#---------------------------------------------------------------- + +load_glsl_enable() { + echo "Enabling GLSL" + cat > "$WINETRICKS_TMP"/enableglsl.reg <<_EOF_ +REGEDIT4 + +[HKEY_CURRENT_USER\Software\Wine\Direct3D] +"UseGLSL"="enabled" + +_EOF_ + try_regedit "$WINETRICKS_TMP_WIN"\\enableglsl.reg +} + +#---------------------------------------------------------------- + +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 +} + +#---------------------------------------------------------------- + +set_heapcheck() { + cat > "$WINETRICKS_TMP"/heapcheck.reg <<_EOF_ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager] +"GlobalFlag"=dword:00200030 + +_EOF_ + try_regedit "$WINETRICKS_TMP_WIN"\\heapcheck.reg +} + +#---------------------------------------------------------------- + +load_icodecs() { + # http://downloadcenter.intel.com/Detail_Desc.aspx?strState=LIVE&ProductID=355&DwnldID=2846 + download . ftp://download.intel.com/support/createshare/camerapack/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, if any + 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 + + # Workaround http://bugs.winehq.org/show_bug.cgi?id=21009 + # See also http://code.google.com/p/winezeug/issues/detail?id=78 + rm -f "$WINDIR"/system32/browseui.dll "$WINDIR"/system32/inseng.dll + + # 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_ie7() { + # 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 mshtml msimtf shdoclc shdocvw shlwapi urlmon xmllite + + # Bundled updspapi cannot work on wine + override_dlls builtin updspapi + + # Remove the fake dlls from the existing WINEPREFIX + for dll in itircl itss jscript mshtml msimtf shdoclc shdocvw shlwapi urlmon + do + test -f "$WINDIR"/system32/$dll.dll && + mv "$WINDIR"/system32/$dll.dll "$WINDIR"/system32/$dll.dll.bak + done + + # See http://bugs.winehq.org/show_bug.cgi?id=16013 + # Find instructions to create this file in dlls/wintrust/tests/crypt.c + download . http://winezeug.googlecode.com/svn/trunk/winetricks_files/winetest.cat ac8f50dd54d011f3bb1dd79240dae9378748449f + + # Put a dummy catalog file in place + mkdir -p "$WINDIR"/system32/catroot/\{f750e6c3-38ee-11d1-85e5-00c04fc295ee\} + try cp -f "$WINETRICKS_CACHE"/winetest.cat "$WINDIR"/system32/catroot/\{f750e6c3-38ee-11d1-85e5-00c04fc295ee\}/oem0.cat + + # Install + download . http://download.microsoft.com/download/3/8/8/38889DC1-848C-4BF2-8335-86C573AD86D9/IE7-WindowsXP-x86-enu.exe d39b89c360fbaa9706b5181ae4718100687a5326 + if [ $WINETRICKS_QUIET ] + then + $WINE "$WINETRICKS_CACHE"/IE7-WindowsXP-x86-enu.exe /quiet + else + $WINE "$WINETRICKS_CACHE"/IE7-WindowsXP-x86-enu.exe + fi + + # 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 + + # Seeing is believing + if [ "$WINETRICKS_QUIET" = "" ] + then + warn "Starting ie7. To start it later, use the command $WINE '${programfilesdir_win}\\\\Internet Explorer\\\\iexplore'" + $WINE "${programfilesdir_win}\\Internet Explorer\\iexplore" http://www.microsoft.com/windows/internet-explorer/ie7/ > /dev/null 2>&1 & + else + warn "To start ie7, use the command $WINE '${programfilesdir_win}\\\\Internet Explorer\\\\iexplore'" + fi +} + +#---------------------------------------------------------------- + +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/kdewin-installer-gui-0.9.6-5.exe f612945e094390d7bc0e4f8840d308ef2b00f86e + mkdir -p "$programfilesdir_unix/kde" + try cp "$WINETRICKS_CACHE"/kdewin-installer-gui-0.9.6-5.exe "$programfilesdir_unix/kde" + cd "$programfilesdir_unix/kde" + try $WINE "$programfilesdir_win\\kde\\kdewin-installer-gui-0.9.6-5.exe" + 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 oledb32 +} + +#---------------------------------------------------------------- + +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_mingw_min() { + # If this is just a dependency check, don't re-install + if test $PACKAGE != mingw_min && test $PACKAGE != mingw && test $PACKAGE != mingw-min && test -f "$DRIVE_C"/MinGW/bin/gcc.exe + then + echo "prerequisite mingw_min already installed, skipping" + return + fi + + # See http://mingw.org/wiki/Getting_Started + download . http://sourceforge.net/projects/mingw/files/GNU%20Binutils/binutils-2.19.1-mingw32-bin.tar.gz 1ab72f3af3fe96d08c3c9bff60c47913704d5774 + download . http://sourceforge.net/projects/mingw/files/GCC%20Version%204/gcc-core-4.4.0-mingw32-bin.tar.gz b88b8f3644ca0cdf2c41cd03f820bf7823a8eabb + download . http://sourceforge.net/projects/mingw/files/GCC%20Version%204/gcc-core-4.4.0-mingw32-dll.tar.gz 0372ecf4caf75d0d9fe4a7739ca234f1a3de831b + download . http://sourceforge.net/projects/mingw/files/GCC%20Version%204/gmp-4.2.4-mingw32-dll.tar.gz a14dd928382f093f67cb3cd57c140625b1b265bb + download . http://sourceforge.net/projects/mingw/files/MinGW%20libiconv/libiconv-1.13.1-1-mingw32-dll-2.tar.lzma 5b60ce4d9ec9cf91aee437915a2469b915e1235f + download . http://sourceforge.net/projects/mingw/files/MinGW%20Runtime/mingwrt-3.16-mingw32-dev.tar.gz 770ff5001989d8a9a1ec4f3621d8f264a24e178f + download . http://sourceforge.net/projects/mingw/files/MinGW%20Runtime/mingwrt-3.16-mingw32-dll.tar.gz b8032e97c79e16a3c540043f0f39821df1531ae9 + download . http://sourceforge.net/projects/mingw/files/GCC%20Version%204/mpfr-2.4.1-mingw32-dll.tar.gz 43b7ecb2c0c785c44321ff6c4376f51375713a7b + download . http://sourceforge.net/projects/mingw/files/GCC%20Version%204/pthreads-w32-2.8.0-mingw32-dll.tar.gz f922f8c0c42921fd4482a3d2e6f779d6384040c1 + download . http://sourceforge.net/projects/mingw/files/MinGW%20API%20for%20MS-Windows/w32api-3.13-mingw32-dev.tar.gz 5eb7d8ec0fe032a92bea3a2c8282a78df2f1793c + + mkdir "$DRIVE_C"/MinGW + cd "$DRIVE_C"/MinGW + gzip -d -c "$WINETRICKS_CACHE"/binutils-2.19.1-mingw32-bin.tar.gz | tar x + gzip -d -c "$WINETRICKS_CACHE"/mingwrt-3.16-mingw32-dev.tar.gz | tar x + gzip -d -c "$WINETRICKS_CACHE"/mingwrt-3.16-mingw32-dll.tar.gz | tar x + gzip -d -c "$WINETRICKS_CACHE"/w32api-3.13-mingw32-dev.tar.gz | tar x + gzip -d -c "$WINETRICKS_CACHE"/gmp-4.2.4-mingw32-dll.tar.gz | tar x + lzma -d -c "$WINETRICKS_CACHE"/libiconv-1.13.1-1-mingw32-dll-2.tar.lzma | tar x + gzip -d -c "$WINETRICKS_CACHE"/mpfr-2.4.1-mingw32-dll.tar.gz | tar x + gzip -d -c "$WINETRICKS_CACHE"/pthreads-w32-2.8.0-mingw32-dll.tar.gz | tar x + gzip -d -c "$WINETRICKS_CACHE"/gcc-core-4.4.0-mingw32-bin.tar.gz | tar x + gzip -d -c "$WINETRICKS_CACHE"/gcc-core-4.4.0-mingw32-dll.tar.gz | tar x + + append_path 'C:\\MinGW\\bin' +} + +#---------------------------------------------------------------- + +load_mingw_gdb() { + # See http://mingw.org/wiki/Getting_Started + load_mingw_min + + download . $SOURCEFORGE/mingw/GNU%20Source-Level%20Debugger/GDB-7.0/gdb-7.0-2-mingw32-bin.tar.gz a560cb0e3980d0ed853994c84038260212f58925 + + cd "$DRIVE_C"/MinGW + gzip -d -c "$WINETRICKS_CACHE"/gdb-7.0-2-mingw32-bin.tar.gz | tar x +} + +#---------------------------------------------------------------- + +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 + 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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\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_regedit "$WINETRICKS_TMP_WIN"\\mono_2.0.reg + rm -f "$WINETRICKS_TMP"/mono_2.0.reg +} + +#---------------------------------------------------------------- + +load_mozillabuild() { + download . http://ftp.mozilla.org/pub/mozilla.org/mozilla/libraries/win32/MozillaBuildSetup-1.4.exe + try $WINE "$WINETRICKS_CACHE"/MozillaBuildSetup-1.4.exe $WINETRICKS_S +} + +#---------------------------------------------------------------- + +load_mpc() { + download . $SOURCEFORGE/guliverkli2/Media%20Player%20Classic/6.4.9.1/mplayerc_20090706.zip 9b8e06a3997a786dccfb5739e0cc1a34f17905b6 + mkdir -p "$programfilesdir_unix/Media Player Classic" + cd "$programfilesdir_unix/Media Player Classic" + try unzip "$WINETRICKS_CACHE"/mplayerc_20090706.zip + + append_path "$programfilesdir_win"'\\Media Player Classic' + + cd "$olddir" + warn "MPC now available as $programfilesdir_win\Media Player Classic\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_mspaint() { + # http://helpforlinux.blogspot.com/2008/12/run-ms-paint-in-linux.html + download . http://download.microsoft.com/download/winntwks40/paint/1/nt4/en-us/paintnt.exe a22c4e367ef9d2cd23f0a8ae8d9ebff5bc1e8a0b + try unzip "$WINETRICKS_CACHE"/paintnt.exe -d "$WINDIR" + warn "Paint is now installed to $WINDIR/MSPAINT.EXE" +} + +#---------------------------------------------------------------- + +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 this is just a dependency check, don't re-install + if test $PACKAGE != msxml4 && test -f "$WINDIR"/system32/msxml4.dll + then + echo "prerequisite msxml4 already installed, skipping" + return + fi + # 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 + # SP3 (2009): http://www.microsoft.com/downloads/details.aspx?familyid=7F6C0CB4-7A5E-4790-A7CF-9E139E6819C0 + download msxml4sp3 http://download.microsoft.com/download/A/2/D/A2D8587D-0027-4217-9DAD-38AFDB0A177E/msxml.msi aa70c5c1a7a069af824947bcda1d9893a895318b + + try $WINE msiexec /i "$WINETRICKS_CACHE"/msxml4sp3/msxml.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 "$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_physx() +{ + # http://www.nvidia.com/object/physx_9.09.0814.html + download . http://us.download.nvidia.com/Windows/9.09.0814/PhysX_9.09.0814_SystemSoftware.exe e19f7c3385a4a68e7acb85301bb4d2d0d1eaa1e2 + try $WINE "$WINETRICKS_CACHE"/PhysX_9.09.0814_SystemSoftware.exe $WINETRICKS_QUIET +} + +#---------------------------------------------------------------- + +load_psdk2003() +{ + load_vcrun6 + + # 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 can take up to an hour." + cd "$WINETRICKS_CACHE"/psdk2003 + try $WINE PSDK-x86.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +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 "When given a choice, select only C++ compilers and headers, the other options don't work yet." + load_vcrun6 + load_vcrun2008 + load_dotnet20 + + # don't have a working unattended recipe. Maybe we'll have to + # do an autohotkey script until msft gets its act together: + # http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/c053b616-7d5b-405d-9841-ec465a8e21d5 + download psdkwin7 http://download.microsoft.com/download/7/A/B/7ABD2203-C472-4036-8BA0-E505528CCCB7/winsdk_web.exe a01dcc67a38f461e80ea649edf1353f306582507 + cd "$WINETRICKS_CACHE"/psdkwin7 + try $WINE winsdk_web.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_python26() { + + # If this is just a dependency check, don't re-install + if test $PACKAGE != python26 && test -f "$WINEPREFIX"/drive_c/Python26/python.exe + then + echo "prerequisite python26 already installed, skipping" + return + fi + + 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_python_comtypes() { + + load_python26 + + download . $SOURCEFORGE/project/comtypes/comtypes/0.6.1/comtypes-0.6.1-1.zip 814318cdae0ab2471a9cd500847bf12f4df9a57c + cd "$WINETRICKS_CACHE" + try unzip comtypes-0.6.1-1.zip + cd comtypes-0.6.1 + try $WINE "C:\Python26\python.exe" setup.py install + 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() { + case "$OS" in + "Windows_NT") + return + ;; + esac + + # 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_richtx32() { + download . http://activex.microsoft.com/controls/vb6/richtx32.cab da404b566df3ad74fe687c39404a36c3e7cadc07 + try cabextract "$WINETRICKS_CACHE"/richtx32.cab -d "$WINDIR"/system32 -F RichTx32.Ocx + try $WINE regsvr32 RichTx32.ocx +} + +#---------------------------------------------------------------- + +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 + # 2009-12-13 sha1sum: d35649883bf13cb1a86f5650e1050d15533ac0f4 + # 2010-01-23 sha1sum: 4a837d238c28c5f345d73f105711f20c6d059273 + + download . http://fpdownload.macromedia.com/get/shockwave/default/english/win95nt/latest/sw_lic_full_installer.msi 4a837d238c28c5f345d73f105711f20c6d059273 + 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_usp10() { + # http://www.microsoft.com/downloads/details.aspx?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"/usp10.dll "$WINDIR"/system32 + override_dlls native,builtin usp10 +} + +#---------------------------------------------------------------- + +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() { + if test ! -f "$WINETRICKS_CACHE"/vbrun60sp6.exe + then + download . http://download.microsoft.com/download/5/a/d/5ad868a0-8ecd-4bb0-a882-fe53eb7ef348/VB6.0-KB290887-X86.exe 73ef177008005675134d2f02c6f580515ab0d842 + rm -rf "$WINETRICKS_TMP"/* + + try $WINE "$WINETRICKS_CACHE"/VB6.0-KB290887-X86.exe "/T:$winetricks_tmp_win" /c $WINETRICKS_QUIET + if test ! -f "$WINETRICKS_TMP"/vbrun60sp6.exe + then + die vbrun60sp6.exe not found + fi + try mv "$WINETRICKS_TMP"/vbrun60sp6.exe "$WINETRICKS_CACHE" + fi + + # Delete some fake DLLs to ensure that the installer overwrites them. + rm -f "$WINDIR"/system32/comcat.dll + rm -f "$WINDIR"/system32/oleaut32.dll + rm -f "$WINDIR"/system32/olepro32.dll + rm -f "$WINDIR"/system32/stdole2.tlb + # Exits with status 43 for some reason? + $WINE "$WINETRICKS_CACHE"/vbrun60sp6.exe $WINETRICKS_QUIET + + status=$? + case $status in + 0|43) ;; + *) die $PACKAGE installation failed + esac +} + +#---------------------------------------------------------------- + +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:$winetricks_tmp_win" /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/comcat.dll + rm -f "$WINDIR"/system32/msvcrt.dll + rm -f "$WINDIR"/system32/oleaut32.dll + rm -f "$WINDIR"/system32/olepro32.dll + rm -f "$WINDIR"/system32/stdole2.tlb + # vcredist still exits with status 43. Anyone know why? + $WINE "$WINETRICKS_CACHE"/vcredist.exe + + status=$? + case $status in + 0|43) ;; + *) die $PACKAGE installation failed + esac + + # And then some apps need mfc42u.dll, dunno what right way + # is to get it, vcredist doesn't install it by default? + try cabextract "$WINETRICKS_CACHE"/vcredist.exe -d "$WINDIR"/system32/ -F mfc42u.dll + + override_dlls native,builtin msvcrt + +} + +#---------------------------------------------------------------- + +load_vcrun6sp6() { + if test ! -f vcredistsp6.exe + then + download . http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe 2292437a8967349261c810ae8b456592eeb76620 + + # No EULA is presented when passing command-line extraction arguments, + # so we'll simplify extraction with cabextract. We'll also try to avoid + # overwriting the older vcrun6 redist by renaming the extracted file. + try cabextract "$WINETRICKS_CACHE"/Vs6sp6.exe -d "$WINETRICKS_TMP" -F vcredist.exe + try mv "$WINETRICKS_TMP"/vcredist.exe "$WINETRICKS_CACHE"/vcredistsp6.exe + fi + + # Delete some fake dlls to avoid vcredist installer warnings + try rm -f "$WINDIR"/system32/comcat.dll + try rm -f "$WINDIR"/system32/msvcrt.dll + try rm -f "$WINDIR"/system32/oleaut32.dll + try rm -f "$WINDIR"/system32/olepro32.dll + try rm -f "$WINDIR"/system32/stdole2.tlb + # vcredist still exits with status 43. Anyone know why? + $WINE "$WINETRICKS_CACHE"/vcredistsp6.exe + + status=$? + case $status in + 0|43) ;; + *) die $PACKAGE installation failed + esac + + # And then some apps need mfc42u.dll, dunno what right way + # is to get it, vcredist doesn't install it by default? + try cabextract "$WINETRICKS_CACHE"/vcredistsp6.exe -d "$WINDIR"/system32/ -F mfc42u.dll + + 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 + cd "$WINETRICKS_CACHE" + cd vcrun2005-ms09-035 + try $WINE vcredist_x86.exe $WINETRICKS_QUIET + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_vcrun2008() { + # For the moment, assume windows already has this. + case "$OS" in + "Windows_NT") + return + ;; + esac + + # 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_vc2003toolkit() +{ + # http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-vc/2679/ANN-Microsoft-Visual-C-Toolkit-2003 + #download . http://download.microsoft.com/download/3/9/b/39bac755-0a1e-4d0b-b72c-3a158b7444c4/VCToolkitSetup.exe 956c81c3106b97042c4126b23c81885c4b5211f4 + # I'm going to link to this for now even though it's not straight from microsoft + # because it's a developer tool rather than a runtime, and + # I'm in the middle of trying to get lots of open source windows + # apps to build on Wine; see http://wiki.winehq.org/UnitTestSuites + # (Plus the sha1sum, which I still have from a copy straight from microsoft, + # protects us somewhat against corrupted copies.) + download . http://npg.dl.ac.uk/MIDAS/MIDAS_Release/VCToolkitSetup.exe 956c81c3106b97042c4126b23c81885c4b5211f4 + cd "$WINETRICKS_CACHE" + try $WINE VCToolkitSetup.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_vc2005express() +{ + # Currently broken in wine, see http://bugs.winehq.org/show_bug.cgi?id=21010 + # 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" + cd "$WINETRICKS_CACHE"/vc2005express + try $WINE vcsetup.exe + # The interactive installer seems to be asynchronous, so wait until one of the last files is created + while test ! -f "$programfilesdir_unix/Microsoft Visual Studio 8/Common7/Tools/vsvars32.bat" + do + echo "Waiting for install to finish..." + sleep 10 + done + fi + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_vc2005expresssp1() +{ + warn "$PACKAGE does not work yet" + if test ! -f "$programfilesdir_unix/Microsoft Visual Studio 8/Common7/Tools/vsvars32.bat" + then + die "install vc2005express first (this verb will be merged into that once it's debugged)" + fi + + # http://www.microsoft.com/downloads/details.aspx?FamilyId=7B0B0339-613A-46E6-AB4D-080D4D4A8C4E + download vc2005express download.microsoft.com/download/7/7/3/7737290f-98e8-45bf-9075-85cc6ae34bf1/VS80sp1-KB926748-X86-INTL.exe 8b9a0172efad64774aa122f29e093ad2043b308d + try $WINE "$WINETRICKS_CACHE"/vc2005express/VS80sp1-KB926748-X86-INTL.exe +} + +load_vcdmount() +{ + if test "$WINE" != "" + then + return + fi + + # Call only on real Windows. + # Sets VCD_DIR and ISO_MOUNT_ROOT + + # The only free mount tool I know for Windows Vista is Virtual CloneDrive, + # which can be downloaded at + # http://www.slysoft.com/en/virtual-clonedrive.html + # FIXME: actually install it here + + # Locate vcdmount.exe. + VCD_DIR="Elaborate Bytes/VirtualCloneDrive" + if test ! -x "$programfilesdir_unix/$VCD_DIR/vcdmount.exe" && test ! -x "$programfilesdir_x86_unix/$VCD_DIR/vcdmount.exe" + then + warn "Installing Virtual CloneDrive" + download . http://static.slysoft.com/SetupVirtualCloneDrive.exe + # have to use cmd else vista won't let cygwin run .exe's? + chmod +x "$WINETRICKS_CACHE"/SetupVirtualCloneDrive.exe + cd "$WINETRICKS_CACHE" + cmd /c SetupVirtualCloneDrive.exe + cd "$olddir" + fi + if test -x "$programfilesdir_unix/$VCD_DIR/vcdmount.exe" + then + VCD_DIR="$programfilesdir_unix/$VCD_DIR" + elif test -x "$programfilesdir_x86_unix/$VCD_DIR/vcdmount.exe" + then + VCD_DIR="$programfilesdir_x86_unix/$VCD_DIR" + else + die "can't find Virtual CloneDrive?" + fi + + # FIXME: Use WMI to locate the drive named + # "ELBY CLONEDRIVE..." using WMI as described in + # http://delphihaven.wordpress.com/2009/07/05/using-wmi-to-get-a-drive-friendly-name/ + # For now, you just have to hardcode it for your system :-( + warn "You probably need to edit the script to tell it which drive VirtualCloneDrive picked" + for letter in e f g h + do + ISO_MOUNT_ROOT=/cygdrive/$letter + test -d $ISO_MOUNT_ROOT || break + done + test -d $ISO_MOUNT_ROOT && die "cannot find the VirtualCloneDrive" +} + +iso_mount() +{ + my_img="$1" + + if test "$WINE" = "" + then + load_vcdmount + my_img_win="`$XXXPATH -w $my_img | tr '\012' ' ' | sed 's/ $//'`" + cd "$VCD_DIR" + try vcdmount.exe /l=$letter "$my_img_win" + cd "$olddir" + while ! test -d "$ISO_MOUNT_ROOT" + do + echo "Waiting for mount to finish" + sleep 1 + done + else + # Linux + case "$GUI-$DE" in + 1-gnome) + try gksudo "mkdir -p $ISO_MOUNT_ROOT" + try gksudo "mount -o ro,loop $my_img $ISO_MOUNT_ROOT" + ;; + *) + try sudo mkdir -p $ISO_MOUNT_ROOT + try sudo mount -o ro,loop "$my_img" $ISO_MOUNT_ROOT + ;; + esac + fi +} + +iso_umount() +{ + if test "$WINE" = "" + then + # Windows + load_vcdmount + cd "$VCD_DIR" + vcdmount /u + cd "$olddir" + else + case "$GUI-$DE" in + 1-gnome) + gksudo "umount $ISO_MOUNT_ROOT" + try gksudo "rm -rf $ISO_MOUNT_ROOT" + ;; + *) + sudo umount $ISO_MOUNT_ROOT + try sudo rm -rf $ISO_MOUNT_ROOT + ;; + esac + fi +} + +#---------------------------------------------------------------- + +load_vc2005trial() +{ + load_vcrun6 + load_dotnet20 + load_msxml6 + load_vcdmount + + warn "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 f66ae07618d67e693ca0524d3582208c20e07823 + + iso_umount + iso_mount "$WINETRICKS_CACHE"/vc2005trial/En_vs_2005_vsts_180_Trial.img + + # FIXME: do this right + rm -f /cygdrive/c/Users/$USER/AppData/local/temp/dd_vsinstall80.txt + + 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 cd "$ISO_MOUNT_ROOT/vs/Setup" + try $WINE setup.exe + + # FIXME: unify these and make the windows one right + if test "$WINE" = "" + then + while ! tr -d '\000' < "$TEMP"/dd_vsinstall80.txt | grep End_Session + do + sleep 10 + echo waiting for setup to finish + done + else + while ps $psargs | grep -q setup.exe + do + sleep 10 + echo waiting for setup to finish + done + fi + cd "$olddir" + fi + + iso_umount +} + +#---------------------------------------------------------------- + +load_vc2005sp1() +{ + if test ! -f "$programfilesdir_unix/Microsoft Visual Studio 8/Common7/Tools/vsvars32.bat" + then + die "install vc2005trial first (this verb will be merged into that once it's debugged)" + fi + + # http://www.microsoft.com/downloads/details.aspx?FamilyID=bb4a75ab-e2d4-4c96-b39d-37baf6b5b1dc + download vc2005sp1 http://download.microsoft.com/download/6/3/c/63c69e5d-74c9-48ea-b905-30ac3831f288/VS80sp1-KB926601-X86-ENU.exe d4b5c73253a7a4f5b4b389f41b94fea4a7247b57 + # http://www.microsoft.com/downloads/details.aspx?FamilyID=7c8729dc-06a2-4538-a90d-ff9464dc0197 + download vc2005sp1 http://download.microsoft.com/download/D/2/3/D23F9F62-3DEE-4EC0-B3B9-D64E9F573D1F/VS80sp1-KB971090-X86-INTL.exe + cd "$WINETRICKS_CACHE"/vc2005sp1 + try $WINE VS80sp1-KB926601-X86-ENU.exe + try $WINE VS80sp1-KB971090-X86-INTL.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +load_one_hotfix() +{ + kb=$1 + downloadid=$2 + downloadfile=$3 + hotfix=$4 + + cd "$WINETRICKS_CACHE/vs2005hotfixes" + if test ! -f $downloadfile + then + case "$OS" in + "Windows_NT") + $WINE cygstart "https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=$downloadid" ;; + *) # fails for chrome, see http://crbug.com/32800 + xdg-open "https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=$downloadid" ;; + esac + fi + while test ! -f $downloadfile + do + echo "Waiting for you to save $downloadfile in $WINETRICKS_CACHE_WIN/vs2005hotfixes" + sleep 1 + done + if test ! -f $hotfix + then + unzip -o $downloadfile + fi + try $WINE $hotfix + cd "$olddir" +} + +load_vc2005hotfix() +{ + # Loads the hotfixes recommended in http://dev.chromium.org/developers/how-tos/build-instructions-windows#TOC-Additional-free-downloads + warn "This does not work in Wine yet." + if test ! -f "$programfilesdir_unix/Microsoft Visual Studio 8/Common7/Tools/vsvars32.bat" + then + die "install vc2005trial and vc2005sp1 first" + fi + + mkdir -p "$WINETRICKS_CACHE/vs2005hotfixes" + case "$OS" in + "Windows_NT") $WINE cygstart "$WINETRICKS_CACHE_WIN\\vs2005hotfixes" ;; + *) xdg-open "$WINETRICKS_CACHE/vs2005hotfixes" ;; + esac + + load_one_hotfix KB935225 7258 306439_ENU_i386_zip.exe VS80sp1-KB935225-X86-ENU.exe + load_one_hotfix KB947315 11587 341798_ENU_i386_zip.exe VS80sp1-KB947315-X86-ENU.exe + load_one_hotfix KB949009 18623 VS80sp1-KB949009-X86-INTL.exe VS80sp1-KB949009-X86-INTL.exe + load_one_hotfix KB946310 10644 335739_ENU_i386_zip.exe VS80sp1-KB946310-X86-ENU.exe + # KB971090 is part of the sp1 verb, since it can be downloaded normally +} + +#---------------------------------------------------------------- + +save_vc2005_tarball() +{ + # Save just the interesting parts of Visual Studio 2005 (edit to taste). + # Workaround for vc 2005 sp1 and hotfixes not installing on Wine. + # In Windows, do "winetricks vc2005trial vc2005sp1 vc2005hotfix vc2005save", + # then reboot to Linux, grab vc8.tgz from the Windows partition, + # and do "winetricks vc2005trial vc2005load". + tar -C "$programfilesdir_x86_unix" \ + --exclude "Crystal Reports" \ + --exclude "DIA SDK" \ + --exclude "EnterpriseFrameworks" \ + --exclude "Microsoft Visual Studio 2005 Team Suite - ENU" \ + --exclude "ReportViewer" \ + --exclude "SmartDevices" \ + --exclude "Team Tools" \ + --exclude "VB" \ + --exclude "ce" \ + --exclude "Visual Studio Tools for Office" \ + --exclude "Xml" \ + --exclude "sqlserver" \ + -czvf vc8.tgz "Microsoft Visual Studio 8" +} + +load_vc2005_tarball() +{ + tar -C "$programfilesdir_x86_unix" -xzvf vc8.tgz +} + +#---------------------------------------------------------------- + +load_vc2008trial() +{ + load_vcrun6 + load_dotnet20 + load_msxml6 + load_vcdmount + + warn "Visual C++ 2008 Trial does not yet work in Wine, and this recipe isn't quite debugged even in windows yet." + warn "Downloading/checksumming Visual C++ 2008 Trial. This will take some time!" + # http://www.microsoft.com/downloads/details.aspx?FamilyID=83c3a1ec-ed72-4a79-8961-25635db0192b + download vc2008trial http://download.microsoft.com/download/8/1/d/81d3f35e-fa03-485b-953b-ff952e402520/VS2008ProEdition90dayTrialENUX1435622.iso dfb601096f62fd75af6ad62b277be79793f53b56 + + iso_umount + iso_mount "$WINETRICKS_CACHE"/vc2008trial/VS2008ProEdition90dayTrialENUX1435622.iso + + # FIXME: do this right + rm -f /cygdrive/c/Users/$USER/AppData/local/temp/dd_vsinstall80.txt + + if true + then + try cd "$ISO_MOUNT_ROOT/Setup" + try $WINE setup.exe + + # FIXME: unify these and make the windows one right + if test "$WINE" = "" + then + while ! tr -d '\000' < /cygdrive/c/Users/$USER/AppData/local/temp/dd_vsinstall80.txt | grep End_Session + do + sleep 10 + echo waiting for setup to finish + done + else + while ps $psargs | grep -q setup.exe + do + sleep 10 + echo waiting for setup to finish + done + fi + cd "$olddir" + fi + + iso_umount +} + +#---------------------------------------------------------------- + +load_vc2008sp1() +{ + echo pfdu is ${programfilesdir_unix} + echo setting FOO + FOO="${programfilesdir_unix}/Microsoft Visual Studio 9.0/Microsoft Visual Studio 2008 Professional Edition - ENU" + echo FOO set to $FOO + if test ! -d "$FOO" + then + die "install vc2008trial first (this verb will be merged into that once it's debugged)" + fi + + # http://www.microsoft.com/downloads/details.aspx?familyid=FBEE1648-7106-44A7-9649-6D9F6D58056E + download vc2008sp1 http://download.microsoft.com/download/f/6/7/f67fdf05-0586-413f-8231-affbe12f80a8/VS90sp1-KB945140-ENU.exe 91c146dffa96c6d8f9ceb2b5235b04349cf93ed9 + cd "$WINETRICKS_CACHE"/vc2008sp1 + try $WINE VS90sp1-KB945140-ENU.exe + cd "$olddir" +} + +#---------------------------------------------------------------- + +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_regedit /D "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdr4_2K" + try_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 + try $WINE "$WINETRICKS_CACHE"/MP10Setup.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 + 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_regedit /D "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Cdr4_2K" + try_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 + +case "$OS" in + "Windows_NT") + ;; + *) + # 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" + + if [ ! -x "`which "$WINE"`" ] + then + die "Cannot find wine ($WINE)" + fi + + # Create wineprefix if not already there + test -d "$WINEPREFIX" || WINEDLLOVERRIDES=mshtml= $WINE cmd /c echo yes > /dev/null 2>&1 + ;; +esac + +mkdir -p "$WINETRICKS_TMP" + +case $GUI in +1) dogui ; set $todo ;; +esac + +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; WINEDLLOVERRIDES=mshtml= $WINE cmd.exe /c echo "%ProgramFiles%" | tr -d '\015'`" +test x"$programfilesdir_win" != x || die "$WINE cmd.exe /c echo '%ProgramFiles%' returned empty string" +programfilesdir_unix="`unset WINEDEBUG; $XXXPATH -u "$programfilesdir_win" | tr -d '\015' `" +test x"$programfilesdir_unix" != x || die "winepath -u $programfilesdir_win returned empty string" +winetricks_tmp_win="`$XXXPATH -w "$WINETRICKS_TMP"`" + +# 64 bit windows has a second directory for program files +programfilesdir_x86_win="${programfilesdir_win} (x86)" +programfilesdir_x86_unix="${programfilesdir_unix} (x86)" +if ! test -d "$programfilesdir_x86_unix" +then + programfilesdir_x86_win="${programfilesdir_win}" + programfilesdir_x86_unix="${programfilesdir_unix}" +fi + +# (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|art2k7min) load_art2kmin;; + atmlib) load_atmlib;; + autohotkey|ahk) load_autohotkey;; + cmake) load_cmake;; + comctl32.ocx) load_comctl32ocx;; + comctl32|cc580) load_cc580;; + colorprofile) load_colorprofile;; + controlpad|fm20) load_controlpad;; + corefonts) load_corefonts;; + cygwin) load_cygwin;; + d3dx9) load_d3dx9;; + d3dx10) load_d3dx10;; + dcom98) load_dcom98;; + dinput8) load_dinput8;; + dirac|dirac0.8) load_dirac08;; + directplay|dxplay|dplay) load_directplay;; + directx9) DIRECTX_WINDOWS=win2k ; load_directx9;; + directx9-beta) DIRECTX_WINDOWS=winxp ; load_directx9;; + divx) load_divx;; + dotnet1|dotnet11) load_dotnet11; load_fontfix;; + dotnet11sdk) load_dotnet11sdk;; + dotnet2|dotnet20) load_dotnet20;; + dotnet20sdk) load_dotnet20sdk;; + dotnet20sp2) load_dotnet20sp2; load_fontfix;; + dotnet3|dotnet30) load_dotnet30; load_fontfix;; + dotnet35) load_dotnet35; load_fontfix;; + droid) load_droid;; + ffdshow) load_ffdshow;; + firefox|firefox3) load_firefox;; + flash) load_flash;; + fontfix) load_fontfix;; + fontsmooth-bgr|fs-bgr) load_fs_bgr;; + 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;; + gdiplus) load_gdiplus;; + gecko) load_gecko;; + gecko-dbg|geckodbg|gecko_dbg|geckodebug|gecko_debug|gecko-debug) load_gecko_dbg;; + glsl-disable) load_glsl_disable;; + glsl-enable) load_glsl_enable;; + hosts) load_hosts;; + icodecs) load_icodecs;; + ie6) load_ie6;; + ie7) load_ie7;; + jet40) load_jet40;; + kde) load_kde;; + liberation) load_liberation;; + mdac25) load_mdac25;; + mdac27) load_mdac27;; + mdac28) load_mdac28;; + mfc40) load_mfc40;; + mingw|mingw-min|mingw_min) load_mingw_min;; + mingw-gdb|mingw_gdb) load_mingw_gdb;; + mono19|mono20) load_mono20;; + mono22) load_mono22;; + mono24) load_mono24;; + mozillabuild) load_mozillabuild;; + mpc) load_mpc;; + msi2) load_msi2;; + mshflxgd) load_mshflxgd;; + msls31) load_msls31;; + msmask) load_msmask;; + mspaint|paint) load_mspaint;; + 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;; + physx) load_physx;; + psdk2003) load_psdk2003;; + psdkvista) load_psdkvista;; + psdkwin7) load_psdkwin7;; + python|python26) load_python26;; + python-comtypes|pythoncom|python-com|pythoncomtypes) load_python_comtypes;; + quicktime72) load_quicktime72;; + riched20) load_riched20;; + riched30) load_riched30;; + richtx32) load_richtx32;; + shockwave) load_shockwave;; + tahoma) load_tahoma;; + urlmon) load_urlmon;; + usp10) load_usp10;; + vbrun200|vb2run) load_vb2run;; + vbrun300|vb3run) load_vb3run;; + vbrun400|vb4run) load_vb4run;; + vbrun500|vbvm50|vb5run) load_vbvm50;; + vbrun600|vbrun60|vb6run) load_vbrun60;; + vc2003toolkit) load_vc2003toolkit;; + vc2005express) load_vc2005express;; + vc2005expresssp1) load_vc2005expresssp1;; + vc2005hotfix) load_vc2005hotfix;; + vc2005load) load_vc2005_tarball;; + vc2005save) save_vc2005_tarball;; + vc2005sp1) load_vc2005sp1;; + vc2008sp1) load_vc2008sp1;; + vc2005trial) load_vc2005trial;; + vc2008trial) load_vc2008trial;; + vcrun600|vcrun60|vcrun6|mfc42) load_vcrun6;; + vcrun60sp6|vcrun6sp6) load_vcrun6sp6;; + vcrun2003) load_vcrun2003;; + vcrun2005|vcrun2005sp1) load_vcrun2005;; + vcrun2008|vcrun2008sp1) load_vcrun2008;; + vjrun20) load_vjrun20;; + vlc) load_vlc;; + wenquanyi) load_wenquanyi;; + wininet) load_wininet;; + wme9) load_wme9;; + wmp9) load_wmp9;; + wmp10) load_wmp10;; + wsh56) load_wsh56;; + wsh56js) load_wsh56js;; + wsh56vb) load_wsh56vb;; + xact|xactengine|x3daudio) load_xact;; + xvid) load_xvid;; + + allcodecs|allvcodecs) load_vcrun6; load_ffdshow; load_xvid; load_icodecs;; + allfonts) load_corefonts; load_tahoma; load_liberation; load_droid; load_wenquanyi;; + ddr=gdi) set_ddr gdi;; + ddr=opengl) set_ddr opengl;; + fakeie6) set_fakeie6;; + heapcheck) set_heapcheck;; + multisampling=enabled|multisampling=on) set_multisampling enabled;; + multisampling=disabled|multisampling=off) set_multisampling disabled;; + native_mdac) set_native_mdac;; + native_oleaut32) override_dlls native,builtin oleaut32;; + nocrashdialog) disable_crashdialog;; + orm=backbuffer|backbuffer) set_orm backbuffer;; + orm=fbo|fbo) set_orm fbo;; + orm=pbuffer|pbuffer) set_orm pbuffer;; + rtlm=auto) set_rtlm auto;; + rtlm=disabled) set_rtlm disabled;; + rtlm=readdraw) set_rtlm readdraw;; + rtlm=readtex) set_rtlm readtex;; + rtlm=texdraw) set_rtlm texdraw;; + rtlm=textex) set_rtlm textex;; + sandbox) sandbox;; + sound=alsa|alsa) set_sound_driver alsa;; + sound=audioio|audioio) set_sound_driver audioio;; + sound=coreaudio|coreaudio) set_sound_driver coreaudio;; + sound=esound|esound) set_sound_driver esound;; + sound=jack|jack) set_sound_driver jack;; + sound=nas|nas) set_sound_driver nas;; + sound=oss|oss) set_sound_driver oss;; + sound=disabled|sound=) set_sound_driver "";; + version) print_version;; + volnum) volnum;; + winver=nt40|nt40) set_winver nt40;; + winver=win98|win98) set_winver win98;; + winver=win2k|win2k) set_winver win2k;; + winver=winxp|winxp) set_winver winxp;; + winver=vista|vista) set_winver vista;; + winver=) unset_winver;; + *) 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 + + # remove the temp directory + rm -rf "$WINETRICKS_TMP" + +test "$WINETRICKS_QUIET" = "" && echo winetricks done. || true |