diff --git a/susepatches.patch b/susepatches.patch index 3f270b8..5e335ab 100644 --- a/susepatches.patch +++ b/susepatches.patch @@ -1,73 +1,653 @@ -From 329b3307e628f4deec732f4d2261aa8cd0fd81ea Mon Sep 17 00:00:00 2001 -From: Marcus Meissner -Date: Fri, 8 Jul 2011 22:10:36 +0200 -Subject: [PATCH] libv4l: Fixed videodev.h header moving away from glibc to libv4l-devel - ---- - configure.ac | 9 +++++++++ - dlls/qcap/v4l.c | 8 ++++++-- - dlls/qcap/yuv.c | 2 +- - 4 files changed, 23 insertions(+), 6 deletions(-) - diff --git a/configure.ac b/configure.ac -index 0e86713..8df9993 100644 +index ae89108..3085136 100644 --- a/configure.ac +++ b/configure.ac -@@ -651,6 +651,15 @@ AC_CHECK_HEADERS([linux/videodev.h],,, - #include - #endif]) +@@ -42,6 +42,7 @@ AC_ARG_WITH(coreaudio, AS_HELP_STRING([--without-coreaudio],[do not use the Core + AC_ARG_WITH(cups, AS_HELP_STRING([--without-cups],[do not use CUPS])) + AC_ARG_WITH(curses, AS_HELP_STRING([--without-curses],[do not use (n)curses]), + [if test "x$withval" = "xno"; then ac_cv_header_ncurses_h=no; ac_cv_header_curses_h=no; fi]) ++AC_ARG_WITH(dbus, AS_HELP_STRING([--without-dbus],[do not use dbus (dynamic device support)])) + AC_ARG_WITH(fontconfig,AS_HELP_STRING([--without-fontconfig],[do not use fontconfig]), + [if test "x$withval" = "xno"; then ac_cv_header_fontconfig_fontconfig_h=no; fi]) + AC_ARG_WITH(freetype, AS_HELP_STRING([--without-freetype],[do not use the FreeType library])) +@@ -1201,6 +1202,23 @@ fi + WINE_WARNING_WITH(xslt,[test "x$ac_cv_lib_soname_xslt" = "x"], + [libxslt ${notice_platform}development files not found, xslt won't be supported.]) -+AC_CHECK_HEADERS([libv4l1-videodev.h],,, -+[#ifdef HAVE_SYS_TIME_H -+#include -+#endif -+#include -+#ifdef HAVE_ASM_TYPES_H -+#include -+#endif]) ++dnl **** Check for libdbus **** ++AC_SUBST(DBUSINCL,"") ++if test "x$with_dbus" != "xno" ++then ++ ac_save_CPPFLAGS="$CPPFLAGS" ++ if test "$PKG_CONFIG" != "false" ++ then ++ ac_dbus_libs="`$PKG_CONFIG --libs dbus-1 2>/dev/null`" ++ ac_dbus_cflags="`$PKG_CONFIG --cflags dbus-1 2>/dev/null`" ++ CPPFLAGS="$CPPFLAGS $ac_dbus_cflags" ++ fi ++ AC_CHECK_HEADER(dbus/dbus.h, ++ [WINE_CHECK_SONAME(dbus-1,dbus_bus_get,[DBUSINCL="$ac_dbus_cflags"],,[$ac_dbus_libs])]) + - dnl Check for broken kernel header that doesn't define __user - AC_CHECK_HEADERS([linux/capi.h],,,[#define __user]) ++ CPPFLAGS="$ac_save_CPPFLAGS" ++fi ++ + dnl **** Check for libhal **** + AC_SUBST(HALINCL,"") + if test "x$with_hal" != "xno" +@@ -1221,7 +1239,7 @@ then + fi + CPPFLAGS="$ac_save_CPPFLAGS" + fi +-WINE_NOTICE_WITH(hal,[test "x$ac_cv_lib_soname_hal" = "x" -a "x$ac_cv_header_DiskArbitration_DiskArbitration_h" != "xyes"], ++WINE_NOTICE_WITH(hal,[test "x$ac_cv_lib_soname_hal" = "x" -a "x$ac_cv_lib_soname_dbus_1" = "x" -a "x$ac_cv_header_DiskArbitration_DiskArbitration_h" != "xyes"], + [libhal/libdbus ${notice_platform}development files not found, no dynamic device support.]) -diff --git a/dlls/qcap/v4l.c b/dlls/qcap/v4l.c -index fadcd49..0d35cfe 100644 ---- a/dlls/qcap/v4l.c -+++ b/dlls/qcap/v4l.c -@@ -63,7 +63,11 @@ - #include - #endif - #ifdef HAVE_LINUX_VIDEODEV_H --#include -+# include -+#else -+# ifdef HAVE_LIBV4L1_VIDEODEV_H -+# include -+# endif - #endif - #ifdef HAVE_UNISTD_H - #include -@@ -71,7 +75,7 @@ + dnl **** Check for libgnutls **** +diff --git a/dlls/mountmgr.sys/Makefile.in b/dlls/mountmgr.sys/Makefile.in +index 91203e1..f3355e0 100644 +--- a/dlls/mountmgr.sys/Makefile.in ++++ b/dlls/mountmgr.sys/Makefile.in +@@ -2,13 +2,14 @@ MODULE = mountmgr.sys + IMPORTS = uuid advapi32 ntoskrnl.exe + DELAYIMPORTS = user32 + EXTRADLLFLAGS = -Wb,--subsystem,native +-EXTRADEFS = @HALINCL@ ++EXTRADEFS = @HALINCL@ @DBUSINCL@ + EXTRALIBS = @DISKARBITRATIONLIB@ - WINE_DEFAULT_DEBUG_CHANNEL(qcap_v4l); + C_SRCS = \ + device.c \ + diskarb.c \ + hal.c \ +- mountmgr.c ++ mountmgr.c \ ++ udisks.c --#ifdef HAVE_LINUX_VIDEODEV_H -+#if defined(HAVE_LINUX_VIDEODEV_H) || defined(HAVE_LIBV4L1_VIDEODEV_H) + @MAKE_DLL_RULES@ +diff --git a/dlls/mountmgr.sys/mountmgr.c b/dlls/mountmgr.sys/mountmgr.c +index 4e9900f..df0dbd3 100644 +--- a/dlls/mountmgr.sys/mountmgr.c ++++ b/dlls/mountmgr.sys/mountmgr.c +@@ -443,6 +443,8 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path ) + RtlInitUnicodeString( &nameW, harddiskW ); + status = IoCreateDriver( &nameW, harddisk_driver_entry ); - static typeof(open) *video_open = open; - static typeof(close) *video_close = close; -diff --git a/dlls/qcap/yuv.c b/dlls/qcap/yuv.c -index 608e571..bbc1b50 100644 ---- a/dlls/qcap/yuv.c -+++ b/dlls/qcap/yuv.c -@@ -32,7 +32,7 @@ - #include "wine/debug.h" ++ /* start udisks before hal */ ++ initialize_udisks(); + initialize_hal(); + initialize_diskarbitration(); - /* This is not used if V4L support is missing */ --#ifdef HAVE_LINUX_VIDEODEV_H -+#if defined(HAVE_LINUX_VIDEODEV_H) || defined(HAVE_LIBV4L1_VIDEODEV_H) +diff --git a/dlls/mountmgr.sys/mountmgr.h b/dlls/mountmgr.sys/mountmgr.h +index a47a3e3..7d07b45 100644 +--- a/dlls/mountmgr.sys/mountmgr.h ++++ b/dlls/mountmgr.sys/mountmgr.h +@@ -35,6 +35,7 @@ + #define WINE_MOUNTMGR_EXTENSIONS + #include "ddk/mountmgr.h" - WINE_DEFAULT_DEBUG_CHANNEL(qcap); ++extern void initialize_udisks(void) DECLSPEC_HIDDEN; + extern void initialize_hal(void) DECLSPEC_HIDDEN; + extern void initialize_diskarbitration(void) DECLSPEC_HIDDEN; --- -1.7.3.4 - +diff --git a/dlls/mountmgr.sys/udisks.c b/dlls/mountmgr.sys/udisks.c +new file mode 100644 +index 0000000..6b7fe13 +--- /dev/null ++++ b/dlls/mountmgr.sys/udisks.c +@@ -0,0 +1,556 @@ ++/* ++ * udisks devices support ++ * ++ * Copyright 2006 Alexandre Julliard ++ * Copyright 2011 Detlef Riekenberg ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++#include "wine/port.h" ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "mountmgr.h" ++#include "winnls.h" ++#include "excpt.h" ++ ++#include "wine/library.h" ++#include "wine/exception.h" ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(mountmgr); ++ ++ ++static char udisks_version[32]; ++ ++#ifdef SONAME_LIBDBUS_1 ++ ++#include ++ ++/* ########## */ ++ ++typedef struct properties_s { ++ CHAR *device_file; ++ CHAR *id_usage; ++ CHAR *id_type; ++ CHAR *id_uuid; ++ BOOL device_is_mounted; ++ BOOL device_is_optical_disc; ++ BOOL device_is_removable; ++ CHAR *device_mount_paths; ++ CHAR *drive_media; ++ CHAR *drive_media_compatibility; ++ int depth; ++ const char * last_name; ++}properties_t; ++ ++static const char *my_match_rule = "interface=org.freedesktop.UDisks"; ++static const char *dest_udisks_device = "org.freedesktop.UDisks.Device"; ++static const char *dest_udisks = "org.freedesktop.UDisks"; ++static const char *path_udisks = "/org/freedesktop/UDisks"; ++static const char *iface_dbus_prop = "org.freedesktop.DBus.Properties"; ++static const char *daemonversion = "DaemonVersion"; ++ ++/* ########## */ ++ ++#define DBUS_FUNCS \ ++ DO_FUNC(dbus_bus_add_match); \ ++ DO_FUNC(dbus_bus_get); \ ++ DO_FUNC(dbus_bus_remove_match); \ ++ DO_FUNC(dbus_connection_pop_message); \ ++ DO_FUNC(dbus_connection_read_write_dispatch); \ ++ DO_FUNC(dbus_connection_send_with_reply_and_block); \ ++ DO_FUNC(dbus_connection_unref); \ ++ DO_FUNC(dbus_error_free); \ ++ DO_FUNC(dbus_error_init); \ ++ DO_FUNC(dbus_error_is_set); \ ++ DO_FUNC(dbus_message_append_args); \ ++ DO_FUNC(dbus_message_get_member); \ ++ DO_FUNC(dbus_message_iter_get_arg_type); \ ++ DO_FUNC(dbus_message_iter_get_basic); \ ++ DO_FUNC(dbus_message_iter_init); \ ++ DO_FUNC(dbus_message_iter_next); \ ++ DO_FUNC(dbus_message_iter_recurse); \ ++ DO_FUNC(dbus_message_new_method_call); \ ++ DO_FUNC(dbus_message_type_to_string); \ ++ DO_FUNC(dbus_message_unref) ++ ++#define DO_FUNC(f) static typeof(f) * p_##f ++DBUS_FUNCS; ++#undef DO_FUNC ++ ++ ++static BOOL load_dbus_functions(void) ++{ ++ void *dbus_handle; ++ char error[128]; ++ ++ if (!(dbus_handle = wine_dlopen(SONAME_LIBDBUS_1, RTLD_NOW|RTLD_GLOBAL, error, sizeof(error)))) ++ goto failed; ++ ++#define DO_FUNC(f) if (!(p_##f = wine_dlsym(RTLD_DEFAULT, #f, error, sizeof(error)))) goto failed ++ DBUS_FUNCS; ++#undef DO_FUNC ++ ++ return TRUE; ++ ++failed: ++ WARN("failed to load udisks support: %s\n", error); ++ return FALSE; ++} ++ ++static GUID *parse_uuid( GUID *guid, const char *str ) ++{ ++ /* standard uuid format */ ++ if (strlen(str) == 36) ++ { ++ UNICODE_STRING strW; ++ WCHAR buffer[39]; ++ ++ if (MultiByteToWideChar( CP_UNIXCP, 0, str, 36, buffer + 1, 36 )) ++ { ++ buffer[0] = '{'; ++ buffer[37] = '}'; ++ buffer[38] = 0; ++ RtlInitUnicodeString( &strW, buffer ); ++ if (!RtlGUIDFromString( &strW, guid )) return guid; ++ } ++ } ++ ++ /* check for xxxx-xxxx format (FAT serial number) */ ++ if (strlen(str) == 9 && str[4] == '-') ++ { ++ memset( guid, 0, sizeof(*guid) ); ++ if (sscanf( str, "%hx-%hx", &guid->Data2, &guid->Data3 ) == 2) return guid; ++ } ++ return NULL; ++} ++ ++static LONG WINAPI assert_fault(EXCEPTION_POINTERS *eptr) ++{ ++ if (eptr->ExceptionRecord->ExceptionCode == EXCEPTION_WINE_ASSERTION) ++ return EXCEPTION_EXECUTE_HANDLER; ++ return EXCEPTION_CONTINUE_SEARCH; ++} ++ ++/* ######################################### ++ * get_properties_from_iter [internal] ++ * ++ * NOTES ++ * format of args in a reply from GetAll: ++ * an ARRAY of DICT_ENTRY ++ * each DICT_ENTRY has a STRING (property name) and a VARIANT (property value) ++ * each VARIANT has a BOOLEAN or a STRING or an ARRAY of STRING or an here unused value ++ */ ++static BOOL get_properties_from_iter(properties_t * p, DBusMessageIter * iter) ++{ ++ DBusMessageIter sub; ++ int arg_type = p_dbus_message_iter_get_arg_type(iter); ++ ++ p->depth++; ++ while (arg_type != DBUS_TYPE_INVALID) ++ { ++ if ((arg_type == DBUS_TYPE_ARRAY) || ++ (arg_type == DBUS_TYPE_DICT_ENTRY) || ++ (arg_type == DBUS_TYPE_VARIANT)) ++ { ++ p_dbus_message_iter_recurse(iter, &sub); ++ if (!get_properties_from_iter(p, &sub)) ++ { ++ p->depth--; ++ return FALSE; ++ } ++ } ++ else if (arg_type == DBUS_TYPE_STRING) ++ { ++ char * data; ++ p_dbus_message_iter_get_basic(iter, &data); ++ if (p->depth == 3) p->last_name = data; ++ else if (p->last_name) ++ { ++ if (!strcmp(p->last_name, "DeviceFile")) ++ p->device_file = data; ++ else if (!strcmp(p->last_name, "DeviceMountPaths")) ++ p->device_mount_paths = data; /* use only the first entry */ ++ else if (!strcmp(p->last_name, "DriveMedia")) ++ p->drive_media = data; ++ else if (!strcmp(p->last_name, "DriveMediaCompatibility")) ++ p->drive_media_compatibility = data; /* use only the first entry */ ++ else if (!strcmp(p->last_name, "IdType")) ++ p->id_type = data; ++ else if (!strcmp(p->last_name, "IdUsage")) ++ p->id_usage = data; ++ else if (!strcmp(p->last_name, "IdUuid")) ++ p->id_uuid = data; ++ ++ p->last_name = NULL; ++ } ++ } ++ else if (arg_type == DBUS_TYPE_BOOLEAN) ++ { ++ dbus_bool_t data; ++ if (p->last_name) ++ { ++ p_dbus_message_iter_get_basic(iter, &data); ++ if (!strcmp(p->last_name, "DeviceIsMounted")) ++ p->device_is_mounted = data; ++ else if (!strcmp(p->last_name, "DeviceIsOpticalDisc")) ++ p->device_is_optical_disc = data; ++ else if (!strcmp(p->last_name, "DeviceIsRemovable")) ++ p->device_is_removable = data; ++ ++ p->last_name = NULL; ++ } ++ } ++ ++ p_dbus_message_iter_next(iter); ++ arg_type = p_dbus_message_iter_get_arg_type(iter); ++ } ++ p->depth--; ++ return TRUE; ++} ++ ++static DBusMessage * get_properties_from_path(properties_t * p, DBusConnection *ctx, const char * path) ++{ ++ DBusMessage *request; ++ DBusMessage *reply = NULL; ++ DBusMessageIter iter; ++ DBusError error; ++ ++ TRACE("(%p, %p, %s)\n", p, ctx, path); ++ ++ memset(p, 0, sizeof(properties_t)); ++ request = p_dbus_message_new_method_call(dest_udisks, path, iface_dbus_prop, "GetAll"); ++ if (request) ++ { ++ if (p_dbus_message_append_args(request, DBUS_TYPE_STRING, &dest_udisks_device, DBUS_TYPE_INVALID)) ++ { ++ p_dbus_error_init(&error); ++ if ((reply = p_dbus_connection_send_with_reply_and_block(ctx, request, -1, &error))) ++ { ++ p_dbus_message_iter_init(reply, &iter); ++ get_properties_from_iter(p, &iter); ++ } ++ else ++ WARN("no reply for %s\n", path); ++ ++ p_dbus_error_free(&error); ++ } ++ else ++ WARN("dbus_message_append_args failed for 'GetAll'\n"); ++ ++ p_dbus_message_unref(request); ++ } ++ return reply; ++} ++ ++static int get_drive_type(properties_t * p) ++{ ++ /* examples: optical_cd, optical_cd_rw, optical_dvd_plus_r_dl */ ++ if (p->device_is_optical_disc && p->drive_media && !memcmp(p->drive_media, "optical_", 8)) ++ { ++ if (!memcmp(p->drive_media + 8, "cd", 2)) ++ return DEVICE_CDROM; ++ else ++ return DEVICE_DVD; ++ } ++ else if (p->drive_media_compatibility && !strcmp(p->drive_media_compatibility, "floppy")) ++ return DEVICE_FLOPPY; ++ else if (!p->device_is_removable && p->id_usage && !strcmp(p->id_usage, "filesystem")) ++ return DEVICE_HARDDISK_VOL; ++ ++ return DEVICE_UNKNOWN; ++} ++ ++static void udisks_add_device(DBusConnection *ctx, const char *path) ++{ ++ DBusMessage *reply; ++ properties_t p; ++ GUID guid; ++ GUID *guid_ptr = NULL; ++ ++ TRACE("%s\n", debugstr_a(path)); ++ ++ reply = get_properties_from_path(&p, ctx, path); ++ if (reply) ++ { ++ int drive_type = get_drive_type(&p); ++ ++ TRACE("DeviceFile: %s\n", p.device_file); ++ TRACE("IdUsage: %s\n", p.id_usage); ++ TRACE("IdType: %s\n", p.id_type); ++ TRACE("IdUuid: %s\n", p.id_uuid); ++ TRACE("DeviceIsMounted: %d (%s)\n", p.device_is_mounted, p.device_is_mounted ? "true" : "false"); ++ TRACE("DeviceIsOpticalDisc: %d (%s)\n", p.device_is_optical_disc, p.device_is_optical_disc ? "true" : "false"); ++ TRACE("DeviceIsRemovable: %d (%s)\n", p.device_is_removable, p.device_is_removable ? "true" : "false"); ++ TRACE("DeviceMountPaths: %s\n", p.device_mount_paths); ++ TRACE("DriveMedia: %s\n", p.drive_media); ++ TRACE("DriveMediaCompatibility: %s\n", p.drive_media_compatibility); ++ TRACE("using drive_type: %d\n", drive_type); ++ ++ if (p.device_is_mounted && p.device_mount_paths) ++ { ++ if (p.id_uuid) ++ guid_ptr = parse_uuid(&guid, p.id_uuid); ++ ++ if (p.device_is_removable) ++ add_dos_device(-1, path, p.device_file, p.device_mount_paths, drive_type, guid_ptr); ++ else if (guid_ptr) ++ add_volume(path, p.device_file, p.device_mount_paths, DEVICE_HARDDISK_VOL, guid_ptr); ++ ++ } ++ p_dbus_message_unref(reply); ++ } ++} ++ ++static void udisks_remove_device(DBusConnection *ctx, const char *path) ++{ ++ TRACE("%s\n", debugstr_a(path)); ++ ++ if (remove_dos_device(-1, path)) ++ remove_volume(path); ++} ++ ++static void udisks_change_device(DBusConnection *ctx, const char *path) ++{ ++ DBusMessage *reply; ++ properties_t p; ++ ++ TRACE("%s\n", debugstr_a(path)); ++ ++ reply = get_properties_from_path(&p, ctx, path); ++ if (reply) ++ { ++ int drive_type = get_drive_type(&p); ++ ++ if (p.device_is_mounted && p.device_mount_paths) ++ udisks_add_device(ctx, path); ++ else ++ { ++ TRACE("DeviceFile: %s\n", p.device_file); ++ TRACE("IdUsage: %s\n", p.id_usage); ++ TRACE("IdType: %s\n", p.id_type); ++ TRACE("IdUuid: %s\n", p.id_uuid); ++ TRACE("DeviceIsMounted: %d (%s)\n", p.device_is_mounted, p.device_is_mounted ? "true" : "false"); ++ TRACE("DeviceIsOpticalDisc: %d (%s)\n", p.device_is_optical_disc, p.device_is_optical_disc ? "true" : "false"); ++ TRACE("DeviceIsRemovable: %d (%s)\n", p.device_is_removable, p.device_is_removable ? "true" : "false"); ++ TRACE("DeviceMountPaths: %s\n", p.device_mount_paths); ++ TRACE("DriveMedia: %s\n", p.drive_media); ++ TRACE("DriveMediaCompatibility: %s\n", p.drive_media_compatibility); ++ TRACE("using drive_type: %d\n", drive_type); ++ ++ udisks_remove_device(ctx, path); ++ } ++ p_dbus_message_unref(reply); ++ } ++} ++ ++/* ########### */ ++ ++static void udisks_get_all_devices(DBusConnection *ctx) ++{ ++ DBusMessage *request; ++ DBusMessage *reply; ++ DBusMessageIter iter; ++ DBusMessageIter sub; ++ DBusError error; ++ int arg_type; ++ ++ request = p_dbus_message_new_method_call(dest_udisks, path_udisks, dest_udisks, "EnumerateDevices"); ++ if (request) ++ { ++ p_dbus_error_init(&error); ++ if ((reply = p_dbus_connection_send_with_reply_and_block(ctx, request, -1, &error))) ++ { ++ p_dbus_message_iter_init(reply, &iter); ++ arg_type = p_dbus_message_iter_get_arg_type(&iter); ++ if (arg_type == DBUS_TYPE_ARRAY) ++ { ++ p_dbus_message_iter_recurse(&iter, &sub); ++ while ((arg_type = p_dbus_message_iter_get_arg_type(&sub)) == DBUS_TYPE_OBJECT_PATH) ++ { ++ char * data; ++ p_dbus_message_iter_get_basic(&sub, &data); ++ udisks_add_device(ctx, data); ++ p_dbus_message_iter_next(&sub); ++ } ++ } ++ else ++ WARN("expected ARRAY, got %c\n", arg_type); ++ ++ p_dbus_message_unref(reply); ++ } ++ p_dbus_error_free(&error); ++ p_dbus_message_unref(request); ++ } ++} ++ ++static void udisks_get_version(DBusConnection *ctx) ++{ ++ DBusMessage *request; ++ DBusMessage *reply; ++ DBusMessageIter iter; ++ DBusMessageIter sub; ++ DBusError error; ++ int arg_type; ++ ++ request = p_dbus_message_new_method_call(dest_udisks, path_udisks, iface_dbus_prop, "Get"); ++ if (request) ++ { ++ if (p_dbus_message_append_args(request, DBUS_TYPE_STRING, &dest_udisks, ++ DBUS_TYPE_STRING, &daemonversion, ++ DBUS_TYPE_INVALID)) ++ { ++ p_dbus_error_init(&error); ++ if ((reply = p_dbus_connection_send_with_reply_and_block(ctx, request, -1, &error))) ++ { ++ p_dbus_message_iter_init(reply, &iter); ++ arg_type = p_dbus_message_iter_get_arg_type(&iter); ++ if (arg_type == DBUS_TYPE_VARIANT) ++ { ++ p_dbus_message_iter_recurse(&iter, &sub); ++ arg_type = p_dbus_message_iter_get_arg_type(&sub); ++ if (arg_type == DBUS_TYPE_STRING) ++ { ++ char * data; ++ p_dbus_message_iter_get_basic(&sub, &data); ++ lstrcpynA(udisks_version, data, sizeof(udisks_version) - 1); ++ TRACE("found udisks daemon %s\n", udisks_version); ++ } ++ else ++ WARN("expected STRING, got %c\n", arg_type); ++ ++ } ++ else ++ WARN("expected VARIANT, got %c\n", arg_type); ++ ++ p_dbus_message_unref(reply); ++ } ++ p_dbus_error_free(&error); ++ } ++ else ++ WARN("dbus_message_append_args failed\n"); ++ ++ p_dbus_message_unref(request); ++ } ++ return; ++ ++} ++ ++static DWORD WINAPI udisks_thread( void *arg ) ++{ ++ DBusConnection *ctx; ++ DBusMessage *msg; ++ DBusMessageIter iter; ++ DBusError error; ++ const char *member; ++ int arg_type; ++ char *data; ++ ++ p_dbus_error_init(&error); ++ ctx = p_dbus_bus_get(DBUS_BUS_SYSTEM, &error); ++ ++ if (!ctx) ++ { ++ WARN("failed to get system dbus connection: %s\n", error.message); ++ p_dbus_error_free(&error); ++ return 1; ++ } ++ ++ p_dbus_bus_add_match(ctx, my_match_rule, &error); ++ if (p_dbus_error_is_set(&error)) ++ { ++ WARN("add dbus filter failed: %s\n", error.message); ++ p_dbus_error_free(&error); ++ p_dbus_connection_unref(ctx); ++ return 1; ++ } ++ ++ udisks_get_version(ctx); ++ ++ if (!*udisks_version) ++ { ++ TRACE("udisks service not available\n"); ++ p_dbus_bus_remove_match(ctx, my_match_rule, NULL); ++ p_dbus_error_free(&error); ++ p_dbus_connection_unref(ctx); ++ return 1; ++ } ++ ++ __TRY ++ { ++ /* retrieve all existing devices */ ++ udisks_get_all_devices(ctx); ++ ++ while (p_dbus_connection_read_write_dispatch(ctx, -1 )) ++ { ++ while ((msg = p_dbus_connection_pop_message(ctx))) ++ { ++ member = p_dbus_message_get_member(msg); ++ p_dbus_message_iter_init(msg, &iter); ++ arg_type = p_dbus_message_iter_get_arg_type(&iter); ++ ++ if (arg_type == DBUS_TYPE_OBJECT_PATH) ++ p_dbus_message_iter_get_basic(&iter, &data); ++ ++ if (!lstrcmpA(member, "DeviceChanged")) ++ udisks_change_device(ctx, data); ++ else if (!lstrcmpA(member, "DeviceAdded")) ++ udisks_add_device(ctx, data); ++ else if (!lstrcmpA(member, "DeviceRemoved")) ++ udisks_remove_device(ctx, data); ++ else if (lstrcmpA(member, "DeviceJobChanged")) ++ WARN("got signal for %s\n", member); ++ ++ p_dbus_message_unref(msg); ++ } ++ } ++ } ++ __EXCEPT(assert_fault) ++ { ++ WARN("dbus assertion failure, disabling UDisks support\n"); ++ return 1; ++ } ++ __ENDTRY; ++ ++ p_dbus_bus_remove_match(ctx, my_match_rule, NULL); ++ p_dbus_error_free(&error); ++ p_dbus_connection_unref(ctx); ++ return 0; ++} ++ ++void initialize_udisks(void) ++{ ++ HANDLE handle = NULL; ++ ++ if (!load_dbus_functions()) return; ++ if (!(handle = CreateThread(NULL, 0, udisks_thread, NULL, 0, NULL))) return; ++ CloseHandle(handle); ++} ++ ++#else /* SONAME_LIBDBUS_1 */ ++ ++void initialize_udisks(void) ++{ ++ TRACE("Skipping, DBUS support not compiled in\n"); ++} ++ ++#endif /* SONAME_LIBDBUS_1 */ diff --git a/wine-1.3.26.tar.bz2 b/wine-1.3.26.tar.bz2 deleted file mode 100644 index 4cdd1f0..0000000 --- a/wine-1.3.26.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:355e1e78924ce93e695b1b6d6b0a0c527802ba583f1b244cfd17bc78b75bfbaf -size 19540693 diff --git a/wine-1.3.27.tar.bz2 b/wine-1.3.27.tar.bz2 new file mode 100644 index 0000000..1642255 --- /dev/null +++ b/wine-1.3.27.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fb4fdf6ae7cbce14ae0e3d3071f3d1ba0c3796a16082b89acd0a4ff75da23ff +size 19567569 diff --git a/wine.changes b/wine.changes index d55bbf8..0efa65b 100644 --- a/wine.changes +++ b/wine.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Wed Aug 31 14:25:25 CEST 2011 - meissner@suse.de + +- Updated to 1.3.27 development snapshot + - Support for multisampling in Direct3D. + - New version of the Gecko engine. + - Improvements to the network proxy handling. + - Better write support in MSXML. + - Side-by-side manifests for built-in libraries. + - Various bug fixes. + ------------------------------------------------------------------- Sat Aug 6 19:15:13 CEST 2011 - meissner@suse.de diff --git a/wine.spec b/wine.spec index 18b8565..6c63f9f 100644 --- a/wine.spec +++ b/wine.spec @@ -34,7 +34,7 @@ BuildRequires: gstreamer-0_10-plugins-base-devel License: LGPLv2.1+ Group: System/Emulators/PC AutoReqProv: on -Version: 1.3.26 +Version: 1.3.27 Release: 1 Summary: An MS Windows Emulator Url: http://www.winehq.com @@ -49,6 +49,8 @@ Source5: ubuntuwine.tar.bz2 # - currently none, but add them here Patch0: susepatches.patch Recommends: wine-gecko wine-mp3 +Conflicts: wine-gecko < 1.3 + %ifarch %ix86 x86_64 Requires: wine-32bit = %version %endif @@ -83,7 +85,12 @@ Group: System/Emulators/PC # requires either 32bit or 64bit wine Requires: wine = %version # lib dependencies that are dynamically loaded -Requires: libXcursor.so.1 libXi.so.6 libXxf86vm.so.1 libXrender.so.1 libXrandr.so.2 libXinerama.so.1 libXcomposite.so.1 libxslt.so.1 libncurses.so.6 libfreetype.so.6 libcrypto.so.1.0.0 libssl.so.1.0.0 libfontconfig.so.1 libcups.so.2 libgnutls.so.26 libpng14.so.14 +Requires: libXcursor.so.1 libXi.so.6 libXxf86vm.so.1 libXrender.so.1 libXrandr.so.2 libXinerama.so.1 libXcomposite.so.1 libxslt.so.1 libncurses.so.6 libfreetype.so.6 libcrypto.so.1.0.0 libssl.so.1.0.0 libfontconfig.so.1 libcups.so.2 libpng14.so.14 +%if 0%{?suse_version} < 1210 +Requires: libgnutls.so.26 +%else +Requires: libgnutls.so.28 +%endif %description 32bit This package contains the 32bit runtime environmnent (libraries, DLLs, EXEs) of Wine. @@ -127,7 +134,7 @@ autoheader -I include cat config.log grep "have_x=yes" config.log || exit 1 -make %{?jobs:-j%jobs} depend +grep SONAME_ config.status make %{?jobs:-j%jobs} all %install