new package: wine-stable (#18866)

Co-authored-by: kawanakaiku <80381779+kawanakaiku@users.noreply.github.com>
This commit is contained in:
Chongyun Lee 2024-01-22 23:17:33 +08:00 committed by GitHub
parent 5d69c8532d
commit 407939c3db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 386 additions and 0 deletions

View File

@ -0,0 +1,141 @@
diff -uNr a/dlls/crypt32/unixlib.c b/dlls/crypt32/unixlib.c
--- a/dlls/crypt32/unixlib.c
+++ b/dlls/crypt32/unixlib.c
@@ -619,6 +619,7 @@
"/usr/local/share/certs/",
"/etc/sfw/openssl/certs",
"/etc/security/cacerts", /* Android */
+ "@TERMUX_PREFIX@/etc/tls" /* Termux */
};
static void load_root_certs(void)
diff -uNr a/dlls/dbghelp/macho_module.c b/dlls/dbghelp/macho_module.c
--- a/dlls/dbghelp/macho_module.c
+++ b/dlls/dbghelp/macho_module.c
@@ -1578,7 +1578,7 @@
{
const WCHAR* fallback = process_getenv(pcs, L"DYLD_FALLBACK_LIBRARY_PATH");
if (!fallback)
- fallback = L"/usr/local/lib:/lib:/usr/lib";
+ fallback = L"@TERMUX_PREFIX@/lib:/usr/local/lib:/lib:/usr/lib";
ret = search_unix_path(p, fallback, macho_load_file_cb, &load_params);
}
if (!ret && p == filename)
diff -uNr a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c
--- a/dlls/dbghelp/module.c
+++ b/dlls/dbghelp/module.c
@@ -671,10 +671,10 @@
fmap_link = HeapAlloc(GetProcessHeap(), 0, sizeof(*fmap_link));
if (!fmap_link) return NULL;
- p = malloc(sizeof(L"/usr/lib/debug/.build-id/") +
+ p = malloc(sizeof(L"@TERMUX_PREFIX@//lib/debug/.build-id/") +
(idlen * 2 + 1) * sizeof(WCHAR) + sizeof(L".debug"));
if (!p) goto fail;
- wcscpy(p, L"/usr/lib/debug/.build-id/");
+ wcscpy(p, L"@TERMUX_PREFIX@//lib/debug/.build-id/");
z = p + wcslen(p);
if (idlen)
{
@@ -778,7 +778,7 @@
if (!ret)
{
dst = HeapAlloc(GetProcessHeap(), 0,
- sizeof(L"/usr/lib/debug/.build-id/") + (3 + filename_len + idlen * 2) * sizeof(WCHAR));
+ sizeof(L"@TERMUX_PREFIX@/lib/debug/.build-id/") + (3 + filename_len + idlen * 2) * sizeof(WCHAR));
if (dst)
{
WCHAR* p;
@@ -788,7 +788,7 @@
* where the alternate file is...
* so try both
*/
- p = memcpy(dst, L"/usr/lib/debug/.build-id/", sizeof(L"/usr/lib/debug/.build-id/"));
+ p = memcpy(dst, L"@TERMUX_PREFIX@/lib/debug/.build-id/", sizeof(L"@TERMUX_PREFIX@/lib/debug/.build-id/"));
p += wcslen(dst);
MultiByteToWideChar(CP_UNIXCP, 0, data, -1, p, filename_len);
ret = image_check_debug_link_gnu_id(dst, fmap_link, id, idlen);
diff -uNr a/dlls/msvcrt/tests/environ.c b/dlls/msvcrt/tests/environ.c
--- a/dlls/msvcrt/tests/environ.c
+++ b/dlls/msvcrt/tests/environ.c
@@ -41,7 +41,8 @@
"/lib/mingw32/3.4.2/;"
"/lib/;"
"/usr/lib/mingw32/3.4.2/;"
- "/usr/lib/";
+ "/usr/lib/;"
+ "@TERMUX_PREFIX@/lib/";
static char ***(__cdecl *p__p__environ)(void);
static WCHAR ***(__cdecl *p__p__wenviron)(void);
diff -uNr a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
--- a/dlls/ntdll/unix/server.c
+++ b/dlls/ntdll/unix/server.c
@@ -1257,10 +1257,10 @@
else
snprintf( tmp + p, sizeof(tmp) - p, "%lx", (unsigned long)ino );
-#ifdef __ANDROID__ /* there's no /tmp dir on Android */
+#if defined(__ANDROID__) && ! defined(__TERMUX__) /* there's no /tmp dir on Android */
asprintf( &dir, "%s/.wineserver/server-%s", config_dir, tmp );
#else
- asprintf( &dir, "/tmp/.wine-%u/server-%s", getuid(), tmp );
+ asprintf( &dir, "@TERMUX_PREFIX@/tmp/.wine-%u/server-%s", getuid(), tmp );
#endif
return dir;
}
diff -uNr a/programs/winebrowser/main.c b/programs/winebrowser/main.c
--- a/programs/winebrowser/main.c
+++ b/programs/winebrowser/main.c
@@ -116,6 +116,7 @@
{
static const WCHAR defaultbrowsers[] =
L"xdg-open\0"
+ "@TERMUX_PREFIX@/bin/open\0"
"/usr/bin/open\0"
"firefox\0"
"konqueror\0"
@@ -141,7 +142,8 @@
static int open_mailto_url( const WCHAR *url )
{
static const WCHAR defaultmailers[] =
- L"/usr/bin/open\0"
+ L"@TERMUX_PREFIX@/bin/open"
+ "/usr/bin/open\0"
"xdg-email\0"
"mozilla-thunderbird\0"
"thunderbird\0"
diff -uNr a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -1708,7 +1708,7 @@
if (_wgetenv( L"XDG_DATA_DIRS" ))
dirs = xwcsdup( _wgetenv( L"XDG_DATA_DIRS" ));
else
- dirs = xwcsdup( L"/usr/local/share/:/usr/share/" );
+ dirs = xwcsdup( L"@TERMUX_PREFIX@/share:/usr/local/share/:/usr/share/" );
ret = add_mimes(xdg_data_dir, mime_types);
if (ret)
diff -uNr a/server/request.c b/server/request.c
--- a/server/request.c
+++ b/server/request.c
@@ -657,15 +657,15 @@
/* create the base directory if needed */
-#ifdef __ANDROID__ /* there's no /tmp dir on Android */
+#if defined(__ANDROID__) && ! defined(__TERMUX__) /* there's no /tmp dir on Android */
len += strlen( config_dir ) + sizeof("/.wineserver");
if (!(server_dir = malloc( len ))) fatal_error( "out of memory\n" );
strcpy( server_dir, config_dir );
strcat( server_dir, "/.wineserver" );
#else
- len += sizeof("/tmp/.wine-") + 12;
+ len += sizeof("@TERMUX_PREFIX@/tmp/.wine-") + 12;
if (!(server_dir = malloc( len ))) fatal_error( "out of memory\n" );
- sprintf( server_dir, "/tmp/.wine-%u", getuid() );
+ sprintf( server_dir, "@TERMUX_PREFIX@/tmp/.wine-%u", getuid() );
#endif
create_dir( server_dir, &st2 );

View File

@ -0,0 +1,30 @@
diff -uNr a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -74,7 +74,7 @@
# define _POSIX_SPAWN_DISABLE_ASLR 0x0100
# endif
#endif
-#ifdef __ANDROID__
+#if defined(__ANDROID__) && ! defined(__TERMUX__)
# include <jni.h>
#endif
@@ -622,7 +622,7 @@
if (!(build_dir = remove_tail( ntdll_dir, "/dlls/ntdll" )))
{
if (!(dll_dir = remove_tail( ntdll_dir, so_dir ))) dll_dir = ntdll_dir;
-#if (defined(__linux__) && !defined(__ANDROID__)) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#if (defined(__linux__) && !(defined(__ANDROID__) && ! defined(__TERMUX__))) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
bin_dir = realpath_dirname( "/proc/self/exe" );
#elif defined (__FreeBSD__) || defined(__DragonFly__)
{
@@ -2108,7 +2108,7 @@
server_init_process_done();
}
-#ifdef __ANDROID__
+#if defined(__ANDROID__) && ! defined(__TERMUX__)
#ifndef WINE_JAVA_CLASS
#define WINE_JAVA_CLASS "org/winehq/wine/WineActivity"

View File

@ -0,0 +1,32 @@
--- a/dlls/ntdll/unix/socket.c
+++ b/dlls/ntdll/unix/socket.c
@@ -54,7 +54,7 @@
# include <linux/types.h>
# endif
# include <linux/ipx.h>
-# ifdef SOL_IPX
+# if defined(SOL_IPX) && !defined(__ANDROID__)
# define HAS_IPX
# endif
#endif
--- a/dlls/ws2_32/unixlib.c
+++ b/dlls/ws2_32/unixlib.c
# include <linux/types.h>
# endif
# include <linux/ipx.h>
-# ifdef SOL_IPX
+# if defined(SOL_IPX) && !defined(__ANDROID__)
# define HAS_IPX
# endif
#endif
--- a/server/sock.c
+++ b/server/sock.c
@@ -71,7 +71,7 @@
# include <linux/types.h>
# endif
# include <linux/ipx.h>
-# ifdef SOL_IPX
+# if defined(SOL_IPX) && !defined(__ANDROID__)
# define HAS_IPX
# endif
#endif

View File

@ -0,0 +1,21 @@
`pthread_mutexattr_setprotocol` is introduced in Android 28.
--- a/dlls/winepulse.drv/pulse.c
+++ b/dlls/winepulse.drv/pulse.c
@@ -217,12 +217,16 @@
static NTSTATUS pulse_process_attach(void *args)
{
+#ifdef __ANDROID__
+ if (1)
+#else
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT);
if (pthread_mutex_init(&pulse_mutex, &attr) != 0)
+#endif
pthread_mutex_init(&pulse_mutex, NULL);
return STATUS_SUCCESS;

View File

@ -0,0 +1,21 @@
--- a/tools/winegcc/winegcc.c.orig
+++ b/tools/winegcc/winegcc.c
@@ -325,8 +325,17 @@
{
if (opts->target_alias)
{
+ if (strstr(opts->target_alias, "android")) {
+ if (strstr(opts->target_alias, "arm")) {
+ str = strmake( "%s24", "armv7a-linux-androideabi" );
+ } else {
+ str = strmake( "%s24", opts->target_alias );
+ }
+ } else {
+ str = strmake( "%s", opts->target_alias );
+ }
strarray_add( &ret, "-target" );
- strarray_add( &ret, opts->target_alias );
+ strarray_add( &ret, str );
}
strarray_add( &ret, "-Wno-unused-command-line-argument" );
strarray_add( &ret, "-fuse-ld=lld" );

View File

@ -0,0 +1,11 @@
--- a/tools/winebuild/utils.c
+++ b/tools/winebuild/utils.c
@@ -293,7 +293,7 @@
struct strarray args = empty_strarray;
const char *file;
unsigned int i;
- int using_cc = 0;
+ int using_cc = 1;
if (cc_command.count)
{

View File

@ -0,0 +1,130 @@
TERMUX_PKG_HOMEPAGE=https://www.winehq.org/
TERMUX_PKG_DESCRIPTION="A compatibility layer for running Windows programs"
TERMUX_PKG_LICENSE="LGPL-2.1"
TERMUX_PKG_LICENSE_FILE="\
LICENSE
LICENSE.OLD
COPYING.LIB"
TERMUX_PKG_MAINTAINER="@termux"
TERMUX_PKG_VERSION=9.0
TERMUX_PKG_SRCURL=https://dl.winehq.org/wine/source/${TERMUX_PKG_VERSION:0:3}/wine-$TERMUX_PKG_VERSION.tar.xz
TERMUX_PKG_SHA256=7cfd090a5395f5b76d95bb5defac8a312c8de4c070c1163b8b58da38330ca6ee
TERMUX_PKG_DEPENDS="fontconfig, freetype, krb5, libandroid-spawn, libc++, libgmp, libgnutls, libxcb, libxcomposite, libxcursor, libxfixes, libxrender, mesa, opengl, pulseaudio, sdl2, vulkan-loader, xorg-xrandr"
TERMUX_PKG_ANTI_BUILD_DEPENDS="vulkan-loader"
TERMUX_PKG_BUILD_DEPENDS="libandroid-spawn-static, vulkan-loader-generic"
TERMUX_PKG_NO_STATICSPLIT=true
TERMUX_PKG_HOSTBUILD=true
TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS="
--without-x
--disable-tests
"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
enable_wineandroid_drv=no
exec_prefix=$TERMUX_PREFIX
--with-wine-tools=$TERMUX_PKG_HOSTBUILD_DIR
--enable-nls
--disable-tests
--without-alsa
--without-capi
--without-coreaudio
--without-cups
--without-dbus
--with-fontconfig
--with-freetype
--without-gettext
--with-gettextpo=no
--without-gphoto
--with-gnutls
--without-gstreamer
--without-inotify
--with-krb5
--with-mingw
--without-netapi
--without-opencl
--with-opengl
--with-osmesa
--without-oss
--without-pcap
--with-pthread
--with-pulse
--without-sane
--with-sdl
--without-udev
--without-unwind
--without-usb
--without-v4l2
--with-vulkan
--with-xcomposite
--with-xcursor
--with-xfixes
--without-xinerama
--with-xinput
--with-xinput2
--with-xrandr
--with-xrender
--without-xshape
--without-xshm
--without-xxf86vm
"
# Enable win64 on 64-bit arches.
if [ "$TERMUX_ARCH_BITS" = 64 ]; then
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --enable-win64"
fi
# Enable new WoW64 support on x86_64.
if [ "$TERMUX_ARCH" = "x86_64" ]; then
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --enable-archs=i386,x86_64"
fi
TERMUX_PKG_BLACKLISTED_ARCHES="arm"
_setup_llvm_mingw_toolchain() {
# LLVM-mingw's version number must not be the same as the NDK's.
local _llvm_mingw_version=16
local _version="20230614"
local _url="https://github.com/mstorsjo/llvm-mingw/releases/download/$_version/llvm-mingw-$_version-ucrt-ubuntu-20.04-x86_64.tar.xz"
local _path="$TERMUX_PKG_CACHEDIR/$(basename $_url)"
local _sha256sum=9ae925f9b205a92318010a396170e69f74be179ff549200e8122d3845ca243b8
termux_download $_url $_path $_sha256sum
local _extract_path="$TERMUX_PKG_CACHEDIR/llvm-mingw-toolchain-$_llvm_mingw_version"
if [ ! -d "$_extract_path" ]; then
mkdir -p "$_extract_path"-tmp
tar -C "$_extract_path"-tmp --strip-component=1 -xf "$_path"
mv "$_extract_path"-tmp "$_extract_path"
fi
export PATH="$PATH:$_extract_path/bin"
}
termux_step_host_build() {
# Setup llvm-mingw toolchain
_setup_llvm_mingw_toolchain
# Make host wine-tools
(unset sudo; sudo apt update; sudo apt install libfreetype-dev:i386 -yqq)
"$TERMUX_PKG_SRCDIR/configure" ${TERMUX_PKG_EXTRA_HOSTBUILD_CONFIGURE_ARGS}
make -j "$TERMUX_MAKE_PROCESSES" __tooldeps__ nls/all
}
termux_step_pre_configure() {
# Setup llvm-mingw toolchain
_setup_llvm_mingw_toolchain
# Fix overoptimization
CPPFLAGS="${CPPFLAGS/-Oz/}"
CFLAGS="${CFLAGS/-Oz/}"
CXXFLAGS="${CXXFLAGS/-Oz/}"
# Disable hardening
CPPFLAGS="${CPPFLAGS/-fstack-protector-strong/}"
CFLAGS="${CFLAGS/-fstack-protector-strong/}"
CXXFLAGS="${CXXFLAGS/-fstack-protector-strong/}"
LDFLAGS="${LDFLAGS/-Wl,-z,relro,-z,now/}"
LDFLAGS+=" -landroid-spawn"
}
termux_step_make_install() {
make -j $TERMUX_MAKE_PROCESSES install
}