Commit 070cb78f authored by Vitaly Lipatov's avatar Vitaly Lipatov

just import winetricks-20201206.tar with rpmgs script

parent a65f09c0
enable=require-variable-braces
...@@ -2,6 +2,9 @@ language: shell ...@@ -2,6 +2,9 @@ language: shell
os: os:
- linux - linux
- osx - osx
arch:
- amd64
- ppc64le
sudo: required sudo: required
dist: bionic dist: bionic
...@@ -22,7 +25,7 @@ addons: ...@@ -22,7 +25,7 @@ addons:
- devscripts - devscripts
# Ubuntu notes: # Ubuntu notes:
# * ShellCheck is already installed in TravisCI # * ShellCheck is already installed in TravisCI (but not on ppc64le, see below)
# * bashate is not available on Trusty and we need to install it manually # * bashate is not available on Trusty and we need to install it manually
# macOS note: # macOS note:
# * Homebrew doesn't provide bashate, they don't package things # * Homebrew doesn't provide bashate, they don't package things
...@@ -67,6 +70,14 @@ before_install: ...@@ -67,6 +70,14 @@ before_install:
fi fi
done done
fi fi
# Install shellcheck for power job
- |
if [[ "$TRAVIS_CPU_ARCH" == "ppc64le" ]]; then
time sudo apt update;
time sudo apt install -y shellcheck;
fi
# Note if testing on a branch, you can replace this with your desired command, e.g.,: # Note if testing on a branch, you can replace this with your desired command, e.g.,:
# script: time sh ./src/winetricks -q comctl32 # script: time sh ./src/winetricks -q comctl32
......
...@@ -16,7 +16,7 @@ https://github.com/Winetricks/winetricks/releases ...@@ -16,7 +16,7 @@ https://github.com/Winetricks/winetricks/releases
# Installing # Installing
The ```winetricks``` package should be used if it is available and up to date. The package is available in most mainstream (Unix-like) Operating Systems: The ```winetricks``` package should be used if it is available and up to date. The package is available in most mainstream (Unix-like) Operating Systems:
* Arch: https://www.archlinux.org/packages/community/any/winetricks/ * Arch: https://www.archlinux.org/packages/multilib/x86_64/winetricks/
* Debian: https://packages.debian.org/sid/winetricks * Debian: https://packages.debian.org/sid/winetricks
* Fedora: https://fedoraproject.org/wiki/Wine#Packages * Fedora: https://fedoraproject.org/wiki/Wine#Packages
* FreeBSD: https://www.freebsd.org/cgi/ports.cgi?query=winetricks&stype=all * FreeBSD: https://www.freebsd.org/cgi/ports.cgi?query=winetricks&stype=all
...@@ -42,9 +42,10 @@ Then, for Ubuntu, use a shell script to download the current winetricks script(s ...@@ -42,9 +42,10 @@ Then, for Ubuntu, use a shell script to download the current winetricks script(s
E.g.: E.g.:
``` ```
#!/bin/sh
# Create and switch to a temporary directory writeable by current user. See: # Create and switch to a temporary directory writeable by current user. See:
# https://www.tldp.org/LDP/abs/html/subshells.html # https://www.tldp.org/LDP/abs/html/subshells.html
cd "$(mktemp -d)" cd "$(mktemp -d)" || exit 1
# Use a BASH "here document" to create an updater shell script file. # Use a BASH "here document" to create an updater shell script file.
# See: # See:
...@@ -58,7 +59,7 @@ cat > update_winetricks <<_EOF_SCRIPT ...@@ -58,7 +59,7 @@ cat > update_winetricks <<_EOF_SCRIPT
# Create and switch to a temporary directory writeable by current user. See: # Create and switch to a temporary directory writeable by current user. See:
# https://www.tldp.org/LDP/abs/html/subshells.html # https://www.tldp.org/LDP/abs/html/subshells.html
cd "$(mktemp -d)" cd "\$(mktemp -d)"
# Download the latest winetricks script (master="latest version") from Github. # Download the latest winetricks script (master="latest version") from Github.
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
...@@ -77,7 +78,7 @@ wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetric ...@@ -77,7 +78,7 @@ wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetric
# Move the winetricks BASH completion script to a standard location for BASH completion modules. See: # Move the winetricks BASH completion script to a standard location for BASH completion modules. See:
# https://www.tldp.org/LDP/abs/html/tabexpansion.html # https://www.tldp.org/LDP/abs/html/tabexpansion.html
sudo mv winetricks.bash-completion /usr/share/bash-completion/completions/winetricks sudo mv winetricks.bash-completion /usr/share/bash-completion/completions/winetricks
_EOF_SCRIPT _EOF_SCRIPT
###### create update_winetricks FINISH ######## ###### create update_winetricks FINISH ########
# Mark the update_winetricks script (we've just written out) as executable. See: # Mark the update_winetricks script (we've just written out) as executable. See:
...@@ -104,7 +105,7 @@ cd "$(mktemp -d)" ...@@ -104,7 +105,7 @@ cd "$(mktemp -d)"
cat > update_winetricks <<_EOF_SCRIPT cat > update_winetricks <<_EOF_SCRIPT
#!/bin/sh #!/bin/sh
cd "$(mktemp -d)" cd "\$(mktemp -d)"
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks.bash-completion wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks.bash-completion
chmod +x winetricks chmod +x winetricks
...@@ -147,7 +148,7 @@ Description=Run winetricks update script ...@@ -147,7 +148,7 @@ Description=Run winetricks update script
After=network.target After=network.target
[Service] [Service]
ExecStart=/usr/bin/update_winetricks ExecStart=/bin/sh /usr/bin/update_winetricks
Type=oneshot Type=oneshot
_EOF_SERVICE_UNIT _EOF_SERVICE_UNIT
......
===== apps ===== ===== apps =====
3m_library 3M Cloud Library (3M Company, 2015) [downloadable] 3m_library 3M Cloud Library (3M Company, 2015) [downloadable]
7zip 7-Zip 19.00 (Igor Pavlov, 2019) [downloadable] 7zip 7-Zip 19.00 (Igor Pavlov, 2019) [downloadable]
abiword AbiWord 2.8.6 (AbiSource, 2010) [downloadable]
adobe_diged4 Adobe Digital Editions 4.5 (Adobe, 2015) [downloadable] adobe_diged4 Adobe Digital Editions 4.5 (Adobe, 2015) [downloadable]
adobe_diged Adobe Digital Editions 1.7 (Adobe, 2011) [downloadable] adobe_diged Adobe Digital Editions 1.7 (Adobe, 2011) [downloadable]
autohotkey AutoHotKey (autohotkey.org, 2010) [downloadable] autohotkey AutoHotKey (autohotkey.org, 2010) [downloadable]
...@@ -44,7 +43,7 @@ psdk2003 MS Platform SDK 2003 (Microsoft, 2003) [downloadable] ...@@ -44,7 +43,7 @@ psdk2003 MS Platform SDK 2003 (Microsoft, 2003) [downloadable]
psdkwin71 MS Windows 7.1 SDK (Microsoft, 2010) [downloadable] psdkwin71 MS Windows 7.1 SDK (Microsoft, 2010) [downloadable]
psdkwin7 MS Windows 7 SDK (Microsoft, 2009) [downloadable] psdkwin7 MS Windows 7 SDK (Microsoft, 2009) [downloadable]
qqintl QQ International Instant Messenger 2.11 (Tencent, 2014) [downloadable] qqintl QQ International Instant Messenger 2.11 (Tencent, 2014) [downloadable]
qq QQ 8.9.1(Chinese chat app) (Tencent, 2017) [downloadable] qq QQ 8.9.6(Chinese chat app) (Tencent, 2017) [downloadable]
safari Safari (Apple, 2010) [downloadable] safari Safari (Apple, 2010) [downloadable]
sketchup SketchUp 8 (Google, 2012) [downloadable] sketchup SketchUp 8 (Google, 2012) [downloadable]
steam Steam (Valve, 2010) [downloadable] steam Steam (Valve, 2010) [downloadable]
...@@ -57,7 +56,9 @@ vc2005trial MS Visual C++ 2005 Trial (Microsoft, 2005) [downloadabl ...@@ -57,7 +56,9 @@ vc2005trial MS Visual C++ 2005 Trial (Microsoft, 2005) [downloadabl
vc2008express MS Visual C++ 2008 Express (Microsoft, 2008) [downloadable] vc2008express MS Visual C++ 2008 Express (Microsoft, 2008) [downloadable]
vc2010express MS Visual C++ 2010 Express (Microsoft, 2010) [downloadable] vc2010express MS Visual C++ 2010 Express (Microsoft, 2010) [downloadable]
vlc VLC media player 2.2.1 (VideoLAN, 2015) [downloadable] vlc VLC media player 2.2.1 (VideoLAN, 2015) [downloadable]
vulkansdk Vulkan SDK 1.1.73.0 (developers only) (LunarG, 2018) [downloadable] vstools2019 MS Visual Studio Build Tools 2019 (Microsoft, 2019) [downloadable]
vulkansdk121412 Vulkan SDK 1.2.141.2 (developers only) (LunarG, 2020) [downloadable]
vulkansdk Vulkan SDK (latest) (developers only) (LunarG, 2018) [downloadable]
winamp Winamp (Radionomy (AOL (Nullsoft)), 2013) [downloadable] winamp Winamp (Radionomy (AOL (Nullsoft)), 2013) [downloadable]
wme9 MS Windows Media Encoder 9 (broken in Wine) (Microsoft, 2002) [downloadable] wme9 MS Windows Media Encoder 9 (broken in Wine) (Microsoft, 2002) [downloadable]
===== benchmarks ===== ===== benchmarks =====
...@@ -80,7 +81,7 @@ binkw32 RAD Game Tools binkw32.dll (RAD Game Tools, Inc., 2000) ...@@ -80,7 +81,7 @@ binkw32 RAD Game Tools binkw32.dll (RAD Game Tools, Inc., 2000)
cabinet Microsoft cabinet.dll (Microsoft, 2002) [downloadable] cabinet Microsoft cabinet.dll (Microsoft, 2002) [downloadable]
cinepak Cinepak Codec (Radius, 1995) [downloadable] cinepak Cinepak Codec (Radius, 1995) [downloadable]
cmd MS cmd.exe (Microsoft, 2004) [downloadable] cmd MS cmd.exe (Microsoft, 2004) [downloadable]
cnc_ddraw Reimplentation of ddraw for CnC games (CnCNet, 2018) [downloadable] cnc_ddraw Reimplentation of ddraw for CnC games (CnCNet, 2020) [downloadable]
comctl32ocx MS comctl32.ocx and mscomctl.ocx, comctl32 wrappers for VB6 (Microsoft, 2012) [downloadable] comctl32ocx MS comctl32.ocx and mscomctl.ocx, comctl32 wrappers for VB6 (Microsoft, 2012) [downloadable]
comctl32 MS common controls 5.80 (Microsoft, 2001) [downloadable] comctl32 MS common controls 5.80 (Microsoft, 2001) [downloadable]
comdlg32ocx Common Dialog ActiveX Control for VB6 (Microsoft, 2012) [downloadable] comdlg32ocx Common Dialog ActiveX Control for VB6 (Microsoft, 2012) [downloadable]
...@@ -163,6 +164,7 @@ dotnet46 MS .NET 4.6 (Microsoft, 2015) [downloadable] ...@@ -163,6 +164,7 @@ dotnet46 MS .NET 4.6 (Microsoft, 2015) [downloadable]
dotnet471 MS .NET 4.7.1 (Microsoft, 2017) [downloadable] dotnet471 MS .NET 4.7.1 (Microsoft, 2017) [downloadable]
dotnet472 MS .NET 4.7.2 (Microsoft, 2018) [downloadable] dotnet472 MS .NET 4.7.2 (Microsoft, 2018) [downloadable]
dotnet48 MS .NET 4.8 (Microsoft, 2019) [downloadable] dotnet48 MS .NET 4.8 (Microsoft, 2019) [downloadable]
dotnetcore2 MS .NET Core Runtime 2.1 LTS (Microsoft, 2020) [downloadable]
dotnet_verifier MS .NET Verifier (Microsoft, 2016) [downloadable] dotnet_verifier MS .NET Verifier (Microsoft, 2016) [downloadable]
dpvoice Microsoft dpvoice dpvvox dpvacm Audio dlls (Microsoft, 2002) [downloadable] dpvoice Microsoft dpvoice dpvvox dpvacm Audio dlls (Microsoft, 2002) [downloadable]
dsdmo MS dsdmo.dll (Microsoft, 2010) [downloadable] dsdmo MS dsdmo.dll (Microsoft, 2010) [downloadable]
...@@ -220,6 +222,11 @@ dxvk153 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux ...@@ -220,6 +222,11 @@ dxvk153 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux
dxvk154 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.4) (Philip Rebohle, 2017) [downloadable] dxvk154 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.4) (Philip Rebohle, 2017) [downloadable]
dxvk155 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.5) (Philip Rebohle, 2017) [downloadable] dxvk155 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.5) (Philip Rebohle, 2017) [downloadable]
dxvk160 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6) (Philip Rebohle, 2017) [downloadable] dxvk160 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6) (Philip Rebohle, 2017) [downloadable]
dxvk161 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6.1) (Philip Rebohle, 2017) [downloadable]
dxvk170 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7) (Philip Rebohle, 2017) [downloadable]
dxvk171 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.1) (Philip Rebohle, 2017) [downloadable]
dxvk172 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.2) (Philip Rebohle, 2017) [downloadable]
dxvk173 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.3) (Philip Rebohle, 2017) [downloadable]
dxvk_master Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (master) (Philip Rebohle, 2017) [downloadable] dxvk_master Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (master) (Philip Rebohle, 2017) [downloadable]
dxvk Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (latest) (Philip Rebohle, 2017) [downloadable] dxvk Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (latest) (Philip Rebohle, 2017) [downloadable]
esent MS Extensible Storage Engine (Microsoft, 2011) [downloadable] esent MS Extensible Storage Engine (Microsoft, 2011) [downloadable]
...@@ -233,11 +240,13 @@ faudio1906 FAudio (xaudio reimplementation, with xna support) buil ...@@ -233,11 +240,13 @@ faudio1906 FAudio (xaudio reimplementation, with xna support) buil
faudio FAudio (xaudio reimplementation, with xna support) builds for win32 (latest) (Kron4ek, 2019) [downloadable] faudio FAudio (xaudio reimplementation, with xna support) builds for win32 (latest) (Kron4ek, 2019) [downloadable]
ffdshow ffdshow video codecs (doom9 folks, 2010) [downloadable] ffdshow ffdshow video codecs (doom9 folks, 2010) [downloadable]
filever Microsoft's filever, for dumping file version info (Microsoft, 20??) [downloadable] filever Microsoft's filever, for dumping file version info (Microsoft, 20??) [downloadable]
flash Flash Player 29 (Adobe, 2018) [downloadable] flash Flash Player 32 (Adobe, 2020) [downloadable]
galliumnine02 Gallium Nine Standalone (v0.2) (Gallium Nine Team, 2019) [downloadable] galliumnine02 Gallium Nine Standalone (v0.2) (Gallium Nine Team, 2019) [downloadable]
galliumnine03 Gallium Nine Standalone (v0.3) (Gallium Nine Team, 2019) [downloadable] galliumnine03 Gallium Nine Standalone (v0.3) (Gallium Nine Team, 2019) [downloadable]
galliumnine04 Gallium Nine Standalone (v0.4) (Gallium Nine Team, 2019) [downloadable] galliumnine04 Gallium Nine Standalone (v0.4) (Gallium Nine Team, 2019) [downloadable]
galliumnine05 Gallium Nine Standalone (v0.5) (Gallium Nine Team, 2019) [downloadable] galliumnine05 Gallium Nine Standalone (v0.5) (Gallium Nine Team, 2019) [downloadable]
galliumnine06 Gallium Nine Standalone (v0.6) (Gallium Nine Team, 2020) [downloadable]
galliumnine07 Gallium Nine Standalone (v0.7) (Gallium Nine Team, 2020) [downloadable]
galliumnine Gallium Nine Standalone (latest) (Gallium Nine Team, 2019) [downloadable] galliumnine Gallium Nine Standalone (latest) (Gallium Nine Team, 2019) [downloadable]
gdiplus MS GDI+ (Microsoft, 2011) [downloadable] gdiplus MS GDI+ (Microsoft, 2011) [downloadable]
gdiplus_winxp MS GDI+ (Microsoft, 2009) gdiplus_winxp MS GDI+ (Microsoft, 2009)
...@@ -256,11 +265,20 @@ itircl MS itircl.dll (Microsoft, 1999) [downloadable] ...@@ -256,11 +265,20 @@ itircl MS itircl.dll (Microsoft, 1999) [downloadable]
itss MS itss.dll (Microsoft, 1999) [downloadable] itss MS itss.dll (Microsoft, 1999) [downloadable]
jet40 MS Jet 4.0 Service Pack 8 (Microsoft, 2003) [downloadable] jet40 MS Jet 4.0 Service Pack 8 (Microsoft, 2003) [downloadable]
l3codecx MPEG Layer-3 Audio Codec for Microsoft DirectShow (Microsoft, 2010) [downloadable] l3codecx MPEG Layer-3 Audio Codec for Microsoft DirectShow (Microsoft, 2010) [downloadable]
lavfilters702 LAV Filters 0.70.2 (Hendrik Leppkes, 2017) [downloadable]
lavfilters LAV Filters (Hendrik Leppkes, 2019) [downloadable]
mdac27 Microsoft Data Access Components 2.7 sp1 (Microsoft, 2006) [downloadable] mdac27 Microsoft Data Access Components 2.7 sp1 (Microsoft, 2006) [downloadable]
mdac28 Microsoft Data Access Components 2.8 sp1 (Microsoft, 2005) [downloadable] mdac28 Microsoft Data Access Components 2.8 sp1 (Microsoft, 2005) [downloadable]
mdx Managed DirectX (Microsoft, 2006) [downloadable] mdx Managed DirectX (Microsoft, 2006) [downloadable]
mfc100 Visual C++ 2010 mfc100 library; part of vcrun2010 (Microsoft, 2010) [downloadable]
mfc110 Visual C++ 2012 mfc110 library; part of vcrun2012 (Microsoft, 2012) [downloadable]
mfc120 Visual C++ 2013 mfc120 library; part of vcrun2013 (Microsoft, 2013) [downloadable]
mfc140 Visual C++ 2015 mfc140 library; part of vcrun2015 (Microsoft, 2015) [downloadable]
mfc40 MS mfc40 (Microsoft Foundation Classes from win7sp1) (Microsoft, 1999) [downloadable] mfc40 MS mfc40 (Microsoft Foundation Classes from win7sp1) (Microsoft, 1999) [downloadable]
mfc42 Visual C++ 6 SP4 mfc42 library; part of vcrun6 (Microsoft, 2000) [downloadable] mfc42 Visual C++ 6 SP4 mfc42 library; part of vcrun6 (Microsoft, 2000) [downloadable]
mfc71 Visual C++ 2003 mfc71 library; part of vcrun2003 (Microsoft, 2003) [downloadable]
mfc80 Visual C++ 2005 mfc80 library; part of vcrun2005 (Microsoft, 2011) [downloadable]
mfc90 Visual C++ 2008 mfc90 library; part of vcrun2008 (Microsoft, 2011) [downloadable]
mf MS Media Foundation (Microsoft, 2011) [downloadable] mf MS Media Foundation (Microsoft, 2011) [downloadable]
msacm32 MS ACM32 (Microsoft, 2003) [downloadable] msacm32 MS ACM32 (Microsoft, 2003) [downloadable]
msasn1 MS ASN1 (Microsoft, 2003) [downloadable] msasn1 MS ASN1 (Microsoft, 2003) [downloadable]
...@@ -294,6 +312,7 @@ qasf qasf.dll (Microsoft, 2011) [downloadable] ...@@ -294,6 +312,7 @@ qasf qasf.dll (Microsoft, 2011) [downloadable]
qcap qcap.dll (Microsoft, 2011) [downloadable] qcap qcap.dll (Microsoft, 2011) [downloadable]
qdvd qdvd.dll (Microsoft, 2011) [downloadable] qdvd qdvd.dll (Microsoft, 2011) [downloadable]
qedit qedit.dll (Microsoft, 2011) [downloadable] qedit qedit.dll (Microsoft, 2011) [downloadable]
quartz_feb2010 quartz.dll (February 2010) (Microsoft, 2010) [downloadable]
quartz quartz.dll (Microsoft, 2011) [downloadable] quartz quartz.dll (Microsoft, 2011) [downloadable]
quicktime72 Apple QuickTime 7.2 (Apple, 2010) [downloadable] quicktime72 Apple QuickTime 7.2 (Apple, 2010) [downloadable]
quicktime76 Apple QuickTime 7.6 (Apple, 2010) [downloadable] quicktime76 Apple QuickTime 7.6 (Apple, 2010) [downloadable]
...@@ -322,11 +341,12 @@ vcrun2012 Visual C++ 2012 libraries (atl110,mfc110,mfc110u,msvcp1 ...@@ -322,11 +341,12 @@ vcrun2012 Visual C++ 2012 libraries (atl110,mfc110,mfc110u,msvcp1
vcrun2013 Visual C++ 2013 libraries (mfc120,mfc120u,msvcp120,msvcr120,vcomp120) (Microsoft, 2013) [downloadable] vcrun2013 Visual C++ 2013 libraries (mfc120,mfc120u,msvcp120,msvcr120,vcomp120) (Microsoft, 2013) [downloadable]
vcrun2015 Visual C++ 2015 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2015) [downloadable] vcrun2015 Visual C++ 2015 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2015) [downloadable]
vcrun2017 Visual C++ 2017 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2017) [downloadable] vcrun2017 Visual C++ 2017 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2017) [downloadable]
vcrun2019 Visual C++ 2015-2019 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2019) [downloadable] vcrun2019 Visual C++ 2015-2019 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (and vcruntime140_1.dll on win64) (Microsoft, 2019) [downloadable]
vcrun6sp6 Visual C++ 6 SP6 libraries (with fixes in ATL and MFC) (Microsoft, 2004) [downloadable] vcrun6sp6 Visual C++ 6 SP6 libraries (with fixes in ATL and MFC) (Microsoft, 2004) [downloadable]
vcrun6 Visual C++ 6 SP4 libraries (mfc42, msvcp60, msvcirt) (Microsoft, 2000) [downloadable] vcrun6 Visual C++ 6 SP4 libraries (mfc42, msvcp60, msvcirt) (Microsoft, 2000) [downloadable]
vjrun20 MS Visual J# 2.0 SE libraries (requires dotnet20) (Microsoft, 2007) [downloadable] vjrun20 MS Visual J# 2.0 SE libraries (requires dotnet20) (Microsoft, 2007) [downloadable]
vulkanrt Vulkan Runtime 1.1.73.0 (LunarG, 2018) [downloadable] vulkanrt121412 Vulkan Runtime 1.2.141.2 (LunarG, 2020) [downloadable]
vulkanrt Vulkan Runtime (latest) (LunarG, 2020) [downloadable]
webio MS Windows Web I/O (Microsoft, 2011) [downloadable] webio MS Windows Web I/O (Microsoft, 2011) [downloadable]
windowscodecs MS Windows Imaging Component (Microsoft, 2006) [downloadable] windowscodecs MS Windows Imaging Component (Microsoft, 2006) [downloadable]
winhttp MS Windows HTTP Services (Microsoft, 2005) [downloadable] winhttp MS Windows HTTP Services (Microsoft, 2005) [downloadable]
...@@ -386,6 +406,7 @@ verdana MS Verdana fonts (Microsoft, 2008) [downloadable] ...@@ -386,6 +406,7 @@ verdana MS Verdana fonts (Microsoft, 2008) [downloadable]
vlgothic VLGothic Japanese fonts (Project Vine / Daisuke Suzuki, 2014) [downloadable] vlgothic VLGothic Japanese fonts (Project Vine / Daisuke Suzuki, 2014) [downloadable]
webdings MS Webdings fonts (Microsoft, 2008) [downloadable] webdings MS Webdings fonts (Microsoft, 2008) [downloadable]
wenquanyi WenQuanYi CJK font (wenq.org, 2009) [downloadable] wenquanyi WenQuanYi CJK font (wenq.org, 2009) [downloadable]
wenquanyizenhei WenQuanYi ZenHei font (wenq.org, 2009) [downloadable]
===== games ===== ===== games =====
acreedbro Assassin's Creed Brotherhood (Ubisoft, 2011) acreedbro Assassin's Creed Brotherhood (Ubisoft, 2011)
algodoo_demo Algodoo Demo (Algoryx, 2009) [downloadable] algodoo_demo Algodoo Demo (Algoryx, 2009) [downloadable]
...@@ -533,7 +554,8 @@ native_mdac Override odbc32, odbccp32 and oledb32 ...@@ -533,7 +554,8 @@ native_mdac Override odbc32, odbccp32 and oledb32
native_oleaut32 Override oleaut32 native_oleaut32 Override oleaut32
nocrashdialog Disable crash dialog nocrashdialog Disable crash dialog
npm=repack Set NonPower2Mode to repack npm=repack Set NonPower2Mode to repack
nt40 Set windows version to Windows NT 4.0 nt351 Set Windows version to Windows NT 3.51
nt40 Set Windows version to Windows NT 4.0
orm=backbuffer Set OffscreenRenderingMode=backbuffer orm=backbuffer Set OffscreenRenderingMode=backbuffer
orm=fbo Set OffscreenRenderingMode=fbo (default) orm=fbo Set OffscreenRenderingMode=fbo (default)
psm=0 Set MaxShaderModelPS to 0 psm=0 Set MaxShaderModelPS to 0
...@@ -573,10 +595,12 @@ vsm=1 Set MaxShaderModelVS to 1 ...@@ -573,10 +595,12 @@ vsm=1 Set MaxShaderModelVS to 1
vsm=2 Set MaxShaderModelVS to 2 vsm=2 Set MaxShaderModelVS to 2
vsm=3 Set MaxShaderModelVS to 3 vsm=3 Set MaxShaderModelVS to 3
win10 Set Windows version to Windows 10 win10 Set Windows version to Windows 10
win20 Set Windows version to Windows 2.0
win2k3 Set Windows version to Windows 2003 win2k3 Set Windows version to Windows 2003
win2k8r2 Set Windows version to Windows 2008 R2 win2k8r2 Set Windows version to Windows 2008 R2
win2k8 Set Windows version to Windows 2008 win2k8 Set Windows version to Windows 2008
win2k Set Windows version to Windows 2000 win2k Set Windows version to Windows 2000
win30 Set Windows version to Windows 3.0
win31 Set Windows version to Windows 3.1 win31 Set Windows version to Windows 3.1
win7 Set Windows version to Windows 7 win7 Set Windows version to Windows 7
win81 Set Windows version to Windows 8.1 win81 Set Windows version to Windows 8.1
...@@ -587,5 +611,6 @@ windowmanagerdecorated=n Prevent the window manager from decorating windows ...@@ -587,5 +611,6 @@ windowmanagerdecorated=n Prevent the window manager from decorating windows
windowmanagerdecorated=y Allow the window manager to decorate windows (default) windowmanagerdecorated=y Allow the window manager to decorate windows (default)
windowmanagermanaged=n Prevent the window manager from controlling windows windowmanagermanaged=n Prevent the window manager from controlling windows
windowmanagermanaged=y Allow the window manager to control windows (default) windowmanagermanaged=y Allow the window manager to control windows (default)
winme Set Windows version to Windows ME
winver= Set Windows version to default (win7) winver= Set Windows version to default (win7)
winxp Set Windows version to Windows XP winxp Set Windows version to Windows XP
3m_library 3M Cloud Library (3M Company, 2015) [downloadable] 3m_library 3M Cloud Library (3M Company, 2015) [downloadable]
7zip 7-Zip 19.00 (Igor Pavlov, 2019) [downloadable] 7zip 7-Zip 19.00 (Igor Pavlov, 2019) [downloadable]
abiword AbiWord 2.8.6 (AbiSource, 2010) [downloadable]
adobe_diged4 Adobe Digital Editions 4.5 (Adobe, 2015) [downloadable] adobe_diged4 Adobe Digital Editions 4.5 (Adobe, 2015) [downloadable]
adobe_diged Adobe Digital Editions 1.7 (Adobe, 2011) [downloadable] adobe_diged Adobe Digital Editions 1.7 (Adobe, 2011) [downloadable]
autohotkey AutoHotKey (autohotkey.org, 2010) [downloadable] autohotkey AutoHotKey (autohotkey.org, 2010) [downloadable]
...@@ -43,7 +42,7 @@ psdk2003 MS Platform SDK 2003 (Microsoft, 2003) [downloadable] ...@@ -43,7 +42,7 @@ psdk2003 MS Platform SDK 2003 (Microsoft, 2003) [downloadable]
psdkwin71 MS Windows 7.1 SDK (Microsoft, 2010) [downloadable] psdkwin71 MS Windows 7.1 SDK (Microsoft, 2010) [downloadable]
psdkwin7 MS Windows 7 SDK (Microsoft, 2009) [downloadable] psdkwin7 MS Windows 7 SDK (Microsoft, 2009) [downloadable]
qqintl QQ International Instant Messenger 2.11 (Tencent, 2014) [downloadable] qqintl QQ International Instant Messenger 2.11 (Tencent, 2014) [downloadable]
qq QQ 8.9.1(Chinese chat app) (Tencent, 2017) [downloadable] qq QQ 8.9.6(Chinese chat app) (Tencent, 2017) [downloadable]
safari Safari (Apple, 2010) [downloadable] safari Safari (Apple, 2010) [downloadable]
sketchup SketchUp 8 (Google, 2012) [downloadable] sketchup SketchUp 8 (Google, 2012) [downloadable]
steam Steam (Valve, 2010) [downloadable] steam Steam (Valve, 2010) [downloadable]
...@@ -56,6 +55,8 @@ vc2005trial MS Visual C++ 2005 Trial (Microsoft, 2005) [downloadabl ...@@ -56,6 +55,8 @@ vc2005trial MS Visual C++ 2005 Trial (Microsoft, 2005) [downloadabl
vc2008express MS Visual C++ 2008 Express (Microsoft, 2008) [downloadable] vc2008express MS Visual C++ 2008 Express (Microsoft, 2008) [downloadable]
vc2010express MS Visual C++ 2010 Express (Microsoft, 2010) [downloadable] vc2010express MS Visual C++ 2010 Express (Microsoft, 2010) [downloadable]
vlc VLC media player 2.2.1 (VideoLAN, 2015) [downloadable] vlc VLC media player 2.2.1 (VideoLAN, 2015) [downloadable]
vulkansdk Vulkan SDK 1.1.73.0 (developers only) (LunarG, 2018) [downloadable] vstools2019 MS Visual Studio Build Tools 2019 (Microsoft, 2019) [downloadable]
vulkansdk121412 Vulkan SDK 1.2.141.2 (developers only) (LunarG, 2020) [downloadable]
vulkansdk Vulkan SDK (latest) (developers only) (LunarG, 2018) [downloadable]
winamp Winamp (Radionomy (AOL (Nullsoft)), 2013) [downloadable] winamp Winamp (Radionomy (AOL (Nullsoft)), 2013) [downloadable]
wme9 MS Windows Media Encoder 9 (broken in Wine) (Microsoft, 2002) [downloadable] wme9 MS Windows Media Encoder 9 (broken in Wine) (Microsoft, 2002) [downloadable]
...@@ -8,7 +8,7 @@ binkw32 RAD Game Tools binkw32.dll (RAD Game Tools, Inc., 2000) ...@@ -8,7 +8,7 @@ binkw32 RAD Game Tools binkw32.dll (RAD Game Tools, Inc., 2000)
cabinet Microsoft cabinet.dll (Microsoft, 2002) [downloadable] cabinet Microsoft cabinet.dll (Microsoft, 2002) [downloadable]
cinepak Cinepak Codec (Radius, 1995) [downloadable] cinepak Cinepak Codec (Radius, 1995) [downloadable]
cmd MS cmd.exe (Microsoft, 2004) [downloadable] cmd MS cmd.exe (Microsoft, 2004) [downloadable]
cnc_ddraw Reimplentation of ddraw for CnC games (CnCNet, 2018) [downloadable] cnc_ddraw Reimplentation of ddraw for CnC games (CnCNet, 2020) [downloadable]
comctl32ocx MS comctl32.ocx and mscomctl.ocx, comctl32 wrappers for VB6 (Microsoft, 2012) [downloadable] comctl32ocx MS comctl32.ocx and mscomctl.ocx, comctl32 wrappers for VB6 (Microsoft, 2012) [downloadable]
comctl32 MS common controls 5.80 (Microsoft, 2001) [downloadable] comctl32 MS common controls 5.80 (Microsoft, 2001) [downloadable]
comdlg32ocx Common Dialog ActiveX Control for VB6 (Microsoft, 2012) [downloadable] comdlg32ocx Common Dialog ActiveX Control for VB6 (Microsoft, 2012) [downloadable]
...@@ -91,6 +91,7 @@ dotnet46 MS .NET 4.6 (Microsoft, 2015) [downloadable] ...@@ -91,6 +91,7 @@ dotnet46 MS .NET 4.6 (Microsoft, 2015) [downloadable]
dotnet471 MS .NET 4.7.1 (Microsoft, 2017) [downloadable] dotnet471 MS .NET 4.7.1 (Microsoft, 2017) [downloadable]
dotnet472 MS .NET 4.7.2 (Microsoft, 2018) [downloadable] dotnet472 MS .NET 4.7.2 (Microsoft, 2018) [downloadable]
dotnet48 MS .NET 4.8 (Microsoft, 2019) [downloadable] dotnet48 MS .NET 4.8 (Microsoft, 2019) [downloadable]
dotnetcore2 MS .NET Core Runtime 2.1 LTS (Microsoft, 2020) [downloadable]
dotnet_verifier MS .NET Verifier (Microsoft, 2016) [downloadable] dotnet_verifier MS .NET Verifier (Microsoft, 2016) [downloadable]
dpvoice Microsoft dpvoice dpvvox dpvacm Audio dlls (Microsoft, 2002) [downloadable] dpvoice Microsoft dpvoice dpvvox dpvacm Audio dlls (Microsoft, 2002) [downloadable]
dsdmo MS dsdmo.dll (Microsoft, 2010) [downloadable] dsdmo MS dsdmo.dll (Microsoft, 2010) [downloadable]
...@@ -148,6 +149,11 @@ dxvk153 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux ...@@ -148,6 +149,11 @@ dxvk153 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux
dxvk154 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.4) (Philip Rebohle, 2017) [downloadable] dxvk154 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.4) (Philip Rebohle, 2017) [downloadable]
dxvk155 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.5) (Philip Rebohle, 2017) [downloadable] dxvk155 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.5.5) (Philip Rebohle, 2017) [downloadable]
dxvk160 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6) (Philip Rebohle, 2017) [downloadable] dxvk160 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6) (Philip Rebohle, 2017) [downloadable]
dxvk161 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.6.1) (Philip Rebohle, 2017) [downloadable]
dxvk170 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7) (Philip Rebohle, 2017) [downloadable]
dxvk171 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.1) (Philip Rebohle, 2017) [downloadable]
dxvk172 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.2) (Philip Rebohle, 2017) [downloadable]
dxvk173 Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (1.7.3) (Philip Rebohle, 2017) [downloadable]
dxvk_master Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (master) (Philip Rebohle, 2017) [downloadable] dxvk_master Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (master) (Philip Rebohle, 2017) [downloadable]
dxvk Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (latest) (Philip Rebohle, 2017) [downloadable] dxvk Vulkan-based D3D9/D3D10/D3D11 implementation for Linux / Wine (latest) (Philip Rebohle, 2017) [downloadable]
esent MS Extensible Storage Engine (Microsoft, 2011) [downloadable] esent MS Extensible Storage Engine (Microsoft, 2011) [downloadable]
...@@ -161,11 +167,13 @@ faudio1906 FAudio (xaudio reimplementation, with xna support) buil ...@@ -161,11 +167,13 @@ faudio1906 FAudio (xaudio reimplementation, with xna support) buil
faudio FAudio (xaudio reimplementation, with xna support) builds for win32 (latest) (Kron4ek, 2019) [downloadable] faudio FAudio (xaudio reimplementation, with xna support) builds for win32 (latest) (Kron4ek, 2019) [downloadable]
ffdshow ffdshow video codecs (doom9 folks, 2010) [downloadable] ffdshow ffdshow video codecs (doom9 folks, 2010) [downloadable]
filever Microsoft's filever, for dumping file version info (Microsoft, 20??) [downloadable] filever Microsoft's filever, for dumping file version info (Microsoft, 20??) [downloadable]
flash Flash Player 29 (Adobe, 2018) [downloadable] flash Flash Player 32 (Adobe, 2020) [downloadable]
galliumnine02 Gallium Nine Standalone (v0.2) (Gallium Nine Team, 2019) [downloadable] galliumnine02 Gallium Nine Standalone (v0.2) (Gallium Nine Team, 2019) [downloadable]
galliumnine03 Gallium Nine Standalone (v0.3) (Gallium Nine Team, 2019) [downloadable] galliumnine03 Gallium Nine Standalone (v0.3) (Gallium Nine Team, 2019) [downloadable]
galliumnine04 Gallium Nine Standalone (v0.4) (Gallium Nine Team, 2019) [downloadable] galliumnine04 Gallium Nine Standalone (v0.4) (Gallium Nine Team, 2019) [downloadable]
galliumnine05 Gallium Nine Standalone (v0.5) (Gallium Nine Team, 2019) [downloadable] galliumnine05 Gallium Nine Standalone (v0.5) (Gallium Nine Team, 2019) [downloadable]
galliumnine06 Gallium Nine Standalone (v0.6) (Gallium Nine Team, 2020) [downloadable]
galliumnine07 Gallium Nine Standalone (v0.7) (Gallium Nine Team, 2020) [downloadable]
galliumnine Gallium Nine Standalone (latest) (Gallium Nine Team, 2019) [downloadable] galliumnine Gallium Nine Standalone (latest) (Gallium Nine Team, 2019) [downloadable]
gdiplus MS GDI+ (Microsoft, 2011) [downloadable] gdiplus MS GDI+ (Microsoft, 2011) [downloadable]
gdiplus_winxp MS GDI+ (Microsoft, 2009) gdiplus_winxp MS GDI+ (Microsoft, 2009)
...@@ -184,11 +192,20 @@ itircl MS itircl.dll (Microsoft, 1999) [downloadable] ...@@ -184,11 +192,20 @@ itircl MS itircl.dll (Microsoft, 1999) [downloadable]
itss MS itss.dll (Microsoft, 1999) [downloadable] itss MS itss.dll (Microsoft, 1999) [downloadable]
jet40 MS Jet 4.0 Service Pack 8 (Microsoft, 2003) [downloadable] jet40 MS Jet 4.0 Service Pack 8 (Microsoft, 2003) [downloadable]
l3codecx MPEG Layer-3 Audio Codec for Microsoft DirectShow (Microsoft, 2010) [downloadable] l3codecx MPEG Layer-3 Audio Codec for Microsoft DirectShow (Microsoft, 2010) [downloadable]
lavfilters702 LAV Filters 0.70.2 (Hendrik Leppkes, 2017) [downloadable]
lavfilters LAV Filters (Hendrik Leppkes, 2019) [downloadable]
mdac27 Microsoft Data Access Components 2.7 sp1 (Microsoft, 2006) [downloadable] mdac27 Microsoft Data Access Components 2.7 sp1 (Microsoft, 2006) [downloadable]
mdac28 Microsoft Data Access Components 2.8 sp1 (Microsoft, 2005) [downloadable] mdac28 Microsoft Data Access Components 2.8 sp1 (Microsoft, 2005) [downloadable]
mdx Managed DirectX (Microsoft, 2006) [downloadable] mdx Managed DirectX (Microsoft, 2006) [downloadable]
mfc100 Visual C++ 2010 mfc100 library; part of vcrun2010 (Microsoft, 2010) [downloadable]
mfc110 Visual C++ 2012 mfc110 library; part of vcrun2012 (Microsoft, 2012) [downloadable]
mfc120 Visual C++ 2013 mfc120 library; part of vcrun2013 (Microsoft, 2013) [downloadable]
mfc140 Visual C++ 2015 mfc140 library; part of vcrun2015 (Microsoft, 2015) [downloadable]
mfc40 MS mfc40 (Microsoft Foundation Classes from win7sp1) (Microsoft, 1999) [downloadable] mfc40 MS mfc40 (Microsoft Foundation Classes from win7sp1) (Microsoft, 1999) [downloadable]
mfc42 Visual C++ 6 SP4 mfc42 library; part of vcrun6 (Microsoft, 2000) [downloadable] mfc42 Visual C++ 6 SP4 mfc42 library; part of vcrun6 (Microsoft, 2000) [downloadable]
mfc71 Visual C++ 2003 mfc71 library; part of vcrun2003 (Microsoft, 2003) [downloadable]
mfc80 Visual C++ 2005 mfc80 library; part of vcrun2005 (Microsoft, 2011) [downloadable]
mfc90 Visual C++ 2008 mfc90 library; part of vcrun2008 (Microsoft, 2011) [downloadable]
mf MS Media Foundation (Microsoft, 2011) [downloadable] mf MS Media Foundation (Microsoft, 2011) [downloadable]
msacm32 MS ACM32 (Microsoft, 2003) [downloadable] msacm32 MS ACM32 (Microsoft, 2003) [downloadable]
msasn1 MS ASN1 (Microsoft, 2003) [downloadable] msasn1 MS ASN1 (Microsoft, 2003) [downloadable]
...@@ -222,6 +239,7 @@ qasf qasf.dll (Microsoft, 2011) [downloadable] ...@@ -222,6 +239,7 @@ qasf qasf.dll (Microsoft, 2011) [downloadable]
qcap qcap.dll (Microsoft, 2011) [downloadable] qcap qcap.dll (Microsoft, 2011) [downloadable]
qdvd qdvd.dll (Microsoft, 2011) [downloadable] qdvd qdvd.dll (Microsoft, 2011) [downloadable]
qedit qedit.dll (Microsoft, 2011) [downloadable] qedit qedit.dll (Microsoft, 2011) [downloadable]
quartz_feb2010 quartz.dll (February 2010) (Microsoft, 2010) [downloadable]
quartz quartz.dll (Microsoft, 2011) [downloadable] quartz quartz.dll (Microsoft, 2011) [downloadable]
quicktime72 Apple QuickTime 7.2 (Apple, 2010) [downloadable] quicktime72 Apple QuickTime 7.2 (Apple, 2010) [downloadable]
quicktime76 Apple QuickTime 7.6 (Apple, 2010) [downloadable] quicktime76 Apple QuickTime 7.6 (Apple, 2010) [downloadable]
...@@ -250,11 +268,12 @@ vcrun2012 Visual C++ 2012 libraries (atl110,mfc110,mfc110u,msvcp1 ...@@ -250,11 +268,12 @@ vcrun2012 Visual C++ 2012 libraries (atl110,mfc110,mfc110u,msvcp1
vcrun2013 Visual C++ 2013 libraries (mfc120,mfc120u,msvcp120,msvcr120,vcomp120) (Microsoft, 2013) [downloadable] vcrun2013 Visual C++ 2013 libraries (mfc120,mfc120u,msvcp120,msvcr120,vcomp120) (Microsoft, 2013) [downloadable]
vcrun2015 Visual C++ 2015 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2015) [downloadable] vcrun2015 Visual C++ 2015 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2015) [downloadable]
vcrun2017 Visual C++ 2017 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2017) [downloadable] vcrun2017 Visual C++ 2017 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2017) [downloadable]
vcrun2019 Visual C++ 2015-2019 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (Microsoft, 2019) [downloadable] vcrun2019 Visual C++ 2015-2019 libraries (concrt140.dll,mfc140.dll,mfc140u.dll,mfcm140.dll,mfcm140u.dll,msvcp140.dll,vcamp140.dll,vccorlib140.dll,vcomp140.dll,vcruntime140.dll) (and vcruntime140_1.dll on win64) (Microsoft, 2019) [downloadable]
vcrun6sp6 Visual C++ 6 SP6 libraries (with fixes in ATL and MFC) (Microsoft, 2004) [downloadable] vcrun6sp6 Visual C++ 6 SP6 libraries (with fixes in ATL and MFC) (Microsoft, 2004) [downloadable]
vcrun6 Visual C++ 6 SP4 libraries (mfc42, msvcp60, msvcirt) (Microsoft, 2000) [downloadable] vcrun6 Visual C++ 6 SP4 libraries (mfc42, msvcp60, msvcirt) (Microsoft, 2000) [downloadable]
vjrun20 MS Visual J# 2.0 SE libraries (requires dotnet20) (Microsoft, 2007) [downloadable] vjrun20 MS Visual J# 2.0 SE libraries (requires dotnet20) (Microsoft, 2007) [downloadable]
vulkanrt Vulkan Runtime 1.1.73.0 (LunarG, 2018) [downloadable] vulkanrt121412 Vulkan Runtime 1.2.141.2 (LunarG, 2020) [downloadable]
vulkanrt Vulkan Runtime (latest) (LunarG, 2020) [downloadable]
webio MS Windows Web I/O (Microsoft, 2011) [downloadable] webio MS Windows Web I/O (Microsoft, 2011) [downloadable]
windowscodecs MS Windows Imaging Component (Microsoft, 2006) [downloadable] windowscodecs MS Windows Imaging Component (Microsoft, 2006) [downloadable]
winhttp MS Windows HTTP Services (Microsoft, 2005) [downloadable] winhttp MS Windows HTTP Services (Microsoft, 2005) [downloadable]
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
3dmark2001 3dmark2001
3m_library 3m_library
7zip 7zip
abiword
adobeair adobeair
adobe_diged adobe_diged
adobe_diged4 adobe_diged4
...@@ -130,6 +129,7 @@ dotnet462 ...@@ -130,6 +129,7 @@ dotnet462
dotnet471 dotnet471
dotnet472 dotnet472
dotnet48 dotnet48
dotnetcore2
dotnet_verifier dotnet_verifier
dpvoice dpvoice
dragonage2_demo dragonage2_demo
...@@ -192,6 +192,11 @@ dxvk153 ...@@ -192,6 +192,11 @@ dxvk153
dxvk154 dxvk154
dxvk155 dxvk155
dxvk160 dxvk160
dxvk161
dxvk170
dxvk171
dxvk172
dxvk173
dxvk_master dxvk_master
emu8086 emu8086
esent esent
...@@ -217,6 +222,8 @@ galliumnine02 ...@@ -217,6 +222,8 @@ galliumnine02
galliumnine03 galliumnine03
galliumnine04 galliumnine04
galliumnine05 galliumnine05
galliumnine06
galliumnine07
gdiplus gdiplus
georgia georgia
gfw gfw
...@@ -242,6 +249,8 @@ jet40 ...@@ -242,6 +249,8 @@ jet40
kindle kindle
kobo kobo
l3codecx l3codecx
lavfilters
lavfilters702
liberation liberation
lucida lucida
masseffect2_demo masseffect2_demo
...@@ -251,8 +260,15 @@ mdac28 ...@@ -251,8 +260,15 @@ mdac28
mdx mdx
meiryo meiryo
mf mf
mfc100
mfc110
mfc120
mfc140
mfc40 mfc40
mfc42 mfc42
mfc71
mfc80
mfc90
mfsx_demo mfsx_demo
mingw mingw
mozillabuild mozillabuild
...@@ -311,6 +327,7 @@ qedit ...@@ -311,6 +327,7 @@ qedit
qq qq
qqintl qqintl
quartz quartz
quartz_feb2010
quicktime72 quicktime72
quicktime76 quicktime76
riched20 riched20
...@@ -369,11 +386,15 @@ verdana ...@@ -369,11 +386,15 @@ verdana
vjrun20 vjrun20
vlc vlc
vlgothic vlgothic
vstools2019
vulkanrt vulkanrt
vulkanrt121412
vulkansdk vulkansdk
vulkansdk121412
webdings webdings
webio webio
wenquanyi wenquanyi
wenquanyizenhei
wglgears wglgears
winamp winamp
windowscodecs windowscodecs
......
allfonts All fonts (various, 1998-2010) [downloadable]
andale MS Andale Mono font (Microsoft, 2008) [downloadable]
arial MS Arial / Arial Black fonts (Microsoft, 2008) [downloadable]
baekmuk Baekmuk Korean fonts (Wooderart Inc. / kldp.net, 1999) [downloadable]
calibri MS Calibri font (Microsoft, 2007) [downloadable]
cambria MS Cambria font (Microsoft, 2009) [downloadable]
candara MS Candara font (Microsoft, 2009) [downloadable]
cjkfonts All Chinese, Japanese, Korean fonts and aliases (Various, ) [downloadable]
comicsans MS Comic Sans fonts (Microsoft, 2008) [downloadable]
consolas MS Consolas console font (Microsoft, 2011) [downloadable]
constantia MS Constantia font (Microsoft, 2009) [downloadable]
corbel MS Corbel font (Microsoft, 2009) [downloadable]
corefonts MS Arial, Courier, Times fonts (Microsoft, 2008) [downloadable]
courier MS Courier fonts (Microsoft, 2008) [downloadable]
droid Droid fonts (Ascender Corporation, 2009) [downloadable]
eufonts Updated fonts for Romanian and Bulgarian (Microsoft, 2008) [downloadable]
fakechinese Creates aliases for Chinese fonts using Source Han Sans fonts (Adobe, 2019)
fakejapanese_ipamona Creates aliases for Japanese fonts using IPAMona fonts (Jun Kobayashi, 2008)
fakejapanese Creates aliases for Japanese fonts using Source Han Sans fonts (Adobe, 2019)
fakejapanese_vlgothic Creates aliases for Japanese Meiryo fonts using VLGothic fonts (Project Vine / Daisuke Suzuki, 2014)
fakekorean Creates aliases for Korean fonts using Source Han Sans fonts (Adobe, 2019)
georgia MS Georgia fonts (Microsoft, 2008) [downloadable]
impact MS Impact fonts (Microsoft, 2008) [downloadable]
ipamona IPAMona Japanese fonts (Jun Kobayashi, 2008) [downloadable]
liberation Red Hat Liberation fonts (Mono, Sans, SansNarrow, Serif) (Red Hat, 2008) [downloadable]
lucida MS Lucida Console font (Microsoft, 1998) [downloadable]
meiryo MS Meiryo font (Microsoft, 2009) [downloadable]
opensymbol OpenSymbol fonts (replacement for Wingdings) (OpenOffice.org, 2017) [downloadable]
pptfonts All MS PowerPoint Viewer fonts (various, ) [downloadable]
sourcehansans Source Han Sans fonts (Adobe, 2019) [downloadable]
tahoma MS Tahoma font (not part of corefonts) (Microsoft, 1999) [downloadable]
takao Takao Japanese fonts (Jun Kobayashi, 2010) [downloadable]
times MS Times fonts (Microsoft, 2008) [downloadable]
trebuchet MS Trebuchet fonts (Microsoft, 2008) [downloadable]
uff Ubuntu Font Family (Ubuntu, 2010) [downloadable]
unifont Unifont alternative to Arial Unicode MS (Roman Czyborra / GNU, 2019) [downloadable]
verdana MS Verdana fonts (Microsoft, 2008) [downloadable]
vlgothic VLGothic Japanese fonts (Project Vine / Daisuke Suzuki, 2014) [downloadable]
webdings MS Webdings fonts (Microsoft, 2008) [downloadable]
wenquanyi WenQuanYi CJK font (wenq.org, 2009) [downloadable]
wenquanyizenhei WenQuanYi ZenHei font (wenq.org, 2009) [downloadable]
...@@ -47,7 +47,8 @@ native_mdac Override odbc32, odbccp32 and oledb32 ...@@ -47,7 +47,8 @@ native_mdac Override odbc32, odbccp32 and oledb32
native_oleaut32 Override oleaut32 native_oleaut32 Override oleaut32
nocrashdialog Disable crash dialog nocrashdialog Disable crash dialog
npm=repack Set NonPower2Mode to repack npm=repack Set NonPower2Mode to repack
nt40 Set windows version to Windows NT 4.0 nt351 Set Windows version to Windows NT 3.51
nt40 Set Windows version to Windows NT 4.0
orm=backbuffer Set OffscreenRenderingMode=backbuffer orm=backbuffer Set OffscreenRenderingMode=backbuffer
orm=fbo Set OffscreenRenderingMode=fbo (default) orm=fbo Set OffscreenRenderingMode=fbo (default)
psm=0 Set MaxShaderModelPS to 0 psm=0 Set MaxShaderModelPS to 0
...@@ -87,10 +88,12 @@ vsm=1 Set MaxShaderModelVS to 1 ...@@ -87,10 +88,12 @@ vsm=1 Set MaxShaderModelVS to 1
vsm=2 Set MaxShaderModelVS to 2 vsm=2 Set MaxShaderModelVS to 2
vsm=3 Set MaxShaderModelVS to 3 vsm=3 Set MaxShaderModelVS to 3
win10 Set Windows version to Windows 10 win10 Set Windows version to Windows 10
win20 Set Windows version to Windows 2.0
win2k3 Set Windows version to Windows 2003 win2k3 Set Windows version to Windows 2003
win2k8r2 Set Windows version to Windows 2008 R2 win2k8r2 Set Windows version to Windows 2008 R2
win2k8 Set Windows version to Windows 2008 win2k8 Set Windows version to Windows 2008
win2k Set Windows version to Windows 2000 win2k Set Windows version to Windows 2000
win30 Set Windows version to Windows 3.0
win31 Set Windows version to Windows 3.1 win31 Set Windows version to Windows 3.1
win7 Set Windows version to Windows 7 win7 Set Windows version to Windows 7
win81 Set Windows version to Windows 8.1 win81 Set Windows version to Windows 8.1
...@@ -101,5 +104,6 @@ windowmanagerdecorated=n Prevent the window manager from decorating windows ...@@ -101,5 +104,6 @@ windowmanagerdecorated=n Prevent the window manager from decorating windows
windowmanagerdecorated=y Allow the window manager to decorate windows (default) windowmanagerdecorated=y Allow the window manager to decorate windows (default)
windowmanagermanaged=n Prevent the window manager from controlling windows windowmanagermanaged=n Prevent the window manager from controlling windows
windowmanagermanaged=y Allow the window manager to control windows (default) windowmanagermanaged=y Allow the window manager to control windows (default)
winme Set Windows version to Windows ME
winver= Set Windows version to default (win7) winver= Set Windows version to default (win7)
winxp Set Windows version to Windows XP winxp Set Windows version to Windows XP
...@@ -23,9 +23,9 @@ ...@@ -23,9 +23,9 @@
set -x set -x
WINE_GIT="${WINE_GIT:-$HOME/wine-git}" WINE_GIT="${WINE_GIT:-${HOME}/wine-git}"
cd "$WINE_GIT" || exit 125 cd "${WINE_GIT}" || exit 125
git clean -fxd || exit 125 git clean -fxd || exit 125
...@@ -39,6 +39,6 @@ fi ...@@ -39,6 +39,6 @@ fi
"${WINE_GIT}/server/wineserver" -k || true "${WINE_GIT}/server/wineserver" -k || true
rm -rf "$HOME/.wine" || exit 125 rm -rf "${HOME}/.wine" || exit 125
WINE="${WINE_GIT}/wine" winetricks -q -v "$@" WINE="${WINE_GIT}/wine" winetricks -q -v "$@"
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
set -x set -x
CACHE_DIR="${HOME}/.cache/winetricks" CACHE_DIR="${HOME}/.cache/winetricks"
SRC_DIR="$PWD" SRC_DIR="${PWD}"
winetricks="${SRC_DIR}/src/winetricks" winetricks="${SRC_DIR}/src/winetricks"
if [ ! -f README.md ] ; then if [ ! -f README.md ] ; then
...@@ -51,7 +51,7 @@ for dir in "${CACHE_DIR}/"* ; do ...@@ -51,7 +51,7 @@ for dir in "${CACHE_DIR}/"* ; do
for file in "${dir}"/* ; do for file in "${dir}"/* ; do
# Convert the package: # Convert the package:
echo file="${file}" echo file="${file}"
echo "dir=$dir, package=$package, file=$file" echo "dir=${dir}, package=${package}, file=${file}"
sha1_file="$(sha1sum "${file}" | awk '{print $1}')" sha1_file="$(sha1sum "${file}" | awk '{print $1}')"
sha256_file="$(sha256sum "${file}" | awk '{print $1}')" sha256_file="$(sha256sum "${file}" | awk '{print $1}')"
echo "sha1: ${sha1_file}" echo "sha1: ${sha1_file}"
...@@ -67,7 +67,7 @@ for dir in "${CACHE_DIR}/"* ; do ...@@ -67,7 +67,7 @@ for dir in "${CACHE_DIR}/"* ; do
# Test it # Test it
wineserver -k || true wineserver -k || true
rm -rf "$HOME/.wine" rm -rf "${HOME}/.wine"
# shellcheck disable=SC2115 # shellcheck disable=SC2115
rm -rf "${CACHE_DIR}/${package}" rm -rf "${CACHE_DIR}/${package}"
...@@ -77,7 +77,7 @@ for dir in "${CACHE_DIR}/"* ; do ...@@ -77,7 +77,7 @@ for dir in "${CACHE_DIR}/"* ; do
test_status="$?" test_status="$?"
# Commit it (if it worked): # Commit it (if it worked):
if [ $test_status = 0 ] ; then if [ ${test_status} = 0 ] ; then
git commit -m "${package}: convert to sha256" "${winetricks}" git commit -m "${package}: convert to sha256" "${winetricks}"
else else
git checkout -f git checkout -f
......
...@@ -28,11 +28,11 @@ set -eux ...@@ -28,11 +28,11 @@ set -eux
# "us-central1.gce.archive.ubuntu.com" is used by "apt" addon # "us-central1.gce.archive.ubuntu.com" is used by "apt" addon
# (See "Installing APT Packages" in logs), assuming it's fast # (See "Installing APT Packages" in logs), assuming it's fast
UBUNTU_POOL=http://us-central1.gce.archive.ubuntu.com/ubuntu/pool UBUNTU_POOL=http://us-central1.gce.archive.ubuntu.com/ubuntu/pool
DEB_BABEL_LOCALEDATA=$UBUNTU_POOL/main/p/python-babel/python-babel-localedata_2.4.0+dfsg.1-2ubuntu1_all.deb DEB_BABEL_LOCALEDATA=${UBUNTU_POOL}/main/p/python-babel/python-babel-localedata_2.4.0+dfsg.1-2ubuntu1_all.deb
DEB_BABEL=$UBUNTU_POOL/main/p/python-babel/python-babel_2.4.0+dfsg.1-2ubuntu1_all.deb DEB_BABEL=${UBUNTU_POOL}/main/p/python-babel/python-babel_2.4.0+dfsg.1-2ubuntu1_all.deb
DEB_BASHATE=$UBUNTU_POOL/universe/p/python-bashate/python-bashate_0.5.1-1_all.deb DEB_BASHATE=${UBUNTU_POOL}/universe/p/python-bashate/python-bashate_0.5.1-1_all.deb
DEB_PBR=$UBUNTU_POOL/main/p/python-pbr/python-pbr_3.1.1-3ubuntu3_all.deb DEB_PBR=${UBUNTU_POOL}/main/p/python-pbr/python-pbr_3.1.1-3ubuntu3_all.deb
DEB_SIX=$UBUNTU_POOL/main/s/six/python-six_1.11.0-2_all.deb DEB_SIX=${UBUNTU_POOL}/main/s/six/python-six_1.11.0-2_all.deb
if command -v bashate >/dev/null; then if command -v bashate >/dev/null; then
echo "bashate is already installed." echo "bashate is already installed."
...@@ -41,19 +41,19 @@ fi ...@@ -41,19 +41,19 @@ fi
if test -d /Library; then if test -d /Library; then
# macOS: "six" is already installed # macOS: "six" is already installed
curl --remote-name-all $DEB_BABEL_LOCALEDATA $DEB_BABEL $DEB_BASHATE $DEB_PBR curl --remote-name-all ${DEB_BABEL_LOCALEDATA} ${DEB_BABEL} ${DEB_BASHATE} ${DEB_PBR}
BINDIR=/usr/local/bin BINDIR=/usr/local/bin
PACKAGESDIR=/Library/Python/2.7/site-packages PACKAGESDIR=/Library/Python/2.7/site-packages
else else
# Ubuntu # Ubuntu
curl --remote-name-all $DEB_BABEL_LOCALEDATA $DEB_BABEL $DEB_BASHATE $DEB_PBR $DEB_SIX curl --remote-name-all ${DEB_BABEL_LOCALEDATA} ${DEB_BABEL} ${DEB_BASHATE} ${DEB_PBR} ${DEB_SIX}
BINDIR=/usr/bin BINDIR=/usr/bin
PACKAGESDIR=/usr/lib/python2.7/dist-packages PACKAGESDIR=/usr/lib/python2.7/dist-packages
fi fi
for f in *.deb; do for f in *.deb; do
ar p "$f" data.tar.xz | tar -Jvxf - ar p "${f}" data.tar.xz | tar -Jvxf -
done done
sudo cp -R usr/lib/python2.7/dist-packages/* $PACKAGESDIR/ sudo cp -R usr/lib/python2.7/dist-packages/* ${PACKAGESDIR}/
sudo install -m 755 usr/bin/python2-bashate $BINDIR/bashate sudo install -m 755 usr/bin/python2-bashate ${BINDIR}/bashate
...@@ -23,15 +23,15 @@ check_deps() { ...@@ -23,15 +23,15 @@ check_deps() {
} }
if [ -f src/winetricks ] ; then if [ -f src/winetricks ] ; then
TOP="$PWD" TOP="${PWD}"
shwinetricks="${PWD}/src/winetricks" shwinetricks="${PWD}/src/winetricks"
elif [ -f ../src/winetricks ] ; then elif [ -f ../src/winetricks ] ; then
# realpath isn't available on OSX, use a subshell instead: # realpath isn't available on OSX, use a subshell instead:
TOP="$(cd .. && echo "$PWD")" TOP="$(cd .. && echo "${PWD}")"
shwinetricks="${TOP}/src/winetricks" shwinetricks="${TOP}/src/winetricks"
elif [ -f ../../src/winetricks ] ; then elif [ -f ../../src/winetricks ] ; then
# realpath isn't available on OSX, use a subshell instead: # realpath isn't available on OSX, use a subshell instead:
TOP="$(cd ../.. && echo "$PWD")" TOP="$(cd ../.. && echo "${PWD}")"
shwinetricks="${TOP}/src/winetricks" shwinetricks="${TOP}/src/winetricks"
else else
echo "Dude, where's my car?!" echo "Dude, where's my car?!"
...@@ -46,9 +46,9 @@ ftp_microsoft_com=64.4.17.176 ...@@ -46,9 +46,9 @@ ftp_microsoft_com=64.4.17.176
w_download() { w_download() {
# shellcheck disable=SC2016 # shellcheck disable=SC2016
url="$(echo "$1" | sed -e 's,$ftp_microsoft_com,'$ftp_microsoft_com',;s, ,%20,g')" url="$(echo "$1" | sed -e 's,$ftp_microsoft_com,'${ftp_microsoft_com}',;s, ,%20,g')"
urlkey="$(echo "$url" | tr / _)" urlkey="$(echo "${url}" | tr / _)"
echo "$url" > "${datadir}/${urlkey}.url" echo "${url}" > "${datadir}/${urlkey}.url"
} }
# Extract list of URLs from winetricks # Extract list of URLs from winetricks
...@@ -72,12 +72,12 @@ extract_all() { ...@@ -72,12 +72,12 @@ extract_all() {
show_one() { show_one() {
urlfile=$1 urlfile=$1
base=${urlfile%.url} base=${urlfile%.url}
url="$(cat "$urlfile")" url="$(cat "${urlfile}")"
if grep -E "HTTP.*200|HTTP.*30[0-9]|Content-Length" "$base.log" > /dev/null; then if grep -E "HTTP.*200|HTTP.*30[0-9]|Content-Length" "${base}.log" > /dev/null; then
passes=$((passes + 1)) passes=$((passes + 1))
else else
echo "BAD $url" echo "BAD ${url}"
cat "$base.log" cat "${base}.log"
echo "" echo ""
errors=$((errors + 1)) errors=$((errors + 1))
fi fi
...@@ -85,8 +85,8 @@ show_one() { ...@@ -85,8 +85,8 @@ show_one() {
# Show full report on most recent crawl # Show full report on most recent crawl
show_all() { show_all() {
for urlfile in "$datadir"/*.url ; do for urlfile in "${datadir}"/*.url ; do
show_one "$urlfile" show_one "${urlfile}"
done done
} }
...@@ -99,36 +99,36 @@ show_all() { ...@@ -99,36 +99,36 @@ show_all() {
crawl_one() { crawl_one() {
urlfile=$1 urlfile=$1
base=${urlfile%.url} base=${urlfile%.url}
url="$(cat "$urlfile")" url="$(cat "${urlfile}")"
curl --connect-timeout 10 --retry 6 -s -S -I "$url" 2>&1 | curl --connect-timeout 10 --retry 6 -s -S -I "${url}" 2>&1 |
tr -d '\015' | tr -d '\015' |
grep . | grep . |
sort > "$base.log" sort > "${base}.log"
# more diff-able? # more diff-able?
# cat "$base.log" | # cat "$base.log" |
# grep -E 'HTTP|Last-Modified:|Content-Length:|ETag:' | # grep -E 'HTTP|Last-Modified:|Content-Length:|ETag:' |
# tr '\012' ' ' | # tr '\012' ' ' |
# sed 's/ Connection:.*//' > "$datadir"/"$urlkey.dat" # sed 's/ Connection:.*//' > "$datadir"/"$urlkey.dat"
# echo "" >> "$base.dat" # echo "" >> "$base.dat"
show_one "$urlfile" show_one "${urlfile}"
} }
# Fetch all info # Fetch all info
# Do fetches in background so slow servers don't hang us # Do fetches in background so slow servers don't hang us
# Print quick feedback as results come in # Print quick feedback as results come in
crawl_all() { crawl_all() {
for urlfile in "$datadir"/*.url ; do for urlfile in "${datadir}"/*.url ; do
url="$(cat "$urlfile")" url="$(cat "${urlfile}")"
echo "Crawling $url" echo "Crawling ${url}"
crawl_one "$urlfile" & crawl_one "${urlfile}" &
sleep 1 sleep 1
done done
# Wait for fetches to finish # Wait for fetches to finish
wait wait
} }
mkdir -p "$datadir" mkdir -p "${datadir}"
case "$1" in case "$1" in
check-deps) check-deps)
...@@ -148,9 +148,9 @@ report) ...@@ -148,9 +148,9 @@ report)
esac esac
# cleanup # cleanup
rm -rf "$datadir" url-script-fragment.tmp rm -rf "${datadir}" url-script-fragment.tmp
echo "Test over, $errors failures, $passes successes." echo "Test over, ${errors} failures, ${passes} successes."
if test $errors = 0 && test $passes -gt 0; then if test ${errors} = 0 && test ${passes} -gt 0; then
echo PASS echo PASS
exit 0 exit 0
else else
......
...@@ -16,10 +16,14 @@ set -e ...@@ -16,10 +16,14 @@ set -e
set -x set -x
nopush=0 nopush=0
# Don't push commits/tags or upload files # Don't push commits/tags or upload files if --no-push is given:
if [ "$1" = "--no-push" ] ; then if [ "$1" = "--no-push" ] ; then
nopush=1 nopush=1
shift shift
# If we _are_ pushing, we'll need a github token:
elif [ -z "${GITHUB_TOKEN}" ] ; then
echo "--no-push wasn't given, GITHUB_TOKEN must be set in the environment!"
exit 1
fi fi
# FIXME: If "--no-push" isn't set, above statement dies, not sure how to construct properly to avoid # FIXME: If "--no-push" isn't set, above statement dies, not sure how to construct properly to avoid
...@@ -40,11 +44,6 @@ export WINEARCH="win32" ...@@ -40,11 +44,6 @@ export WINEARCH="win32"
# Needed by the list commands below: # Needed by the list commands below:
export WINETRICKS_LATEST_VERSION_CHECK="development" export WINETRICKS_LATEST_VERSION_CHECK="development"
if [ -z "$GITHUB_TOKEN" ] ; then
echo "GITHUB_TOKEN must be set in the environment!"
exit 1
fi
# Make sure we're at top level: # Make sure we're at top level:
if [ ! -f Makefile ] ; then if [ ! -f Makefile ] ; then
echo "Please run this from the top of the source tree" echo "Please run this from the top of the source tree"
...@@ -70,11 +69,9 @@ echo "${version}" > files/LATEST ...@@ -70,11 +69,9 @@ echo "${version}" > files/LATEST
# Update verb lists: # Update verb lists:
# actual categories # actual categories
./src/winetricks apps list | sed 's/[[:blank:]]*$//' > files/verbs/apps.txt for category in $(./src/winetricks list); do
./src/winetricks benchmarks list | sed 's/[[:blank:]]*$//' > files/verbs/benchmarks.txt ./src/winetricks "${category}" list | sed 's/[[:blank:]]*$//' > "files/verbs/${category}.txt"
./src/winetricks dlls list | sed 's/[[:blank:]]*$//' > files/verbs/dlls.txt done
./src/winetricks games list | sed 's/[[:blank:]]*$//' > files/verbs/games.txt
./src/winetricks settings list | sed 's/[[:blank:]]*$//' > files/verbs/settings.txt
# meta categories # meta categories
./src/winetricks list-all | sed 's/[[:blank:]]*$//' > files/verbs/all.txt ./src/winetricks list-all | sed 's/[[:blank:]]*$//' > files/verbs/all.txt
...@@ -88,7 +85,7 @@ git tag -s -m "winetricks-${version}" "${version}" ...@@ -88,7 +85,7 @@ git tag -s -m "winetricks-${version}" "${version}"
sed -i -e "s%WINETRICKS_VERSION=.*%WINETRICKS_VERSION=${version}-next%" src/winetricks sed -i -e "s%WINETRICKS_VERSION=.*%WINETRICKS_VERSION=${version}-next%" src/winetricks
git commit src/winetricks -m "development version bump - ${version}-next" git commit src/winetricks -m "development version bump - ${version}-next"
if [ $nopush = 1 ] ; then if [ ${nopush} = 1 ] ; then
echo "--no-push used, not pushing commits / tags" echo "--no-push used, not pushing commits / tags"
else else
git push git push
...@@ -102,7 +99,7 @@ git archive --prefix="winetricks-${version}/" -o "${tmpdir}/${version}.tar.gz" " ...@@ -102,7 +99,7 @@ git archive --prefix="winetricks-${version}/" -o "${tmpdir}/${version}.tar.gz" "
gpg --armor --default-key 0x053F0749 --detach-sign "${tmpdir}/${version}.tar.gz" gpg --armor --default-key 0x053F0749 --detach-sign "${tmpdir}/${version}.tar.gz"
# upload the detached signature to github: # upload the detached signature to github:
if [ $nopush = 1 ] ; then if [ ${nopush} = 1 ] ; then
echo "--no-push used, not uploading signature file" echo "--no-push used, not uploading signature file"
else else
python3 src/github-api-releases.py "${tmpdir}/${version}.tar.gz.asc" Winetricks winetricks "${version}" python3 src/github-api-releases.py "${tmpdir}/${version}.tar.gz.asc" Winetricks winetricks "${version}"
......
...@@ -23,7 +23,7 @@ rm -f /tmp/allfiles.txt ...@@ -23,7 +23,7 @@ rm -f /tmp/allfiles.txt
for dir; do for dir; do
( (
cd "$dir/drive_c" cd "${dir}/drive_c"
# FIXME: don't assume there are no ='s in filenames, e.g. rewrite in perl # FIXME: don't assume there are no ='s in filenames, e.g. rewrite in perl
find . -type f | tr ' ' '=' | grep -E -iv 'tmp|temp|installer|NativeImages' | sort > ../files.txt find . -type f | tr ' ' '=' | grep -E -iv 'tmp|temp|installer|NativeImages' | sort > ../files.txt
cat ../files.txt >> /tmp/allfiles.txt cat ../files.txt >> /tmp/allfiles.txt
...@@ -36,9 +36,9 @@ sort < /tmp/allfiles.txt | uniq -c | awk '$1 == 1 {print $2}' > /tmp/uniqfiles.t ...@@ -36,9 +36,9 @@ sort < /tmp/allfiles.txt | uniq -c | awk '$1 == 1 {print $2}' > /tmp/uniqfiles.t
# Associate them with the verb they came from # Associate them with the verb they came from
for dir; do for dir; do
( (
cd "$dir" cd "${dir}"
# Undo the space-to-= transformation, too # Undo the space-to-= transformation, too
grep -F -f /tmp/uniqfiles.txt < files.txt | tr '=' ' ' > uniqfiles.txt grep -F -f /tmp/uniqfiles.txt < files.txt | tr '=' ' ' > uniqfiles.txt
) )
echo "$dir/uniqfiles.txt" echo "${dir}/uniqfiles.txt"
done done
This source diff could not be displayed because it is too large. You can view the blob instead.
.\" -*- nroff -*- .\" -*- nroff -*-
.TH WINETRICKS 1 "April 2020" "Winetricks 20200412" "Wine Package Manager" .TH WINETRICKS 1 "December 2020" "Winetricks 20201206" "Wine Package Manager"
.SH NAME .SH NAME
winetricks \- manage virtual Windows environments using Wine winetricks \- manage virtual Windows environments using Wine
.SH SYNOPSIS .SH SYNOPSIS
...@@ -89,6 +89,14 @@ games list ...@@ -89,6 +89,14 @@ games list
list verbs in category 'games' list verbs in category 'games'
.TP .TP
.B .B
fonts list
list verbs in category 'fonts'
.TP
.B
settings list
list verbs in category 'settings'
.TP
.B
list list
list categories list categories
.TP .TP
...@@ -109,12 +117,18 @@ list-installed ...@@ -109,12 +117,18 @@ list-installed
list already-installed verbs list already-installed verbs
.TP .TP
.B .B
arch=32|64
create wineprefix with 32 or 64 bit, this option must be
given before prefix=foobar and will not work in case of
the default wineprefix.
.TP
.B
prefix=foobar prefix=foobar
select WINEPREFIX=$HOME/.local/share/wineprefixes/foobar select WINEPREFIX=$HOME/.local/share/wineprefixes/foobar
.TP .TP
.B .B
settings list annihilate
list verbs in category 'settings' Delete ALL DATA AND APPLICATIONS INSIDE THIS WINEPREFIX
.PP .PP
.SH EXAMPLES .SH EXAMPLES
......
...@@ -24,8 +24,8 @@ w_die() { ...@@ -24,8 +24,8 @@ w_die() {
w_try() { w_try() {
"$@" "$@"
status=$? status=$?
if test $status -ne 0; then if test ${status} -ne 0; then
w_die "Note: command $* returned status $status. Aborting." w_die "Note: command $* returned status ${status}. Aborting."
fi fi
} }
...@@ -47,14 +47,14 @@ trap 'rm -fr "$temp"' EXIT ...@@ -47,14 +47,14 @@ trap 'rm -fr "$temp"' EXIT
# tests using bashate # tests using bashate
test_bashate() { test_bashate() {
if [ ! -x "$(command -v bashate 2>/dev/null)" ] && [ "$TRAVIS_OS_NAME" = "osx" ]; then if [ ! -x "$(command -v bashate 2>/dev/null)" ] && [ "${TRAVIS_OS_NAME}" = "osx" ]; then
echo "On OSX and bashate not available, skipping." echo "On OSX and bashate not available, skipping."
return return
else else
bashate="$(command -v bashate)" bashate="$(command -v bashate)"
#echo "======================== Begin bashate version info ===========================" #echo "======================== Begin bashate version info ==========================="
"$bashate" --help > /dev/null || w_die "bashate must be installed!" "${bashate}" --help > /dev/null || w_die "bashate must be installed!"
## bashate doesn't have a --version option (as of bashate-0.3.1) ## bashate doesn't have a --version option (as of bashate-0.3.1)
#"$bashate" --version #"$bashate" --version
#echo "======================== End bashate version info ===========================" #echo "======================== End bashate version info ==========================="
...@@ -65,21 +65,21 @@ test_bashate() { ...@@ -65,21 +65,21 @@ test_bashate() {
# E010=do/while same line (in some embedded perl in winetricks) # E010=do/while same line (in some embedded perl in winetricks)
# E044=Use [[ for non-POSIX comparisions # E044=Use [[ for non-POSIX comparisions
echo "Checking ${shellscript} with bashate:" echo "Checking ${shellscript} with bashate:"
w_try "$bashate" -i E006,E010,E044 "${shellscript}" w_try "${bashate}" -i E006,E010,E044 "${shellscript}"
fi fi
} }
# tests using checkbashisms # tests using checkbashisms
test_checkbashisms() { test_checkbashisms() {
if [ ! -x "$(command -v checkbashisms 2>/dev/null)" ] && [ "$TRAVIS_OS_NAME" = "osx" ]; then if [ ! -x "$(command -v checkbashisms 2>/dev/null)" ] && [ "${TRAVIS_OS_NAME}" = "osx" ]; then
echo "On OSX and checkbashisms not available, skipping." echo "On OSX and checkbashisms not available, skipping."
return return
else else
checkbashisms="$(command -v checkbashisms)" checkbashisms="$(command -v checkbashisms)"
echo "======================== Begin checkbashisms version info ===========================" echo "======================== Begin checkbashisms version info ==========================="
"$checkbashisms" --help > /dev/null || w_die "checkbashisms must be installed!" "${checkbashisms}" --help > /dev/null || w_die "checkbashisms must be installed!"
"$checkbashisms" --version "${checkbashisms}" --version
echo "======================== End checkbashisms version info ===========================" echo "======================== End checkbashisms version info ==========================="
# Check if checkbashisms supports `command -v`. If not, warn, or if on travis, patch it: # Check if checkbashisms supports `command -v`. If not, warn, or if on travis, patch it:
...@@ -88,12 +88,12 @@ test_checkbashisms() { ...@@ -88,12 +88,12 @@ test_checkbashisms() {
command -v grep command -v grep
_EOF _EOF
if ! "$checkbashisms" --posix "${temp}/command.sh"; then if ! "${checkbashisms}" --posix "${temp}/command.sh"; then
echo "Use a sed expression, to add checkbashisms support for 'command -v', based on the patch from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=733511" echo "Use a sed expression, to add checkbashisms support for 'command -v', based on the patch from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=733511"
echo "Creating a copy of the checkbashisms script, in ${temp}, to workaround this issue" echo "Creating a copy of the checkbashisms script, in ${temp}, to workaround this issue"
# /usr/bin/ (or /usr/local/bin on OSX) isn't writable on Travis, so we have to patch it in /tmp and use that: # /usr/bin/ (or /usr/local/bin on OSX) isn't writable on Travis, so we have to patch it in /tmp and use that:
( (
sed -e '/qr'\''command\\s+\-\[\^p\]\\s'\''/ { ' -e 's|\[\^p\]|[^pvV]|' -e 's| \-p>| -p/-v/-V>|' -e '}' "$checkbashisms" > "${temp}/checkbashisms.patched" && \ sed -e '/qr'\''command\\s+\-\[\^p\]\\s'\''/ { ' -e 's|\[\^p\]|[^pvV]|' -e 's| \-p>| -p/-v/-V>|' -e '}' "${checkbashisms}" > "${temp}/checkbashisms.patched" && \
chmod +x "${temp}/checkbashisms.patched" chmod +x "${temp}/checkbashisms.patched"
) )
checkbashisms="${temp}/checkbashisms.patched" checkbashisms="${temp}/checkbashisms.patched"
...@@ -109,19 +109,19 @@ sleep 5 & spid="$!" ...@@ -109,19 +109,19 @@ sleep 5 & spid="$!"
kill -HUP \$spid kill -HUP \$spid
_EOF _EOF
if ! "$checkbashisms" --posix "${temp}/kill.sh"; then if ! "${checkbashisms}" --posix "${temp}/kill.sh"; then
echo "Disabling the kill -signal warning" echo "Disabling the kill -signal warning"
echo "Creating a copy of the checkbashisms script, in ${temp}, to workaround this issue" echo "Creating a copy of the checkbashisms script, in ${temp}, to workaround this issue"
# /usr/bin/ (or /usr/local/bin on OSX) isn't writable on Travis, so we have to patch it in /tmp and use that: # /usr/bin/ (or /usr/local/bin on OSX) isn't writable on Travis, so we have to patch it in /tmp and use that:
( (
sed -e '/bashisms.*kill/d' "$checkbashisms" > "${temp}/checkbashisms.patched.kill" && \ sed -e '/bashisms.*kill/d' "${checkbashisms}" > "${temp}/checkbashisms.patched.kill" && \
chmod +x "${temp}/checkbashisms.patched.kill" chmod +x "${temp}/checkbashisms.patched.kill"
) )
checkbashisms="${temp}/checkbashisms.patched.kill" checkbashisms="${temp}/checkbashisms.patched.kill"
fi fi
echo "Checking ${shellscript} for bashisms:" echo "Checking ${shellscript} for bashisms:"
w_try "$checkbashisms" --posix "${shellscript}" w_try "${checkbashisms}" --posix "${shellscript}"
fi fi
} }
...@@ -152,19 +152,19 @@ test_formatting() { ...@@ -152,19 +152,19 @@ test_formatting() {
# tests using shellcheck # tests using shellcheck
test_shellcheck() { test_shellcheck() {
if [ ! -x "$(command -v shellcheck 2>/dev/null)" ] && [ "$TRAVIS_OS_NAME" = "osx" ]; then if [ ! -x "$(command -v shellcheck 2>/dev/null)" ] && [ "${TRAVIS_OS_NAME}" = "osx" ]; then
echo "On OSX and shellcheck not available, skipping." echo "On OSX and shellcheck not available, skipping."
return return
else else
shellcheck="$(command -v shellcheck)" shellcheck="$(command -v shellcheck)"
echo "======================== Begin shellcheck version info ===========================" echo "======================== Begin shellcheck version info ==========================="
"$shellcheck" --version > /dev/null || w_die "shellcheck must be installed!" "${shellcheck}" --version > /dev/null || w_die "shellcheck must be installed!"
"$shellcheck" --version "${shellcheck}" --version
echo "======================== End shellcheck version info ===========================" echo "======================== End shellcheck version info ==========================="
echo "Checking ${shellscript} with shellcheck:" echo "Checking ${shellscript} with shellcheck:"
w_try "$shellcheck" -s sh "${shellscript}" w_try "${shellcheck}" -s sh "${shellscript}"
fi fi
} }
...@@ -186,7 +186,7 @@ test_travis_yml() { ...@@ -186,7 +186,7 @@ test_travis_yml() {
else else
yq="$(command -v yq)" yq="$(command -v yq)"
if [ -n "$yq" ]; then if [ -n "${yq}" ]; then
echo "yq available, validating .travis.yml" echo "yq available, validating .travis.yml"
yq . .travis.yml || true yq . .travis.yml || true
else else
...@@ -220,7 +220,7 @@ main() { ...@@ -220,7 +220,7 @@ main() {
test_travis_yml test_travis_yml
# Generic shellscript checks: # Generic shellscript checks:
for shellscript in $files_to_check; do for shellscript in ${files_to_check}; do
test_formatting test_formatting
test_bashate test_bashate
test_checkbashisms test_checkbashisms
......
...@@ -19,14 +19,14 @@ outdir="$(mktemp -d "${TMPDIR:-/tmp}/winetricks-test.XXXXXXXX")" ...@@ -19,14 +19,14 @@ outdir="$(mktemp -d "${TMPDIR:-/tmp}/winetricks-test.XXXXXXXX")"
# Note: skips dotnet20sdk, which is broken AF # Note: skips dotnet20sdk, which is broken AF
dotnet_verbs="$(./src/winetricks dlls list | grep ^dotnet | grep -v -e sdk -e verifier | cut -d ' ' -f1)" dotnet_verbs="$(./src/winetricks dlls list | grep ^dotnet | grep -v -e sdk -e verifier | cut -d ' ' -f1)"
for verb1 in $dotnet_verbs; do for verb1 in ${dotnet_verbs}; do
for verb2 in $dotnet_verbs; do for verb2 in ${dotnet_verbs}; do
if [ "$verb1" = "$verb2" ]; then if [ "${verb1}" = "${verb2}" ]; then
continue continue
fi fi
combo="${verb1}-${verb2}" combo="${verb1}-${verb2}"
case "$combo" in case "${combo}" in
dotnet11*-dotnet20|dotnet11*-dotnet30*|dotnet11*-dotnet35*) dotnet11*-dotnet20|dotnet11*-dotnet30*|dotnet11*-dotnet35*)
echo "Skipping, has a popup that needs to be automated away in -q mode (but fails anyway, so not worth it)"; echo "Skipping, has a popup that needs to be automated away in -q mode (but fails anyway, so not worth it)";
echo "${combo} skipped" | tee -a "${outdir}/statuslog.txt"; echo "${combo} skipped" | tee -a "${outdir}/statuslog.txt";
...@@ -36,11 +36,11 @@ for verb1 in $dotnet_verbs; do ...@@ -36,11 +36,11 @@ for verb1 in $dotnet_verbs; do
export WINEPREFIX="${outdir}/prefix-${combo}" export WINEPREFIX="${outdir}/prefix-${combo}"
wineserver -k wineserver -k
./src/winetricks -q --force --verify "$verb1" "$verb2" 2>&1 | tee -a "${outdir}/${combo}.txt" ./src/winetricks -q --force --verify "${verb1}" "${verb2}" 2>&1 | tee -a "${outdir}/${combo}.txt"
status="$?" status="$?"
echo "$combo exited $status" 2>&1 | tee -a "${outdir}/${combo}.txt" echo "${combo} exited ${status}" 2>&1 | tee -a "${outdir}/${combo}.txt"
echo "$combo exited $status" 2>&1 | tee -a "${outdir}/statuslog.txt" echo "${combo} exited ${status}" 2>&1 | tee -a "${outdir}/statuslog.txt"
rm -rf "$WINEPREFIX" rm -rf "${WINEPREFIX}"
done done
done done
...@@ -18,23 +18,23 @@ ...@@ -18,23 +18,23 @@
# automate non -q verbs with autohotkey # automate non -q verbs with autohotkey
# Override this if you want to put the work area on a different disk # Override this if you want to put the work area on a different disk
WINE_PREFIXES=${WINE_PREFIXES:-$HOME/winetrickstest-prefixes} WINE_PREFIXES=${WINE_PREFIXES:-${HOME}/winetrickstest-prefixes}
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}" XDG_CACHE_HOME="${XDG_CACHE_HOME:-${HOME}/.cache}"
cache="$XDG_CACHE_HOME/winetricks" cache="${XDG_CACHE_HOME}/winetricks"
#set -e #set -e
set -x set -x
if [ -f src/winetricks ] ; then if [ -f src/winetricks ] ; then
TOP="$PWD" TOP="${PWD}"
shwinetricks="${PWD}/src/winetricks" shwinetricks="${PWD}/src/winetricks"
elif [ -f ../src/winetricks ] ; then elif [ -f ../src/winetricks ] ; then
# realpath isn't available on OSX, use a subshell instead: # realpath isn't available on OSX, use a subshell instead:
TOP="$(cd .. && echo "$PWD")" TOP="$(cd .. && echo "${PWD}")"
shwinetricks="${TOP}/src/winetricks" shwinetricks="${TOP}/src/winetricks"
elif [ -f ../../src/winetricks ] ; then elif [ -f ../../src/winetricks ] ; then
# realpath isn't available on OSX, use a subshell instead: # realpath isn't available on OSX, use a subshell instead:
TOP="$(cd ../.. && echo "$PWD")" TOP="$(cd ../.. && echo "${PWD}")"
shwinetricks="${TOP}/src/winetricks" shwinetricks="${TOP}/src/winetricks"
else else
echo "Running from unknown directory. Exiting" echo "Running from unknown directory. Exiting"
...@@ -58,10 +58,10 @@ if [ "$1" = "check-deps" ] ; then ...@@ -58,10 +58,10 @@ if [ "$1" = "check-deps" ] ; then
# Using an environmental variable rather than a CLI option # Using an environmental variable rather than a CLI option
# so it doesn't need extra handling/targets in Makefile # so it doesn't need extra handling/targets in Makefile
elif [ -n "$WINETRICKS_ENABLE_KCOV" ] ; then elif [ -n "${WINETRICKS_ENABLE_KCOV}" ] ; then
KCOV_RESULTS="${outputdir}/kcov-results" KCOV_RESULTS="${outputdir}/kcov-results"
rm -rf "$KCOV_RESULTS" rm -rf "${KCOV_RESULTS}"
mkdir -p "$KCOV_RESULTS" mkdir -p "${KCOV_RESULTS}"
# kcov --kcov-options output-dir testscript --test-script-args # kcov --kcov-options output-dir testscript --test-script-args
# I think kcov lets you append results, if not we may have to use separate for each invocation then combine at the end # I think kcov lets you append results, if not we may have to use separate for each invocation then combine at the end
...@@ -70,7 +70,7 @@ elif [ -n "$WINETRICKS_ENABLE_KCOV" ] ; then ...@@ -70,7 +70,7 @@ elif [ -n "$WINETRICKS_ENABLE_KCOV" ] ; then
# Previously, winetricks-test used `$WINETRICKS`. That fails for kcov, which # Previously, winetricks-test used `$WINETRICKS`. That fails for kcov, which
# then tracks bash itself and not winetricks. `${shwinetricks}` works fine. # then tracks bash itself and not winetricks. `${shwinetricks}` works fine.
WINETRICKS="kcov --configure=bash-use-basic-parser=1 $KCOV_RESULTS \"${shwinetricks}\"" WINETRICKS="kcov --configure=bash-use-basic-parser=1 ${KCOV_RESULTS} \"${shwinetricks}\""
#WINETRICKS="kcov --configure=bash-use-basic-parser=1 $KCOV_RESULTS-$(date +%k-%M-%S) \"${shwinetricks}\"" #WINETRICKS="kcov --configure=bash-use-basic-parser=1 $KCOV_RESULTS-$(date +%k-%M-%S) \"${shwinetricks}\""
else else
WINETRICKS="${shwinetricks}" WINETRICKS="${shwinetricks}"
...@@ -87,40 +87,42 @@ export WINETRICKS_SUPER_QUIET ...@@ -87,40 +87,42 @@ export WINETRICKS_SUPER_QUIET
# verbs known to not work in -q mode yet # verbs known to not work in -q mode yet
BLACKLIST="dx8sdk|kde|psdk2003|psdkwin7" BLACKLIST="dx8sdk|kde|psdk2003|psdkwin7"
# verbs that hang in -q because of simple problem we should work around soon # verbs that hang in -q because of simple problem we should work around soon
BLACKLIST="$BLACKLIST|vc2005trial" BLACKLIST="${BLACKLIST}|vc2005trial"
# verbs that are too slow # verbs that are too slow
BLACKLIST="$BLACKLIST|bfbc2|dxsdk_nov2006|dxsdk_jun2010" BLACKLIST="${BLACKLIST}|dxsdk_nov2006|dxsdk_jun2010"
# steam verbs I don't have
BLACKLIST="$BLACKLIST|borderlands|supermeatboy|trine"
# broken http://bugs.winehq.org/show_bug.cgi?id=26411:
BLACKLIST="$BLACKLIST|mfsxde|mfsx_demo"
# hang lately, probably ui changes in install process
BLACKLIST="$BLACKLIST|bioshock2"
# broken/flaky, http://bugs.winehq.org/show_bug.cgi?id=26016 # broken/flaky, http://bugs.winehq.org/show_bug.cgi?id=26016
BLACKLIST="$BLACKLIST|xmllite" BLACKLIST="${BLACKLIST}|xmllite"
# redundant metaverbs # redundant metaverbs
BLACKLIST="$BLACKLIST|allcodecs" BLACKLIST="${BLACKLIST}|allcodecs|allfonts|cjkfonts|pptfonts"
# https://bugs.winehq.org/show_bug.cgi?id=16876 # https://bugs.winehq.org/show_bug.cgi?id=16876
BLACKLIST="$BLACKLIST|wmi" BLACKLIST="${BLACKLIST}|wmi"
# These break in combination with sandbox, https://bugs.winehq.org/show_bug.cgi?id=49421
BLACKLIST="${BLACKLIST}|ffdshow|python26|python27"
# Also sandbox, but different bug, https://bugs.winehq.org/show_bug.cgi?id=49550
BLACKLIST="${BLACKLIST}|dirac"
# https://bugs.winehq.org/show_bug.cgi?id=50061 / https://github.com/Winetricks/winetricks/issues/1644
BLACKLIST="${BLACKLIST}|quicktime76"
# https://github.com/Winetricks/winetricks/issues/1638
BLACKLIST="${BLACKLIST}|dxvk_master"
# Travis CI is apparently blocking archive.org, which breaks several verbs: # Travis CI is apparently blocking archive.org, which breaks several verbs:
# https://github.com/travis-ci/travis-ci/issues/6798 # https://github.com/travis-ci/travis-ci/issues/6798
# Blacklist those verbs on those hosts: # Blacklist those verbs on those hosts:
# FIXME: setup another test target for torify, use it to d/l these? # FIXME: setup another test target for torify, use it to d/l these?
ARCHIVE_ORG_BLACKLIST="atmlib|avifil32|cabinet|cmd|comctl32ocx|comdgl32ocx|gmdls|mdac27|mfc40|msflxgrd|mshflxgd" ARCHIVE_ORG_BLACKLIST="atmlib|avifil32|cabinet|cmd|comctl32ocx|comdgl32ocx|gmdls|mdac27|mfc40|msflxgrd|mshflxgd"
ARCHIVE_ORG_BLACKLIST="$ARCHIVE_ORG_BLACKLIST|msls31ms|msmask|msscript|msxml3|pdh|pngfilt|riched30" ARCHIVE_ORG_BLACKLIST="${ARCHIVE_ORG_BLACKLIST}|msls31ms|msmask|msscript|msxml3|pdh|pngfilt|riched30"
ARCHIVE_ORG_BLACKLIST="$ARCHIVE_ORG_BLACKLIST|richtx32|secur32|tabctl32|usp10|" ARCHIVE_ORG_BLACKLIST="${ARCHIVE_ORG_BLACKLIST}|richtx32|secur32|tabctl32|usp10|"
# See https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables # See https://docs.travis-ci.com/user/environment-variables/#Default-Environment-Variables
if [ "$TRAVIS" = "true" ] ; then if [ "${TRAVIS}" = "true" ] ; then
BLACKLIST="$ARCHIVE_ORG_BLACKLIST|$BLACKLIST" BLACKLIST="${ARCHIVE_ORG_BLACKLIST}|${BLACKLIST}"
fi fi
# Tests that fail under Xvfb # Tests that fail under Xvfb
XVFB_DOTNET_BLACKLIST="dotnet11|dotnet11sp1|dotnet20|dotnet20sdk|dotnet20sp1|dotnet30|dotnet40|dotnet46" XVFB_DOTNET_BLACKLIST="dotnet11|dotnet11sp1|dotnet20|dotnet20sdk|dotnet20sp1|dotnet30|dotnet40|dotnet46"
XVFB_BLACKLIST="$XVFB_DOTNET_BLACKLIST|adobeair|binkw32|dirac|directmusic|dxdiag|flash|gdiplus_winxp|gfw|ie6|ie7|ie8" XVFB_BLACKLIST="${XVFB_DOTNET_BLACKLIST}|adobeair|binkw32|dirac|directmusic|dxdiag|flash|gdiplus_winxp|gfw|ie6|ie7|ie8"
XVFB_BLACKLIST="$XVFB_BLACKLIST|jet40|nuget|quicktime72|vcrun2008|vcrun2010|vcrun2012|vcrun2013|vcrun2015" XVFB_BLACKLIST="${XVFB_BLACKLIST}|jet40|nuget|quicktime72|vcrun2008|vcrun2010|vcrun2012|vcrun2013|vcrun2015"
XVFB_BLACKLIST="$XVFB_BLACKLIST|vjrun20|windowscodecs|wmi|wmp9|wmp10|wsh56js|wsh56vb|xmllite|xna31|xna40|xvid" XVFB_BLACKLIST="${XVFB_BLACKLIST}|vjrun20|windowscodecs|wmi|wmp9|wmp10|wsh56js|wsh56vb|xmllite|xna31|xna40|xvid"
failed_verbs="" failed_verbs=""
passes=0 passes=0
...@@ -132,11 +134,11 @@ skips=0 ...@@ -132,11 +134,11 @@ skips=0
# middle of a two day run. # middle of a two day run.
check_deps() { check_deps() {
for tool in time cabextract; do for tool in time cabextract; do
command -v "$tool" >/dev/null 2>&1 command -v "${tool}" >/dev/null 2>&1
ret=$? ret=$?
if [ ! $ret -eq 0 ] ; then if [ ! ${ret} -eq 0 ] ; then
echo "Please install $tool." echo "Please install ${tool}."
exit 1 exit 1
fi fi
done done
...@@ -147,19 +149,29 @@ fail() ...@@ -147,19 +149,29 @@ fail()
echo "FAIL: $*" echo "FAIL: $*"
failed_verbs="${failed_verbs}|$*" failed_verbs="${failed_verbs}|$*"
errors=$((errors + 1)) errors=$((errors + 1))
w_prefix_failed=1
status
} }
pass() pass()
{ {
echo "PASS: $*" echo "PASS: $*"
passes=$((passes + 1)) passes=$((passes + 1))
status
} }
skip() skip()
{ {
echo "SKIP: $*" echo "SKIP: $*"
skipped_verbs="${skipped_verbs}|$*"
skips=$((skips + 1)) skips=$((skips + 1))
was_skipped=1 was_skipped=1
status
}
status()
{
echo "Test in progress. Current status: ${errors} failures, ${passes} successes, ${skips} skipped."
} }
w_die() w_die()
...@@ -168,6 +180,25 @@ w_die() ...@@ -168,6 +180,25 @@ w_die()
exit 1 exit 1
} }
w_remove_prefix()
{
if [ -n "${WINEPREFIX}" ]; then
# Cleanup the prefix, unless $W_OPT_NOCLEAN is set to 1 (to match winetricks)
# AND if there weren't failures to debug:
if [ "${W_OPT_NOCLEAN}" = "1" ]; then
echo "W_OPT_NOCLEAN set to 1, not removing wineprefix ${WINEPREFIX}"
elif [ "${w_prefix_failed}" = "1" ]; then
echo "w_prefix_failed set to 1, not removing wineprefix ${WINEPREFIX}"
elif [ -n "${w_remove_prefix_disable}" ]; then
# Don't remove the prefix yet, as there will be some further checks on the same prefix
echo "prefix removed disabled, not removing wineprefix ${WINEPREFIX}"
else
echo "Removing wineprefix ${WINEPREFIX}"
rm -rf "${WINEPREFIX}"
fi
fi
}
w_time() w_time()
{ {
# OSX time doesn't support -o, so try it first: # OSX time doesn't support -o, so try it first:
...@@ -178,15 +209,15 @@ w_time() ...@@ -178,15 +209,15 @@ w_time()
fi fi
} }
case "$LANG" in case "${LANG}" in
""|"C") echo "Some games won't install in the Posix locale; doing 'export LANG=en_US.UTF-8'" ; export LANG=en_US.UTF-8;; ""|"C") echo "Some games won't install in the Posix locale; doing 'export LANG=en_US.UTF-8'" ; export LANG=en_US.UTF-8;;
esac esac
case "$OS" in case "${OS}" in
"Windows_NT") "Windows_NT")
# Mostly unimplemented... # Mostly unimplemented...
# Cheezy fix for getting rid of double slashes when running cygwin in wine # Cheezy fix for getting rid of double slashes when running cygwin in wine
case "$HOME" in case "${HOME}" in
/) HOME="" ;; /) HOME="" ;;
esac esac
...@@ -201,10 +232,10 @@ case "$OS" in ...@@ -201,10 +232,10 @@ case "$OS" in
# If wineserver is from wine-development set WINE to wine-development. # If wineserver is from wine-development set WINE to wine-development.
# FIXME: get packagers to put wineserver on the path. # FIXME: get packagers to put wineserver on the path.
for x in \ for x in \
"$WINESERVER" \ "${WINESERVER}" \
"${WINE}server" \ "${WINE}server" \
"$(command -v wineserver 2> /dev/null)" \ "$(command -v wineserver 2> /dev/null)" \
"$(dirname $WINE)/server/wineserver" \ "$(dirname "${WINE}")/server/wineserver" \
/usr/lib/wine/wineserver \ /usr/lib/wine/wineserver \
/usr/lib/i386-kfreebsd-gnu/wine/wineserver \ /usr/lib/i386-kfreebsd-gnu/wine/wineserver \
/usr/lib/i386-linux-gnu/wine/wineserver \ /usr/lib/i386-linux-gnu/wine/wineserver \
...@@ -218,8 +249,8 @@ case "$OS" in ...@@ -218,8 +249,8 @@ case "$OS" in
/usr/lib/powerpc-linux-gnu/wine-development/wineserver \ /usr/lib/powerpc-linux-gnu/wine-development/wineserver \
/usr/lib/x86_64-linux-gnu/wine-development/wineserver \ /usr/lib/x86_64-linux-gnu/wine-development/wineserver \
file-not-found; do file-not-found; do
if [ -x "$x" ] ; then if [ -x "${x}" ] ; then
case "$x" in case "${x}" in
/usr/lib/*/wine-development/wineserver) /usr/lib/*/wine-development/wineserver)
if [ -x /usr/bin/wine-development ] ; then if [ -x /usr/bin/wine-development ] ; then
WINE="/usr/bin/wine-development" WINE="/usr/bin/wine-development"
...@@ -230,23 +261,45 @@ case "$OS" in ...@@ -230,23 +261,45 @@ case "$OS" in
fi fi
done done
case "$x" in case "${x}" in
file-not-found) w_die "wineserver not found!" ;; file-not-found) w_die "wineserver not found!" ;;
*) WINESERVER="$x" ;; *) WINESERVER="${x}" ;;
esac esac
;; ;;
esac esac
test_speed() test_speed()
{ {
speed_test="$1"
case "${speed_test}" in
# No wine/WINEPREFIX needed:
list|list-download|list-cached) export _W_wine_not_needed=1;;
# Needs a WINEPREFIX, with some things installed (need at least 5, see list_lines below):
# Note: not using test_command here because that would forcefully override WINEPREFIX
list-installed)
export WINEPREFIX="${WINE_PREFIXES}/test_speed-list-installed"
w_remove_prefix_disable=1
# shellcheck disable=SC2086
${XVFB} ${WINETRICKS} good good good good good || fail "\'${XVFB} ${WINETRICKS} good good good good good\' failed"
;;
*) echo "error: unknown test_speed command '${speed_test}'"; exit 1;;
esac
# shellcheck disable=SC2086 # shellcheck disable=SC2086
if ! w_time $XVFB $WINETRICKS nocrashdialog "$1" > "${outputdir}/foo.log"; then if ! w_time ${XVFB} ${WINETRICKS} "$1" > "${outputdir}/foo.log"; then
fail "winetricks $1 returned status $?" fail "winetricks $1 returned status $?"
else
pass "winetricks $1 returned status $?"
fi fi
# shellcheck disable=SC2046 list_lines="$(wc -l < "${outputdir}/foo.log")"
if [ $(wc -l < "${outputdir}/foo.log") -lt 5 ] ; then if [ "${list_lines}" -lt 5 ] ; then
fail "winetricks $1 returned too few lines" fail "winetricks $1 returned ${list_lines} lines, expected at least 5"
else
pass "winetricks $1 returned ${list_lines} lines"
fi fi
if [ ! -f time.log ] ; then if [ ! -f time.log ] ; then
...@@ -256,12 +309,17 @@ test_speed() ...@@ -256,12 +309,17 @@ test_speed()
seconds=$(awk '/real/ {print $2}' < "${outputdir}/time.log" | sed 's/\..*//') seconds=$(awk '/real/ {print $2}' < "${outputdir}/time.log" | sed 's/\..*//')
fi fi
echo "test_speed: winetricks $1 took $seconds seconds" echo "test_speed: winetricks $1 took ${seconds} seconds"
# Longest runtime as of 11 Dec 2010 is 5 seconds on an e8400 with cygwin # Longest runtime as of 11 Dec 2010 is 5 seconds on an e8400 with cygwin
# shellcheck disable=SC2086 if [ "${seconds}" -gt 7 ] ; then
if [ $seconds -gt 7 ] ; then fail "test_speed: winetricks $1 took ${seconds} seconds"
fail "test_speed: winetricks $1 took $seconds seconds" else
pass "test_speed: winetricks $1 took ${seconds} seconds"
fi fi
unset _W_wine_not_needed
unset w_remove_prefix_disable
w_remove_prefix
} }
# test win32 7-zip fallback # test win32 7-zip fallback
...@@ -295,35 +353,35 @@ test_app() ...@@ -295,35 +353,35 @@ test_app()
# Watch transient disk space # Watch transient disk space
DF_START=$(total_df) DF_START=$(total_df)
if [ -d "$W_CACHE/$app" ] ; then if [ -d "${W_CACHE}/${app}" ] ; then
DU_CACHE_START=$(du -s "$W_CACHE/$app" | awk '{print $1}') DU_CACHE_START=$(du -s "${W_CACHE}/${app}" | awk '{print $1}')
else else
DU_CACHE_START=0 DU_CACHE_START=0
fi fi
touch "${outputdir}/df-daemon" touch "${outputdir}/df-daemon"
(set +x; while test -f "${outputdir}/df-daemon"; do total_df; sleep 1; done ) > "${outputdir}/df-during.log" & (set +x; while test -f "${outputdir}/df-daemon"; do total_df; sleep 1; done ) > "${outputdir}/df-during.log" &
test_command --verify "$app" test_command --verify "${app}"
if [ $was_skipped = 1 ]; then if [ ${was_skipped} = 1 ]; then
skip "post-install file check for skipped verb $app" skip "post-install file check for skipped verb ${app}"
else else
# Post install: # Post install:
# Don't check whether metaverbs are installed # Don't check whether metaverbs are installed
case "$app" in case "${app}" in
allcodecs) ;; allcodecs) ;;
*) *)
# if test was skipped because of wrong arch, don't check for it: # if test was skipped because of wrong arch, don't check for it:
if [ "$archskip" = "1" ]; then if [ "${archskip}" = "1" ]; then
skip "$app was skipped because of wrong prefix arch!" skip "${app} was skipped because of wrong prefix arch!"
return return
fi fi
# no xvfb needed # no xvfb needed
"${shwinetricks}" -q list-installed > "${outputdir}/list-installed.out" DISPLAY="" "${shwinetricks}" -q list-installed > "${outputdir}/list-installed.out"
if ! grep -w "$app" "${outputdir}/list-installed.out"; then if ! grep -w "${app}" "${outputdir}/list-installed.out"; then
fail "test app $app not installed after install?" fail "test app ${app} not installed after install?"
fi fi
;; ;;
...@@ -337,20 +395,14 @@ test_app() ...@@ -337,20 +395,14 @@ test_app()
DF_MIN=$(awk '{ if (min == "" || $1 < min) min=$1; } END {printf "%d\n", min}' < "${outputdir}/df-during.log" ) DF_MIN=$(awk '{ if (min == "" || $1 < min) min=$1; } END {printf "%d\n", min}' < "${outputdir}/df-during.log" )
DF_DIFF=$((DF_START - DF_MIN)) DF_DIFF=$((DF_START - DF_MIN))
TOTAL=$((DF_DIFF + DU_CACHE_START)) TOTAL=$((DF_DIFF + DU_CACHE_START))
echo "test_app: ${app}: max_disk $TOTAL blocks." echo "test_app: ${app}: max_disk ${TOTAL} blocks."
TOTAL_MB=$((TOTAL / 1024)) TOTAL_MB=$((TOTAL / 1024))
mkdir -p "${outputdir}/measurements" mkdir -p "${outputdir}/measurements"
echo "${app}:size_MB=${TOTAL_MB},time_sec=${seconds}" >> "${outputdir}/measurements/$app.dat" echo "${app}:size_MB=${TOTAL_MB},time_sec=${seconds}" >> "${outputdir}/measurements/${app}.dat"
# Cleanup the prefix, unless $W_OPT_NOCLEAN is set to 1 (to match winetricks):
if [ "$W_OPT_NOCLEAN" = "1" ]; then
echo "W_OPT_NOCLEAN set to 1, not removing wineprefix $WINEPREFIX"
else
echo "Removing wineprefix $WINEPREFIX"
# FIXME: for some reason, steam doesn't clean up. $WINESERVER -k doesn't help either
rm -rf "$WINEPREFIX"
fi
fi fi
unset w_remove_prefix_disable
w_remove_prefix
} }
test_command() test_command()
...@@ -358,58 +410,77 @@ test_command() ...@@ -358,58 +410,77 @@ test_command()
archskip=0 archskip=0
command="$*" command="$*"
# will be set by fail() if a prefix has a failure, so that w_remove_prefix() doesn't remove the prefix
unset w_prefix_failed
# Hate to hardcode this, but not a good way to set it from the winetricks side:
case "${command}" in
"--verify bad") EXPECT_FAIL="yes";;
*) :;;
esac
# If _W_wine_not_needed is set, don't fail if wine is missing (used by test_listing()) # If _W_wine_not_needed is set, don't fail if wine is missing (used by test_listing())
# This previously changed spaces to hyphens. Going back to spaces so we test WINEPREFIXes # This previously changed spaces to hyphens. Going back to spaces so we test WINEPREFIXes
# with special characters, to prevent issues like https://github.com/Winetricks/winetricks/issues/995 # with special characters, to prevent issues like https://github.com/Winetricks/winetricks/issues/995
export WINEPREFIX="$WINE_PREFIXES/${command}" export WINEPREFIX="${WINE_PREFIXES}/${command}"
#DRIVE_C="$WINEPREFIX/dosdevices/c:" #DRIVE_C="$WINEPREFIX/dosdevices/c:"
# always use a clean $WINEPREFIX # always use a clean $WINEPREFIX
if [ -d "$WINEPREFIX" ] ; then if [ -d "${WINEPREFIX}" ] ; then
rm -rf "$WINEPREFIX" rm -rf "${WINEPREFIX}"
fi fi
# Isolate us from the user's home directory # Isolate us from the user's home directory
# shellcheck disable=SC2086 # shellcheck disable=SC2086
if [ -z "$_W_wine_not_needed" ]; then if [ -z "${_W_wine_not_needed}" ]; then
$XVFB $WINETRICKS sandbox || fail "\'$XVFB $WINETRICKS sandbox\' failed" # First, make the prefix (without $DISPLAY set).
echo "Installing $command" # This reduces the amount of GUI activity (unless the prefix actually makes a window, which most tests don't).
$XVFB $WINETRICKS --no-isolate -q nocrashdialog "$@" DISPLAY="" "${WINE}" wineboot || fail "\'${WINE} wineboot\' failed"
"${WINESERVER}" -w
${XVFB} ${WINETRICKS} sandbox || fail "\'${XVFB} ${WINETRICKS} sandbox\' failed"
"${WINESERVER}" -w
echo "Installing ${command}"
${XVFB} ${WINETRICKS} --no-isolate -q nocrashdialog "$@"
return=$? return=$?
else else
$XVFB $WINETRICKS --no-isolate -q "$@" DISPLAY="" ${XVFB} ${WINETRICKS} --no-isolate -q "$@"
return=$? return=$?
fi fi
if [ -d "$WINEPREFIX/drive_c/windows/syswow64" ]; then if [ -d "${WINEPREFIX}/drive_c/windows/syswow64" ]; then
WINEARCH="win64" WINEARCH="win64"
else elif [ -d "${WINEPREFIX}/drive_c/windows/system32" ]; then
WINEARCH="win32" WINEARCH="win32"
else
# This happens during, e.g., `winetricks apps list`.
echo "No WINEPREFIX found, not setting WINEARCH"
fi fi
if [ "$return" = "32" ] && [ "$WINEARCH" != "win32" ]; then if [ "${return}" = "32" ] && [ "${WINEARCH}" != "win32" ]; then
skip "$command is not supported on $WINEARCH, requires win32" skip "${command} is not supported on ${WINEARCH}, requires win32"
archskip=1 archskip=1
return return
elif [ "$return" = "64" ] && [ "$WINEARCH" != "win64" ]; then elif [ "${return}" = "64" ] && [ "${WINEARCH}" != "win64" ]; then
skip "$command is not supported on $WINEARCH, requires win64" skip "${command} is not supported on ${WINEARCH}, requires win64"
archskip=1 archskip=1
return return
elif [ "$return" = "99" ]; then elif [ "${return}" = "99" ]; then
skip "$command is known to be broken on this wine version, ignoring" skip "${command} is known to be broken on this wine version, ignoring"
return return
fi fi
if [ "$EXPECT_FAIL" = "yes" ] ; then if [ "${EXPECT_FAIL}" = "yes" ] ; then
# A success is failure: # A success is failure:
if [ "$return" = "0" ] ; then if [ "${return}" = "0" ] ; then
fail "$command succeeded, should have failed" fail "${command} succeeded, should have failed"
else else
pass "test_command $command expected to fail, and did fail!" pass "test_command ${command} expected to fail, and did fail!"
fi fi
else else
if [ "$return" = "0" ] ; then if [ "${return}" = "0" ] ; then
pass "$@" pass "$@"
else else
fail "$@" fail "$@"
...@@ -422,16 +493,20 @@ test_command() ...@@ -422,16 +493,20 @@ test_command()
seconds=$(awk '/real/ {print $2}' < time.log | sed 's/\..*//') seconds=$(awk '/real/ {print $2}' < time.log | sed 's/\..*//')
fi fi
echo "test_app: ${app}: install_time $seconds seconds." echo "test_command: ${app}: install_time ${seconds} seconds."
echo "Checking for dangling processes!" echo "Checking for dangling processes!"
# shellcheck disable=SC2009 # shellcheck disable=SC2009
ps augxw | grep \\.exe ps augxw | grep \\.exe | grep -v grep
if [ -z "$_W_wine_not_needed" ]; then if [ -z "${_W_wine_not_needed}" ]; then
"$WINESERVER" -w "${WINESERVER}" -w
echo "Wineserver done." echo "Wineserver done."
fi fi
w_remove_prefix
unset EXPECT_FAIL
} }
test_custom_verbs() test_custom_verbs()
...@@ -467,30 +542,30 @@ load_false() ...@@ -467,30 +542,30 @@ load_false()
_EOF _EOF
# no xvfb needed # no xvfb needed
$WINETRICKS --no-isolate "${outputdir}/true.verb" ; ret=$? ${WINETRICKS} --no-isolate "${outputdir}/true.verb" ; ret=$?
case $ret in case ${ret} in
0) pass "${outputdir}/true.verb not isolated, as apps passed" ;; 0) pass "${outputdir}/true.verb not isolated, as apps passed" ;;
*) fail "${outputdir}/true.verb not isolated, as apps failed" ;; *) fail "${outputdir}/true.verb not isolated, as apps failed" ;;
esac esac
# no xvfb needed # no xvfb needed
$WINETRICKS --no-isolate "${outputdir}/false.verb" ; ret=$? ${WINETRICKS} --no-isolate "${outputdir}/false.verb" ; ret=$?
case $ret in case ${ret} in
0) fail "false.verb not isolated, as apps worked, should have failed" ;; 0) fail "false.verb not isolated, as apps worked, should have failed" ;;
1) pass "false.verb not isolated, as apps passed" ;; 1) pass "false.verb not isolated, as apps passed" ;;
*) fail "false.verb not isolated, as apps failed in unexpected way" ;; *) fail "false.verb not isolated, as apps failed in unexpected way" ;;
esac esac
# no xvfb needed # no xvfb needed
$WINETRICKS --isolate "${outputdir}/true.verb" ; ret=$? ${WINETRICKS} --isolate "${outputdir}/true.verb" ; ret=$?
case $ret in case ${ret} in
0) pass "${outputdir}/true.verb isolated, as apps passed" ;; 0) pass "${outputdir}/true.verb isolated, as apps passed" ;;
*) fail "${outputdir}/true.verb isolated, as apps failed" ;; *) fail "${outputdir}/true.verb isolated, as apps failed" ;;
esac esac
# no xvfb needed # no xvfb needed
$WINETRICKS --isolate "${outputdir}/false.verb" ; ret=$? ${WINETRICKS} --isolate "${outputdir}/false.verb" ; ret=$?
case $ret in case ${ret} in
0) fail "${outputdir}/false.verb isolated, as apps worked, should have failed" ;; 0) fail "${outputdir}/false.verb isolated, as apps worked, should have failed" ;;
1) pass "${outputdir}/false.verb isolated, as apps passed" ;; 1) pass "${outputdir}/false.verb isolated, as apps passed" ;;
*) fail "${outputdir}/false.verb isolated, as apps failed in unexpected way" ;; *) fail "${outputdir}/false.verb isolated, as apps failed in unexpected way" ;;
...@@ -521,30 +596,30 @@ load_false() ...@@ -521,30 +596,30 @@ load_false()
_EOF _EOF
# no xvfb needed # no xvfb needed
$WINETRICKS --no-isolate "${outputdir}/true.verb" ; ret=$? ${WINETRICKS} --no-isolate "${outputdir}/true.verb" ; ret=$?
case $ret in case ${ret} in
0) pass "true.verb isolated, as dlls passed" ;; 0) pass "true.verb isolated, as dlls passed" ;;
*) fail "true.verb isolated, as dlls failed" ;; *) fail "true.verb isolated, as dlls failed" ;;
esac esac
# no xvfb needed # no xvfb needed
$WINETRICKS --no-isolate "${outputdir}/false.verb" ; ret=$? ${WINETRICKS} --no-isolate "${outputdir}/false.verb" ; ret=$?
case $ret in case ${ret} in
0) fail "${outputdir}/false.verb isolated, as dlls worked, should have failed" ;; 0) fail "${outputdir}/false.verb isolated, as dlls worked, should have failed" ;;
1) pass "${outputdir}/false.verb isolated, as dlls passed" ;; 1) pass "${outputdir}/false.verb isolated, as dlls passed" ;;
*) fail "${outputdir}/false.verb isolated, as dlls failed in unexpected way" ;; *) fail "${outputdir}/false.verb isolated, as dlls failed in unexpected way" ;;
esac esac
# no xvfb needed # no xvfb needed
$WINETRICKS --no-isolate "${outputdir}/true.verb" ; ret=$? ${WINETRICKS} --no-isolate "${outputdir}/true.verb" ; ret=$?
case $ret in case ${ret} in
0) pass "${outputdir}/true.verb isolated, as dlls passed" ;; 0) pass "${outputdir}/true.verb isolated, as dlls passed" ;;
*) fail "${outputdir}/true.verb isolated, as dlls failed" ;; *) fail "${outputdir}/true.verb isolated, as dlls failed" ;;
esac esac
# no xvfb needed # no xvfb needed
$WINETRICKS --no-isolate "${outputdir}/false.verb" ; ret=$? ${WINETRICKS} --no-isolate "${outputdir}/false.verb" ; ret=$?
case $ret in case ${ret} in
0) fail "${outputdir}/false.verb isolated, as dlls worked, should have failed" ;; 0) fail "${outputdir}/false.verb isolated, as dlls worked, should have failed" ;;
1) pass "${outputdir}/false.verb isolated, as dlls passed" ;; 1) pass "${outputdir}/false.verb isolated, as dlls passed" ;;
*) fail "${outputdir}/false.verb isolated, as dlls failed in unexpected way" ;; *) fail "${outputdir}/false.verb isolated, as dlls failed in unexpected way" ;;
...@@ -554,156 +629,112 @@ _EOF ...@@ -554,156 +629,112 @@ _EOF
pass pass
} }
test_dlls() test_category()
{ {
# Test everything list in a particular category (i.e., dlls/fonts/settings/etc.)
category="$1"
if [ -z "$1" ]; then
fail "You must specify a category to test. I.e., one of: $(winetricks list | tr '\n' ' ')"
fi
# no xvfb needed, kcov breaks # no xvfb needed, kcov breaks
"${shwinetricks}" list-manual-download > "${outputdir}/manual.log" "${shwinetricks}" list-manual-download > "${outputdir}/manual.log"
"${shwinetricks}" dlls list | awk '{print $1}' > "${outputdir}/dlls.log" "${shwinetricks}" "${category}" list | awk '{print $1}' > "${outputdir}/${category}.log"
if grep .------------------- "${outputdir}/dlls.log" ; then if grep .------------------- "${outputdir}/${category}.log" ; then
fail "output of dlls list contained garbage" fail "output of ${category} list contained garbage"
exit 1 exit 1
fi fi
sort -u < "${outputdir}/dlls.log" | grep -F -w -v -f "${outputdir}/manual.log" | grep -E -v "$BLACKLIST" > "${outputdir}/dlls.verbs" sort -u < "${outputdir}/${category}.log" | grep -F -w -v -f "${outputdir}/manual.log" | grep -E -v "${BLACKLIST}" > "${outputdir}/${category}.verbs"
if [ ! -f "${outputdir}/dlls.verbs" ] ; then if [ ! -f "${outputdir}/${category}.verbs" ] ; then
w_die "${outputdir}/dlls.verbs doesn't exist? No verbs to test!" w_die "${outputdir}/${category}.verbs doesn't exist? No verbs to test!"
elif [ -f "${outputdir}/dlls.verbs" ] && [ ! -s "${outputdir}/dlls.verbs" ] ; then elif [ -f "${outputdir}/${category}.verbs" ] && [ ! -s "${outputdir}/${category}.verbs" ] ; then
w_die "${outputdir}/dlls.verbs exists, but it is empty" w_die "${outputdir}/${category}.verbs exists, but it is empty"
else else
echo "Testing these verbs:" echo "Testing these verbs:"
cat "${outputdir}/dlls.verbs" cat "${outputdir}/${category}.verbs"
fi fi
while IFS= read -r line; do while IFS= read -r line; do
test_app "$line" test_app "${line}"
done < "${outputdir}/dlls.verbs" done < "${outputdir}/${category}.verbs"
} }
test_dotnet() test_dotnet()
{ {
# verify that each individual installer works: # verify that each individual installer works:
dotnet_verbs="$($WINETRICKS dlls list | grep ^dotnet | grep -v -e sdk -e verifier | cut -d ' ' -f1)" dotnet_verbs="$(${WINETRICKS} dlls list | grep ^dotnet | grep -v -e sdk -e verifier | cut -d ' ' -f1)"
for x in $dotnet_verbs; do for x in ${dotnet_verbs}; do
echo "testing $x" echo "testing ${x}"
test_command --verify "$x" test_command --verify "${x}"
done done
# FIXME: add other possible combinations
# combinations that should work: # combinations that should work:
for combo in "dotnet20 dotnet20sp2"; do for combo in "dotnet20 dotnet20sp2" "dotnet30 dotnet40"; do
# shellcheck disable=SC2086 # shellcheck disable=SC2086
test_command --verify $combo test_command --verify ${combo}
done done
# combinations that should break: # combinations that should break:
for fail_combo in "dotnet20sp2 dotnet20sp1"; do # shellcheck disable=SC2043
for fail_combo in "dotnet20sp2 dotnet20sp1" "dotnet30sp1 dotnet30"; do
# shellcheck disable=SC2086 # shellcheck disable=SC2086
EXPECT_FAIL=yes test_command $fail_combo EXPECT_FAIL=yes test_command ${fail_combo}
done
}
test_install_cached_or_download()
{
# no xvfb needed, kcov breaks
"${shwinetricks}" list-cached list-download > "${outputdir}/ticd.log"
if grep .------------------- ticd.log ; then
fail "output of list-cached list-download contained garbage"
exit 1
fi
sort -u < ticd.log | grep -E -v "$BLACKLIST" > ticd.verbs
if true ; then
# Split into two, only do half
nverbs=$(wc -l < ticd.verbs )
firsthalf=$((nverbs / 2 + 1))
sed "${firsthalf}"',$d' < ticd.verbs > ticd-1.verbs
sed '1,'"${firsthalf}"d < ticd.verbs > ticd-2.verbs
VERBS=$(cat ticd-1.verbs)
else
VERBS=$(cat ticd.verbs)
fi
for a in $VERBS; do
test_app "$a"
done done
# no xvfb needed, kcov breaks
"${shwinetricks}" list-cached | sort > cached.txt
# Verbs that are just wrappers around others don't detect cache/install state yet.
# Verbs that are just informative placeholders don't ever download (gecko).
# And some verbs (gecko110) don't usually install for other reasons.
BLACKLIST_CACHE="allfonts|cjkfonts|allcodecs|gecko|gecko110|fontfix"
grep -E -vw "$BLACKLIST_CACHE" ticd.verbs > download.txt
comm -23 download.txt cached.txt > download-but-not-cached.txt
echo "Supposedly downloadable"
cat download.txt
echo "Cached"
cat cached.txt
echo "Downloadable but not cached"
cat download-but-not-cached.txt
# shellcheck disable=SC2046
if [ $(wc -l < download-but-not-cached.txt) != 0 ] ; then
fail "test_install_cached_or_download: asked to install all downloadable apps, but some not listed as cached afterwards"
cat download-but-not-cached.txt
fi
} }
test_listing() test_listing()
{ {
export _W_wine_not_needed=1 export _W_wine_not_needed=1
W_WINE="$WINE" W_WINE="${WINE}"
# Most options should work with or without WINE available: # Most options should work with or without WINE available:
for category in $("${WINETRICKS}" list); do for category in $("${WINETRICKS}" list); do
export WINE="$W_WINE" export WINE="${W_WINE}"
test_command "$category" list test_command "${category}" list
export WINE=/dev/null export WINE=/dev/null
test_command "$category" list test_command "${category}" list
done done
for hardcoded in list list-cached list-download list-manual-download list-all; do for hardcoded in list list-cached list-download list-manual-download list-all; do
export WINE="$W_WINE" export WINE="${W_WINE}"
test_command $hardcoded test_command ${hardcoded}
export WINE=/dev/null export WINE=/dev/null
test_command $hardcoded test_command ${hardcoded}
done done
# list-installed needs the installed metadata which requires wine/wineprefix info: # list-installed needs the installed metadata which requires wine/wineprefix info:
export WINE="$W_WINE" export WINE="${W_WINE}"
test_command list-installed test_command list-installed
# Testing list-installed without wine is hard. A new prefix won't have anything installed # Testing list-installed without wine is hard. A new prefix won't have anything installed
# and so winetricks bails out before it tries to run w_metadata # and so winetricks bails out before it tries to run w_metadata
# So to truly test we need something installed first, then re-use that prefix with WINE=/dev/null # So to truly test we need something installed first, then re-use that prefix with WINE=/dev/null
unset _W_wine_not_needed unset _W_wine_not_needed
export WINE="$W_WINE" export WINE="${W_WINE}"
test_command mfc42 test_command mfc42
export WINEPREFIX="$WINE_PREFIXES/mfc42" export WINEPREFIX="${WINE_PREFIXES}/mfc42"
export _W_wine_not_needed=1 export _W_wine_not_needed=1
export WINE=/dev/null export WINE=/dev/null
EXPECT_FAIL=yes "$WINETRICKS" -q list-installed EXPECT_FAIL=yes "${WINETRICKS}" -q list-installed
unset _W_wine_not_needed unset _W_wine_not_needed
export WINE="$W_WINE" export WINE="${W_WINE}"
} }
# shellcheck disable=SC2034
test_prefix() test_prefix()
{ {
# Run all this under the WINE_PREFIXES directory # Run all this under the WINE_PREFIXES directory
WT_TEST_PREFIX="${WINE_PREFIXES}/wt-test-prefix" WT_TEST_PREFIX="${WINE_PREFIXES}/wt-test-prefix"
XDG_CACHE_HOME="${WT_TEST_PREFIX}/.cache}" XDG_CACHE_HOME="${WT_TEST_PREFIX}/.cache}"
cache="$XDG_CACHE_HOME/winetricks" cache="${XDG_CACHE_HOME}/winetricks"
rm -rf "$WT_TEST_PREFIX" rm -rf "${WT_TEST_PREFIX}"
testname="test1: WINEPREFIX set, no prefix=" testname="test1: WINEPREFIX set, no prefix="
if HOME="${WT_TEST_PREFIX}/home" WINEPREFIX="${WT_TEST_PREFIX}/test1" WINEDLLOVERRIDES="mshtml,mscoree=disabled" winetricks -q good && test -d "${WT_TEST_PREFIX}/test1/drive_c"; then if HOME="${WT_TEST_PREFIX}/home" WINEPREFIX="${WT_TEST_PREFIX}/test1" WINEDLLOVERRIDES="mshtml,mscoree=disabled" winetricks -q good && test -d "${WT_TEST_PREFIX}/test1/drive_c"; then
pass "${testname} passed" pass "${testname} passed"
...@@ -711,7 +742,7 @@ test_prefix() ...@@ -711,7 +742,7 @@ test_prefix()
fail "${testname} failed" fail "${testname} failed"
fi fi
rm -rf "$WT_TEST_PREFIX" rm -rf "${WT_TEST_PREFIX}"
testname="test2: WINEPREFIX not set, prefix=test2" testname="test2: WINEPREFIX not set, prefix=test2"
if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" winetricks -q prefix=test2 good && test -d "${WT_TEST_PREFIX}/home/.local/share/wineprefixes/test2/drive_c"; then if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" winetricks -q prefix=test2 good && test -d "${WT_TEST_PREFIX}/home/.local/share/wineprefixes/test2/drive_c"; then
pass "${testname} passed" pass "${testname} passed"
...@@ -720,7 +751,7 @@ test_prefix() ...@@ -720,7 +751,7 @@ test_prefix()
fi fi
# prefix= overrules WINEPREFIX: # prefix= overrules WINEPREFIX:
rm -rf "$WT_TEST_PREFIX" rm -rf "${WT_TEST_PREFIX}"
testname="test3: WINEPREFIX=test3, prefix=test3" testname="test3: WINEPREFIX=test3, prefix=test3"
if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" WINEPREFIX="${WT_TEST_PREFIX}/test3" winetricks -q prefix=test3 good && test -d "${WT_TEST_PREFIX}/home/.local/share/wineprefixes/test3/drive_c"; then if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" WINEPREFIX="${WT_TEST_PREFIX}/test3" winetricks -q prefix=test3 good && test -d "${WT_TEST_PREFIX}/home/.local/share/wineprefixes/test3/drive_c"; then
pass "${testname} passed" pass "${testname} passed"
...@@ -730,7 +761,7 @@ test_prefix() ...@@ -730,7 +761,7 @@ test_prefix()
# if both are invalid: # if both are invalid:
# Note: if prefix= is used, ~/.local/share/wineprefixes becomes the prefix. Not sure if that's good or bad, but for now just documenting the behavior: # Note: if prefix= is used, ~/.local/share/wineprefixes becomes the prefix. Not sure if that's good or bad, but for now just documenting the behavior:
rm -rf "$WT_TEST_PREFIX" rm -rf "${WT_TEST_PREFIX}"
testname="test4: WINEPREFIX=/dev/null, prefix=" testname="test4: WINEPREFIX=/dev/null, prefix="
if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" WINEPREFIX="/dev/null" winetricks -q prefix= good && test -d "${WT_TEST_PREFIX}/home/.local/share/wineprefixes/drive_c"; then if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" WINEPREFIX="/dev/null" winetricks -q prefix= good && test -d "${WT_TEST_PREFIX}/home/.local/share/wineprefixes/drive_c"; then
pass "${testname} passed" pass "${testname} passed"
...@@ -739,7 +770,7 @@ test_prefix() ...@@ -739,7 +770,7 @@ test_prefix()
fi fi
# WINEPREFIX is invalid, prefix not used: # WINEPREFIX is invalid, prefix not used:
rm -rf "$WT_TEST_PREFIX" rm -rf "${WT_TEST_PREFIX}"
testname="test5: WINEPREFIX=/dev/null, no prefix" testname="test5: WINEPREFIX=/dev/null, no prefix"
if ! HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" WINEPREFIX="/dev/null" winetricks -q good; then if ! HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" WINEPREFIX="/dev/null" winetricks -q good; then
pass "${testname} did not succeed (as expected)" pass "${testname} did not succeed (as expected)"
...@@ -748,7 +779,7 @@ test_prefix() ...@@ -748,7 +779,7 @@ test_prefix()
fi fi
# if nothing is defined, ~/.wine should be used: # if nothing is defined, ~/.wine should be used:
rm -rf "$WT_TEST_PREFIX" rm -rf "${WT_TEST_PREFIX}"
testname="test6: WINEPREFIX not set, prefix not set" testname="test6: WINEPREFIX not set, prefix not set"
unset WINEPREFIX unset WINEPREFIX
if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" winetricks -q good && test -d "${WT_TEST_PREFIX}/home/.wine/drive_c"; then if HOME="${WT_TEST_PREFIX}/home" WINEDLLOVERRIDES="mshtml,mscoree=disabled" winetricks -q good && test -d "${WT_TEST_PREFIX}/home/.wine/drive_c"; then
...@@ -756,15 +787,21 @@ test_prefix() ...@@ -756,15 +787,21 @@ test_prefix()
else else
fail "${testname} failed" fail "${testname} failed"
fi fi
if [ "${W_OPT_NOCLEAN}" = "1" ]; then
echo "W_OPT_NOCLEAN set to 1, not removing ${WT_TEST_PREFIX}"
else
rm -rf "${WT_TEST_PREFIX}"
fi
} }
test_quick() test_quick()
{ {
echo "warning: quick test takes up around 20GB" echo "warning: quick test takes up around 20GB"
export W_CACHE="$cache" export W_CACHE="${cache}"
# And test all the automatically-downloadable dlls # And test all the automatically-downloadable dlls
test_dlls test_category dlls
# And win32 7zip fallback # And win32 7zip fallback
test_7zip test_7zip
...@@ -778,14 +815,16 @@ test_quick() ...@@ -778,14 +815,16 @@ test_quick()
test_full() { test_full() {
test_quick test_quick
test_category fonts
test_category settings
test_dotnet test_dotnet
test_speed list test_speed list
test_speed list-download test_speed list-download
#test_install_cached_or_download
test_speed list-cached test_speed list-cached
test_speed list-installed test_speed list-installed
test_custom_verbs test_custom_verbs
test_w_compare_wine_version test_w_compare_wine_version
test_windows_versions
} }
test_xvfb() { test_xvfb() {
...@@ -793,12 +832,14 @@ test_xvfb() { ...@@ -793,12 +832,14 @@ test_xvfb() {
w_die "Please install xvfb-run for xvfb tests" w_die "Please install xvfb-run for xvfb tests"
fi fi
BLACKLIST="$BLACKLIST|$XVFB_BLACKLIST" BLACKLIST="${BLACKLIST}|${XVFB_BLACKLIST}"
export BLACKLIST export BLACKLIST
# Not test_quick() since flash fails without proper X, but test_quick() doesn't respect $BLACKLIST # Not test_quick() since flash fails without proper X, but test_quick() doesn't respect $BLACKLIST
# Also, we don't really want to duplicate those tests twice, as this is for TravisCI where time is limited.. # Also, we don't really want to duplicate those tests twice, as this is for TravisCI where time is limited..
test_dlls test_category dlls
test_category fonts
test_category settings
} }
helper_test_w_compare_wine_version() helper_test_w_compare_wine_version()
...@@ -807,7 +848,7 @@ helper_test_w_compare_wine_version() ...@@ -807,7 +848,7 @@ helper_test_w_compare_wine_version()
comparison="$2" # the comparison to make (e.g., ',1.8', '1.9,', or '1.8,1.9') comparison="$2" # the comparison to make (e.g., ',1.8', '1.9,', or '1.8,1.9')
workaround_expected="$3" # should the workaround be executed (yes/no) workaround_expected="$3" # should the workaround be executed (yes/no)
WINETRICKS_WINE_VERSION="$version" WINETRICKS_WINE_VERSION="${version}"
export WINETRICKS_WINE_VERSION export WINETRICKS_WINE_VERSION
if [ "${workaround_expected}" = "yes" ] ; then if [ "${workaround_expected}" = "yes" ] ; then
...@@ -817,10 +858,10 @@ w_metadata test_version settings ...@@ -817,10 +858,10 @@ w_metadata test_version settings
load_test_version() load_test_version()
{ {
# FIXME: w_info/w_die aren't getting through b/c of QUIET? stop using quiet everywhere.. # FIXME: w_info/w_die aren't getting through b/c of QUIET? stop using quiet everywhere..
if w_workaround_wine_bug 99999 "test" "$comparison" ; then if w_workaround_wine_bug 99999 "test" "${comparison}" ; then
w_info "Using w_workaround, expected, version: $WINETRICKS_WINE_VERSION" w_info "Using w_workaround, expected, version: ${WINETRICKS_WINE_VERSION}"
else else
w_die "Not using w_workaround, unexpected, version: $WINETRICKS_WINE_VERSION" w_die "Not using w_workaround, unexpected, version: ${WINETRICKS_WINE_VERSION}"
fi fi
} }
_EOF _EOF
...@@ -830,10 +871,10 @@ w_metadata test_version settings ...@@ -830,10 +871,10 @@ w_metadata test_version settings
load_test_version() load_test_version()
{ {
if w_workaround_wine_bug 99999 "test" "$comparison" ; then if w_workaround_wine_bug 99999 "test" "${comparison}" ; then
w_die "Using w_workaround, unexpected, version: $WINETRICKS_WINE_VERSION" w_die "Using w_workaround, unexpected, version: ${WINETRICKS_WINE_VERSION}"
else else
w_info "Not using w_workaround, expected, version: $WINETRICKS_WINE_VERSION" w_info "Not using w_workaround, expected, version: ${WINETRICKS_WINE_VERSION}"
fi fi
} }
_EOF _EOF
...@@ -842,10 +883,10 @@ else ...@@ -842,10 +883,10 @@ else
fi fi
# no xvfb needed # no xvfb needed
$WINETRICKS -v --no-isolate "${outputdir}/test_version.verb" ; ret=$? ${WINETRICKS} -v --no-isolate "${outputdir}/test_version.verb" ; ret=$?
case $ret in case ${ret} in
0) pass "test_version.verb (version: $version comparison: $comparison expected: $workaround_expected passed" ;; 0) pass "test_version.verb (version: ${version} comparison: ${comparison} expected: ${workaround_expected} passed" ;;
*) fail "test_version.verb (version: $version comparison: $comparison expected: $workaround_expected failed" ;; *) fail "test_version.verb (version: ${version} comparison: ${comparison} expected: ${workaround_expected} failed" ;;
esac esac
} }
...@@ -925,6 +966,18 @@ test_w_compare_wine_version() ...@@ -925,6 +966,18 @@ test_w_compare_wine_version()
# FIXME: there's plenty of room for more tests.. # FIXME: there's plenty of room for more tests..
} }
test_windows_versions()
{
# shellcheck disable=SC2013
for version in $("${WINETRICKS}" settings list | grep 'Windows version' | cut -d ' ' -f1 | grep -v 'winver='); do
# Make sure that changing the Windows version works:
test_command "${version}"
# FIXME: ideally, we'd verify the version here, but that's currently not trivial, see:
# https://bugs.winehq.org/show_bug.cgi?id=49242
done
}
case "$1" in case "$1" in
7zip) check_deps; test_7zip;; 7zip) check_deps; test_7zip;;
check-deps) check_deps ; exit $? ;; check-deps) check_deps ; exit $? ;;
...@@ -935,32 +988,66 @@ case "$1" in ...@@ -935,32 +988,66 @@ case "$1" in
listing) test_listing ;; listing) test_listing ;;
prefix) test_prefix ;; prefix) test_prefix ;;
quick) check_deps && test_quick ;; quick) check_deps && test_quick ;;
windows-versions) test_windows_versions;;
w_compare_wine_version) check_deps && test_w_compare_wine_version ;; w_compare_wine_version) check_deps && test_w_compare_wine_version ;;
xvfb-check) check_deps && XVFB=xvfb-run && export XVFB && test_xvfb ;; xvfb-check) check_deps && XVFB=xvfb-run && export XVFB && test_xvfb ;;
*) echo "Usage: $0 quick|full" ; exit 1 ;; *) echo "Usage: $0 quick|full" ; exit 1 ;;
esac esac
if [ ${errors} = 0 ] && [ ${passes} -gt 0 ] ; then
result="PASS"
if [ "${W_OPT_NOCLEAN}" = "1" ]; then
echo "W_OPT_NOCLEAN set to 1, not removing ${WINE_PREFIXES}"
else
rm -rf "${WINE_PREFIXES}"
fi
else
result="FAIL"
fi
# Turn off set -x so the results are cleaner: # Turn off set -x so the results are cleaner:
set +x set +x
echo "===============================================================" echo "==============================================================="
echo "Test over, $errors failures, $passes successes, $skips skipped." echo "Test over, ${errors} failures, ${passes} successes, ${skips} skipped."
if [ $errors = 0 ] && [ $passes -gt 0 ] ; then echo ${result}
echo PASS if [ ${errors} = 0 ] && [ ${passes} -gt 0 ] ; then
echo "===============================================================" echo "==============================================================="
exit 0 status=0
else else
echo FAIL echo "==============================================================="
echo "Test failures:"
oldifs="$IFS" oldifs="${IFS}"
IFS="|" IFS="|"
for test_failure in $failed_verbs; do
if [ -z "$test_failure" ]; then echo "Test failures:"
for test_failure in ${failed_verbs}; do
if [ -z "${test_failure}" ]; then
: :
fi fi
echo "$test_failure" echo "${test_failure}"
done done
IFS=$oldifs echo
IFS=${oldifs}
status=1
fi
# skips
if [ ${errors} = 0 ] && [ ${passes} -gt 0 ] ; then
echo "===============================================================" echo "==============================================================="
exit 1 oldifs="${IFS}"
IFS="|"
echo "Skipped tests:"
for skipped_test in ${skipped_verbs}; do
if [ -z "${skipped_test}" ]; then
:
fi
echo "${skipped_test}"
done
IFS=${oldifs}
fi fi
echo "==============================================================="
exit ${status}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment