From 4bfe38b885956e2487bec126c54380bdab51dab1 Mon Sep 17 00:00:00 2001 From: akdengi Date: Tue, 24 Dec 2013 21:29:00 +0400 Subject: [PATCH] Update to 1.7.8 --- .abf.yml | 7 +- ...erver-to-process-unsupported-WSAIoct.patch | 84 + ...-an-interface-change-notification-ob.patch | 440 ++++++ ...teractive-test-for-interface-change-.patch | 98 ++ ...-return-security-attributes-with-ext.patch | 499 ++++++ ...curity-attributes-from-parent-direct.patch | 180 +++ ...tring-comparison-with-linguistic-cas.patch | 25 + ...ate-gl_drawable-for-embedded-windows.patch | 25 + ...able-windows-when-they-are-un-mapped.patch | 58 + ...turn-value-of-stub-SetNamedPipeHandl.patch | 44 + ...ests-for-IVMRMonitorConfig-and-IVMRM.patch | 360 +++++ ...Silverlight-problems-when-multiple-m.patch | 35 + wine.rpmlintrc | 3 + wine.spec | 1365 +---------------- 14 files changed, 1941 insertions(+), 1282 deletions(-) create mode 100644 0001-ws2_32-Ask-the-server-to-process-unsupported-WSAIoct.patch create mode 100644 0002-server-Implement-an-interface-change-notification-ob.patch create mode 100644 0003-ws2_32-Add-an-interactive-test-for-interface-change-.patch create mode 100644 0004-server-Store-and-return-security-attributes-with-ext.patch create mode 100644 0005-ntdll-Inherit-security-attributes-from-parent-direct.patch create mode 100644 0006-kernel32-Allow-string-comparison-with-linguistic-cas.patch create mode 100644 0007-winex11-Update-gl_drawable-for-embedded-windows.patch create mode 100644 0008-winex11-Enable-disable-windows-when-they-are-un-mapped.patch create mode 100644 0009-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch create mode 100644 0010-quartz-tests-Add-tests-for-IVMRMonitorConfig-and-IVMRM.patch create mode 100644 0011-quartz-Workaround-Silverlight-problems-when-multiple-m.patch diff --git a/.abf.yml b/.abf.yml index 6c0adbb..9fca3f8 100644 --- a/.abf.yml +++ b/.abf.yml @@ -1,3 +1,6 @@ +removed_sources: + wine-1.7.4.tar.bz2: f3ccfb7a6870311f2d85b1cbbcc1f87df409bb6a sources: - wine-1.5.28.tar.bz2: bc543b215dd25efc7d76c6ffa99672c6e3d15d61 - wine-1.5.28.tar.bz2.sign: 699c8d362d01bf22eb684fac7349ff0635f677d0 + wine-1.7.4.tar.bz2.sign: d60f74a3babd7a0cb5e2a9fd6a0e36e7b06e8768 + wine-1.7.8.tar.bz2: 86de5dd5120e4e3cf2a19b0822250131664b006a + wine-1.7.8.tar.bz2.sign: cdaed82e0dc851d4412a3042e9c0ebefeeee2390 diff --git a/0001-ws2_32-Ask-the-server-to-process-unsupported-WSAIoct.patch b/0001-ws2_32-Ask-the-server-to-process-unsupported-WSAIoct.patch new file mode 100644 index 0000000..f62bbfe --- /dev/null +++ b/0001-ws2_32-Ask-the-server-to-process-unsupported-WSAIoct.patch @@ -0,0 +1,84 @@ +From c1f305f001257ac6bc215abd34c1577e7d9bf7f2 Mon Sep 17 00:00:00 2001 +From: "Erich E. Hoover" +Date: Fri, 4 Oct 2013 08:10:20 -0600 +Subject: ws2_32: Ask the server to process unsupported WSAIoctl operations. + +--- + dlls/ws2_32/socket.c | 47 ++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 44 insertions(+), 3 deletions(-) + +diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c +index 679258b..44a9093 100644 +--- a/dlls/ws2_32/socket.c ++++ b/dlls/ws2_32/socket.c +@@ -3608,6 +3608,36 @@ static const char *debugstr_wsaioctl(DWORD ioctl) + (USHORT)(ioctl & 0xffff)); + } + ++/* do an ioctl call through the server */ ++static DWORD server_ioctl_sock( SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, ++ LPVOID out_buff, DWORD out_size, LPDWORD ret_size, ++ LPWSAOVERLAPPED overlapped, ++ LPWSAOVERLAPPED_COMPLETION_ROUTINE completion ) ++{ ++ HANDLE event = overlapped ? overlapped->hEvent : 0; ++ HANDLE handle = SOCKET2HANDLE( s ); ++ struct ws2_async *wsa; ++ NTSTATUS status; ++ PIO_STATUS_BLOCK io; ++ ++ if (!(wsa = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(*wsa) ))) ++ return WSA_NOT_ENOUGH_MEMORY; ++ wsa->hSocket = handle; ++ wsa->user_overlapped = overlapped; ++ wsa->completion_func = completion; ++ io = (overlapped ? (PIO_STATUS_BLOCK)overlapped : &wsa->local_iosb); ++ ++ status = NtDeviceIoControlFile( handle, event, (PIO_APC_ROUTINE)ws2_async_apc, wsa, io, code, ++ in_buff, in_size, out_buff, out_size ); ++ if (status == STATUS_NOT_SUPPORTED) ++ FIXME("Unsupported ioctl %x (device=%x access=%x func=%x method=%x)\n", ++ code, code >> 16, (code >> 14) & 3, (code >> 2) & 0xfff, code & 3); ++ ++ if (status != STATUS_PENDING) RtlFreeHeap( GetProcessHeap(), 0, wsa ); ++ ++ return NtStatusToWSAError( status ); ++} ++ + /********************************************************************** + * WSAIoctl (WS2_32.50) + * +@@ -3800,9 +3830,8 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID + } + + case WS_SIO_ADDRESS_LIST_CHANGE: +- FIXME("-> SIO_ADDRESS_LIST_CHANGE request: stub\n"); +- /* FIXME: error and return code depend on whether socket was created +- * with WSA_FLAG_OVERLAPPED, but there is no easy way to get this */ ++ TRACE("-> SIO_ADDRESS_LIST_CHANGE request\n"); ++ status = WSAEOPNOTSUPP; /* this operation needs to be handled by the server */ + break; + + case WS_SIO_ADDRESS_LIST_QUERY: +@@ -4045,6 +4074,18 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID + break; + } + ++ if (status == WSAEOPNOTSUPP) ++ { ++ status = server_ioctl_sock(s, code, in_buff, in_size, out_buff, out_size, ret_size, ++ overlapped, completion); ++ if (status != WSAEOPNOTSUPP) ++ { ++ /* overlapped and completion operations will be handled by the server */ ++ completion = NULL; ++ overlapped = NULL; ++ } ++ } ++ + if (completion) + { + FIXME( "completion routine %p not supported\n", completion ); +-- +1.7.9.5 + diff --git a/0002-server-Implement-an-interface-change-notification-ob.patch b/0002-server-Implement-an-interface-change-notification-ob.patch new file mode 100644 index 0000000..202c667 --- /dev/null +++ b/0002-server-Implement-an-interface-change-notification-ob.patch @@ -0,0 +1,440 @@ +From aa5c2e5b4bf9716af3ea2065a3d3de10c840f59b Mon Sep 17 00:00:00 2001 +From: "Erich E. Hoover" +Date: Mon, 18 Nov 2013 17:22:04 -0700 +Subject: server: Implement an interface change notification object. + +--- + server/event.c | 13 +++ + server/named_pipe.c | 13 --- + server/object.h | 1 + + server/sock.c | 289 ++++++++++++++++++++++++++++++++++++++++++++++++++- + 4 files changed, 301 insertions(+), 15 deletions(-) + +diff --git a/server/event.c b/server/event.c +index b8515af..e8a3888 100644 +--- a/server/event.c ++++ b/server/event.c +@@ -124,6 +124,19 @@ struct event *create_event( struct directory *root, const struct unicode_str *na + return event; + } + ++obj_handle_t alloc_wait_event( struct process *process ) ++{ ++ obj_handle_t handle = 0; ++ struct event *event = create_event( NULL, NULL, 0, 1, 0, NULL ); ++ ++ if (event) ++ { ++ handle = alloc_handle( process, event, EVENT_ALL_ACCESS, 0 ); ++ release_object( event ); ++ } ++ return handle; ++} ++ + struct event *get_event_obj( struct process *process, obj_handle_t handle, unsigned int access ) + { + return (struct event *)get_handle_obj( process, handle, access, &event_ops ); +diff --git a/server/named_pipe.c b/server/named_pipe.c +index 4c85104..6ba2145 100644 +--- a/server/named_pipe.c ++++ b/server/named_pipe.c +@@ -587,19 +587,6 @@ static enum server_fd_type pipe_client_get_fd_type( struct fd *fd ) + return FD_TYPE_PIPE; + } + +-static obj_handle_t alloc_wait_event( struct process *process ) +-{ +- obj_handle_t handle = 0; +- struct event *event = create_event( NULL, NULL, 0, 1, 0, NULL ); +- +- if (event) +- { +- handle = alloc_handle( process, event, EVENT_ALL_ACCESS, 0 ); +- release_object( event ); +- } +- return handle; +-} +- + static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data, + int blocking, const void *data, data_size_t size ) + { +diff --git a/server/object.h b/server/object.h +index bb3ff21..bad162f 100644 +--- a/server/object.h ++++ b/server/object.h +@@ -159,6 +159,7 @@ extern struct event *create_event( struct directory *root, const struct unicode_ + const struct security_descriptor *sd ); + extern struct keyed_event *create_keyed_event( struct directory *root, const struct unicode_str *name, + unsigned int attr, const struct security_descriptor *sd ); ++extern obj_handle_t alloc_wait_event( struct process *process ); + extern struct event *get_event_obj( struct process *process, obj_handle_t handle, unsigned int access ); + extern struct keyed_event *get_keyed_event_obj( struct process *process, obj_handle_t handle, unsigned int access ); + extern void pulse_event( struct event *event ); +diff --git a/server/sock.c b/server/sock.c +index 1a3a8f7..4e41b72 100644 +--- a/server/sock.c ++++ b/server/sock.c +@@ -44,11 +44,17 @@ + #include + #include + ++#ifdef HAVE_LINUX_RTNETLINK_H ++# include ++#endif ++ + #include "ntstatus.h" + #define WIN32_NO_STATUS + #include "windef.h" + #include "winternl.h" + #include "winerror.h" ++#define USE_WS_PREFIX ++#include "winsock2.h" + + #include "process.h" + #include "file.h" +@@ -107,8 +113,12 @@ struct sock + struct sock *deferred; /* socket that waits for a deferred accept */ + struct async_queue *read_q; /* queue for asynchronous reads */ + struct async_queue *write_q; /* queue for asynchronous writes */ ++ struct async_queue *ifchange_q; /* queue for interface change notifications */ ++ struct list ifchange_entry; /* entry in ifchange notification list */ + }; + ++static int sock_add_ifchange( struct sock *sock, const async_data_t *async_data ); ++ + static void sock_dump( struct object *obj, int verbose ); + static int sock_signaled( struct object *obj, struct wait_queue_entry *entry ); + static struct fd *sock_get_fd( struct object *obj ); +@@ -117,6 +127,8 @@ static void sock_destroy( struct object *obj ); + static int sock_get_poll_events( struct fd *fd ); + static void sock_poll_event( struct fd *fd, int event ); + static enum server_fd_type sock_get_fd_type( struct fd *fd ); ++static obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async, ++ int blocking, const void *data, data_size_t size ); + static void sock_queue_async( struct fd *fd, const async_data_t *data, int type, int count ); + static void sock_reselect_async( struct fd *fd, struct async_queue *queue ); + static void sock_cancel_async( struct fd *fd, struct process *process, struct thread *thread, client_ptr_t iosb ); +@@ -151,12 +163,15 @@ static const struct fd_ops sock_fd_ops = + sock_poll_event, /* poll_event */ + no_flush, /* flush */ + sock_get_fd_type, /* get_fd_type */ +- default_fd_ioctl, /* ioctl */ ++ sock_ioctl, /* ioctl */ + sock_queue_async, /* queue_async */ + sock_reselect_async, /* reselect_async */ + sock_cancel_async /* cancel_async */ + }; + ++/* only keep one ifchange object around, all sockets waiting for wakeups will look to it */ ++static struct object *ifchange_object = NULL; ++ + + /* Permutation of 0..FD_MAX_EVENTS - 1 representing the order in which + * we post messages if there are multiple events. Used to send +@@ -518,6 +533,39 @@ static enum server_fd_type sock_get_fd_type( struct fd *fd ) + return FD_TYPE_SOCKET; + } + ++obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data, ++ int blocking, const void *data, data_size_t size ) ++{ ++ struct sock *sock = get_fd_user( fd ); ++ obj_handle_t wait_handle = 0; ++ async_data_t new_data; ++ ++ assert( sock->obj.ops == &sock_ops ); ++ ++ if (blocking) ++ { ++ if (!(wait_handle = alloc_wait_event( current->process ))) return 0; ++ new_data = *async_data; ++ new_data.event = wait_handle; ++ async_data = &new_data; ++ } ++ switch(code) ++ { ++ case WS_SIO_ADDRESS_LIST_CHANGE: ++ if (sock_add_ifchange( sock, async_data )) ++ { ++ set_error( STATUS_PENDING ); ++ return wait_handle; ++ } ++ break; ++ default: ++ close_handle( current->process, wait_handle ); ++ return default_fd_ioctl(fd, code, async_data, blocking, data, size); ++ } ++ close_handle( current->process, wait_handle ); ++ return 0; ++} ++ + static void sock_queue_async( struct fd *fd, const async_data_t *data, int type, int count ) + { + struct sock *sock = get_fd_user( fd ); +@@ -587,11 +635,17 @@ static void sock_destroy( struct object *obj ) + + /* FIXME: special socket shutdown stuff? */ + +- if ( sock->deferred ) ++ if (sock->deferred) + release_object( sock->deferred ); + + free_async_queue( sock->read_q ); + free_async_queue( sock->write_q ); ++ if (sock->ifchange_q) ++ { ++ free_async_queue( sock->ifchange_q ); ++ list_remove( &sock->ifchange_entry ); ++ release_object( ifchange_object ); ++ } + if (sock->event) release_object( sock->event ); + if (sock->fd) + { +@@ -618,6 +672,7 @@ static void init_sock(struct sock *sock) + sock->deferred = NULL; + sock->read_q = NULL; + sock->write_q = NULL; ++ sock->ifchange_q = NULL; + memset( sock->errors, 0, sizeof(sock->errors) ); + } + +@@ -906,6 +961,236 @@ static void sock_set_error(void) + set_error( sock_get_ntstatus( errno ) ); + } + ++static void ifchange_dump( struct object *obj, int verbose ); ++static struct fd *ifchange_get_fd( struct object *obj ); ++static void ifchange_destroy( struct object *obj ); ++ ++static int ifchange_get_poll_events( struct fd *fd ); ++static void ifchange_poll_event( struct fd *fd, int event ); ++static void ifchange_reselect_async( struct fd *fd, struct async_queue *queue ); ++ ++struct ifchange ++{ ++ struct object obj; /* object header */ ++ struct fd *fd; /* interface change file descriptor */ ++ struct list sockets; /* list of sockets to send interface change notifications */ ++}; ++ ++static const struct object_ops ifchange_ops = ++{ ++ sizeof(struct ifchange), /* size */ ++ ifchange_dump, /* dump */ ++ no_get_type, /* get_type */ ++ add_queue, /* add_queue */ ++ NULL, /* remove_queue */ ++ NULL, /* signaled */ ++ no_satisfied, /* satisfied */ ++ no_signal, /* signal */ ++ ifchange_get_fd, /* get_fd */ ++ default_fd_map_access, /* map_access */ ++ default_get_sd, /* get_sd */ ++ default_set_sd, /* set_sd */ ++ no_lookup_name, /* lookup_name */ ++ no_open_file, /* open_file */ ++ no_close_handle, /* close_handle */ ++ ifchange_destroy /* destroy */ ++}; ++ ++static const struct fd_ops ifchange_fd_ops = ++{ ++ ifchange_get_poll_events, /* get_poll_events */ ++ ifchange_poll_event, /* poll_event */ ++ NULL, /* flush */ ++ NULL, /* get_fd_type */ ++ NULL, /* ioctl */ ++ NULL, /* queue_async */ ++ ifchange_reselect_async, /* reselect_async */ ++ NULL /* cancel_async */ ++}; ++ ++static int init_ifchange( struct ifchange *ifchange ) ++{ ++#if defined(NETLINK_ROUTE) ++ struct sockaddr_nl addr; ++ int unix_fd; ++ ++ list_init( &ifchange->sockets ); ++ unix_fd = socket( PF_NETLINK, SOCK_RAW, NETLINK_ROUTE ); ++ if (unix_fd == -1) ++ { ++ sock_set_error(); ++ return 0; ++ } ++ fcntl( unix_fd, F_SETFL, O_NONBLOCK ); /* make socket nonblocking */ ++ memset( &addr, 0, sizeof(addr) ); ++ addr.nl_family = AF_NETLINK; ++ addr.nl_groups = RTMGRP_IPV4_IFADDR; ++ /* bind the socket to the special netlink kernel interface */ ++ if (bind( unix_fd, (struct sockaddr *)&addr, sizeof(addr) ) == -1) ++ { ++ sock_set_error(); ++ close( unix_fd ); ++ return 0; ++ } ++ if (!(ifchange->fd = create_anonymous_fd( &ifchange_fd_ops, unix_fd, &ifchange->obj, 0 ))) ++ { ++ close( unix_fd ); ++ return 0; ++ } ++ /* enable read wakeup on the file descriptor */ ++ set_fd_events( ifchange->fd, POLLIN ); ++ return 1; ++#else ++ fprintf(stderr, "Interface change notification is not supported on this platform.\n"); ++ set_error( STATUS_NOT_SUPPORTED ); ++ return 0; ++#endif ++} ++ ++/* create a new ifchange notifier or, if one already exists, reuse the existing one */ ++static struct object *create_ifchange( void ) ++{ ++ struct ifchange *ifchange; ++ ++ /* we only need one of these interface notification objects, all of the sockets dependent upon ++ * it will wake up when a notification event occurs */ ++ if (ifchange_object) ++ return grab_object( ifchange_object ); ++ if (!(ifchange = alloc_object( &ifchange_ops ))) ++ return NULL; ++ if (!init_ifchange( ifchange )) ++ { ++ release_object( ifchange ); ++ return NULL; ++ } ++ ifchange_object = &ifchange->obj; ++ return ifchange_object; ++} ++ ++/* add a socket to the interface change notification's list of sockets */ ++void ifchange_add_sock( struct object *obj, struct sock *sock ) ++{ ++ struct ifchange *ifchange = (struct ifchange *)obj; ++ ++ list_add_tail( &ifchange->sockets, &sock->ifchange_entry ); ++} ++ ++/* wake up an ifchange notification queue for a socket and decrement the ifchange object refcount */ ++void sock_ifchange_wake_up( struct sock *sock, unsigned int status ) ++{ ++ assert( sock->ifchange_q ); ++ async_wake_up( sock->ifchange_q, status ); ++ free_async_queue( sock->ifchange_q ); ++ sock->ifchange_q = NULL; ++ list_remove( &sock->ifchange_entry ); ++ release_object( ifchange_object ); ++} ++ ++/* add interface change notification to a socket */ ++int sock_add_ifchange( struct sock *sock, const async_data_t *async_data ) ++{ ++ struct object *ifchange = ifchange_object; ++ struct async *async; ++ struct fd *fd; ++ ++ if (!sock->ifchange_q) ++ { ++ /* associate this socket with the interface change object */ ++ ifchange = create_ifchange(); ++ if (!ifchange) return FALSE; ++ ifchange_add_sock( ifchange, sock ); /* add this socket to the change notification list */ ++ if (!(fd = ifchange_get_fd( ifchange ))) goto fail; ++ sock->ifchange_q = create_async_queue( fd ); ++ release_object( fd ); ++ if (!sock->ifchange_q) goto fail; ++ } ++ if (!(async = create_async( current, sock->ifchange_q, async_data ))) goto fail; ++ release_object( async ); ++ return TRUE; ++ ++fail: ++ free_async_queue( sock->ifchange_q ); ++ sock->ifchange_q = NULL; ++ release_object( ifchange ); ++ return FALSE; ++} ++ ++static void ifchange_dump( struct object *obj, int verbose ) ++{ ++ assert( obj->ops == &ifchange_ops ); ++ printf( "ifchange\n" ); ++} ++ ++static struct fd *ifchange_get_fd( struct object *obj ) ++{ ++ struct ifchange *ifchange = (struct ifchange *)obj; ++ return (struct fd *)grab_object( ifchange->fd ); ++} ++ ++static void ifchange_destroy( struct object *obj ) ++{ ++ struct ifchange *ifchange = (struct ifchange *)obj; ++ assert( obj->ops == &ifchange_ops ); ++ ++ /* reset the global ifchange object so that it will be recreated if it is needed again */ ++ ifchange_object = NULL; ++ /* shut the socket down to force pending poll() calls in the client to return */ ++ shutdown( get_unix_fd(ifchange->fd), SHUT_RDWR ); ++ release_object( ifchange->fd ); ++} ++ ++static int ifchange_get_poll_events( struct fd *fd ) ++{ ++ return POLLIN; ++} ++ ++/* wake up all the sockets waiting for a change notification event */ ++static void ifchange_wake_up( struct object *obj, unsigned int status ) ++{ ++ struct ifchange *ifchange = (struct ifchange *) obj; ++ struct list *ptr, *next; ++ ++ assert( obj->ops == &ifchange_ops ); ++ LIST_FOR_EACH_SAFE( ptr, next, &ifchange->sockets ) ++ { ++ struct sock *sock = LIST_ENTRY( ptr, struct sock, ifchange_entry ); ++ ++ sock_ifchange_wake_up( sock, status ); ++ } ++} ++ ++static void ifchange_poll_event( struct fd *fd, int event ) ++{ ++ struct object *ifchange = get_fd_user( fd ); ++ int r, unix_fd, wakeup = FALSE; ++ char buffer[0x1000]; ++ ++ unix_fd = get_unix_fd( fd ); ++ r = recv( unix_fd, buffer, sizeof(buffer), 0 ); ++ if (r < 0) ++ { ++ fprintf(stderr,"ifchange_poll_event(): ifchange read failed!\n"); ++ return; ++ } ++ else if (r != 0) ++ { ++#if defined(NETLINK_ROUTE) ++ struct nlmsghdr *nlh; ++ ++ nlh = (struct nlmsghdr*) buffer; ++ if (NLMSG_OK(nlh, r) && (nlh->nlmsg_type == RTM_NEWADDR || nlh->nlmsg_type == RTM_DELADDR)) ++ wakeup = TRUE; ++#endif ++ } ++ if (wakeup) ++ ifchange_wake_up( ifchange, STATUS_SUCCESS ); ++} ++ ++static void ifchange_reselect_async( struct fd *fd, struct async_queue *queue ) ++{ ++ /* do nothing, this object is about to disappear */ ++} ++ + /* create a socket */ + DECL_HANDLER(create_socket) + { +-- +1.7.9.5 + diff --git a/0003-ws2_32-Add-an-interactive-test-for-interface-change-.patch b/0003-ws2_32-Add-an-interactive-test-for-interface-change-.patch new file mode 100644 index 0000000..711fa15 --- /dev/null +++ b/0003-ws2_32-Add-an-interactive-test-for-interface-change-.patch @@ -0,0 +1,98 @@ +From b3156dc253a94f9414a04569181728ec43608f2a Mon Sep 17 00:00:00 2001 +From: "Erich E. Hoover" +Date: Mon, 18 Nov 2013 17:22:14 -0700 +Subject: ws2_32: Add an interactive test for interface change notifications. + +--- + dlls/ws2_32/tests/sock.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 68 insertions(+) + +diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c +index ac6ee10..b6da0e7 100644 +--- a/dlls/ws2_32/tests/sock.c ++++ b/dlls/ws2_32/tests/sock.c +@@ -6225,6 +6225,73 @@ static void test_sioRoutingInterfaceQuery(void) + closesocket(sock); + } + ++static void test_sioAddressListChange(void) ++{ ++ struct sockaddr_in bindAddress; ++ struct in_addr net_address; ++ WSAOVERLAPPED overlapped; ++ struct hostent *h; ++ DWORD num_bytes; ++ SOCKET sock; ++ int acount; ++ int ret; ++ ++ if (!winetest_interactive) ++ { ++ skip("Cannot test SIO_ADDRESS_LIST_CHANGE, interactive tests must be enabled\n"); ++ return; ++ } ++ ++ /* Use gethostbyname to find the list of local network interfaces */ ++ h = gethostbyname(""); ++ if (!h) ++ { ++ skip("Cannot test SIO_ADDRESS_LIST_CHANGE, gethostbyname failed with %u\n", ++ WSAGetLastError()); ++ return; ++ } ++ for (acount = 0; h->h_addr_list[acount]; acount++); ++ if (acount == 0) ++ { ++ skip("Cannot test SIO_ADDRESS_LIST_CHANGE, test requires a network card.\n"); ++ return; ++ } ++ net_address.s_addr = *(ULONG *) h->h_addr_list[0]; ++ ++ /* Bind an overlapped socket to the first found network interface */ ++ sock = WSASocketW(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED); ++ ok(sock != INVALID_SOCKET, "Expected socket to return a valid socket\n"); ++ if (sock == INVALID_SOCKET) ++ { ++ skip("Cannot test SIO_ADDRESS_LIST_CHANGE, socket creation failed with %u\n", ++ WSAGetLastError()); ++ return; ++ } ++ memset(&bindAddress, 0, sizeof(bindAddress)); ++ bindAddress.sin_family = AF_INET; ++ bindAddress.sin_addr.s_addr = net_address.s_addr; ++ ret = bind(sock, (struct sockaddr*)&bindAddress, sizeof(bindAddress)); ++ if (ret != 0) ++ { ++ skip("Cannot test SIO_ADDRESS_LIST_CHANGE, failed to bind, error %u\n", WSAGetLastError()); ++ goto end; ++ } ++ ++ /* Wait for address changes, request that the user connect/disconnect an interface */ ++ memset(&overlapped, 0, sizeof(overlapped)); ++ overlapped.hEvent = CreateEventA(NULL, FALSE, FALSE, NULL); ++ ret = WSAIoctl(sock, SIO_ADDRESS_LIST_CHANGE, NULL, 0, NULL, 0, &num_bytes, &overlapped, NULL); ++ ok(ret == SOCKET_ERROR, "WSAIoctl succeeded unexpectedly\n"); ++ ok(WSAGetLastError() == WSA_IO_PENDING, "Expected pending last error %d\n", WSAGetLastError()); ++ trace("Testing socket-based ipv4 address list change notification. Please connect/disconnect or" ++ " change the ipv4 address of any of the local network interfaces (10 second timeout).\n"); ++ ret = WaitForSingleObject(overlapped.hEvent, 10000); ++ ok(ret == WAIT_OBJECT_0, "failed to get overlapped event %u\n", ret); ++ ++end: ++ closesocket(sock); ++} ++ + static void test_synchronous_WSAIoctl(void) + { + HANDLE previous_port, io_port; +@@ -7101,6 +7168,7 @@ START_TEST( sock ) + test_ConnectEx(); + + test_sioRoutingInterfaceQuery(); ++ test_sioAddressListChange(); + + test_WSAAsyncGetServByPort(); + test_WSAAsyncGetServByName(); +-- +1.7.9.5 + diff --git a/0004-server-Store-and-return-security-attributes-with-ext.patch b/0004-server-Store-and-return-security-attributes-with-ext.patch new file mode 100644 index 0000000..a3bcada --- /dev/null +++ b/0004-server-Store-and-return-security-attributes-with-ext.patch @@ -0,0 +1,499 @@ +From 78a5ebb94f3717bedd77f7c096e8fce1e9a640d1 Mon Sep 17 00:00:00 2001 +From: "Erich E. Hoover" +Date: Mon, 18 Nov 2013 18:12:05 -0700 +Subject: server: Store and return security attributes with extended file + attributes. + +--- + configure.ac | 6 ++ + dlls/advapi32/tests/security.c | 25 +++--- + server/change.c | 11 ++- + server/fd.c | 68 +++++++++++++++- + server/file.c | 176 +++++++++++++++++++++++++++++++++++++++- + server/file.h | 5 +- + 6 files changed, 269 insertions(+), 22 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 98a73f2..bb03667 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -71,6 +71,7 @@ AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthrea + AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) + AC_ARG_WITH(tiff, AS_HELP_STRING([--without-tiff],[do not use TIFF])) + AC_ARG_WITH(v4l, AS_HELP_STRING([--without-v4l],[do not use v4l1 (v4l support)])) ++AC_ARG_WITH(xattr, AS_HELP_STRING([--without-xattr],[do not use xattr (security attributes support)])) + AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), + [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) + AC_ARG_WITH(xcursor, AS_HELP_STRING([--without-xcursor],[do not use the Xcursor extension]), +@@ -666,6 +667,11 @@ AC_CHECK_HEADERS([libprocstat.h],,, + #include + #endif]) + ++if test "x$with_xattr" != "xno" ++then ++ AC_CHECK_HEADERS(attr/xattr.h) ++fi ++ + dnl **** Check for working dll **** + + AC_SUBST(dlldir,"\${libdir}/wine") +diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c +index fe31b5c..7d28c05 100644 +--- a/dlls/advapi32/tests/security.c ++++ b/dlls/advapi32/tests/security.c +@@ -3088,10 +3088,10 @@ static void test_CreateDirectoryA(void) + bret = pGetAce(pDacl, 0, (VOID **)&ace); + ok(bret, "Failed to get Current User ACE.\n"); + bret = EqualSid(&ace->SidStart, user_sid); +- todo_wine ok(bret, "Current User ACE != Current User SID.\n"); +- todo_wine ok(((ACE_HEADER *)ace)->AceFlags == (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE), +- "Current User ACE has unexpected flags (0x%x != 0x03)\n", +- ((ACE_HEADER *)ace)->AceFlags); ++ ok(bret, "Current User ACE != Current User SID.\n"); ++ ok(((ACE_HEADER *)ace)->AceFlags == (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE), ++ "Current User ACE has unexpected flags (0x%x != 0x03)\n", ++ ((ACE_HEADER *)ace)->AceFlags); + ok(ace->Mask == 0x1f01ff, "Current User ACE has unexpected mask (0x%x != 0x1f01ff)\n", + ace->Mask); + } +@@ -3100,10 +3100,10 @@ static void test_CreateDirectoryA(void) + bret = pGetAce(pDacl, 1, (VOID **)&ace); + ok(bret, "Failed to get Administators Group ACE.\n"); + bret = EqualSid(&ace->SidStart, admin_sid); +- todo_wine ok(bret, "Administators Group ACE != Administators Group SID.\n"); +- todo_wine ok(((ACE_HEADER *)ace)->AceFlags == (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE), +- "Administators Group ACE has unexpected flags (0x%x != 0x03)\n", +- ((ACE_HEADER *)ace)->AceFlags); ++ ok(bret, "Administators Group ACE != Administators Group SID.\n"); ++ ok(((ACE_HEADER *)ace)->AceFlags == (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE), ++ "Administators Group ACE has unexpected flags (0x%x != 0x03)\n", ++ ((ACE_HEADER *)ace)->AceFlags); + ok(ace->Mask == 0x1f01ff, "Administators Group ACE has unexpected mask (0x%x != 0x1f01ff)\n", + ace->Mask); + } +@@ -3277,7 +3277,7 @@ static void test_GetNamedSecurityInfoA(void) + bret = pGetAce(pDacl, 0, (VOID **)&ace); + ok(bret, "Failed to get Current User ACE.\n"); + bret = EqualSid(&ace->SidStart, user_sid); +- todo_wine ok(bret, "Current User ACE != Current User SID.\n"); ++ ok(bret, "Current User ACE != Current User SID.\n"); + ok(((ACE_HEADER *)ace)->AceFlags == 0, + "Current User ACE has unexpected flags (0x%x != 0x0)\n", ((ACE_HEADER *)ace)->AceFlags); + ok(ace->Mask == 0x1f01ff, "Current User ACE has unexpected mask (0x%x != 0x1f01ff)\n", +@@ -3288,8 +3288,7 @@ static void test_GetNamedSecurityInfoA(void) + bret = pGetAce(pDacl, 1, (VOID **)&ace); + ok(bret, "Failed to get Administators Group ACE.\n"); + bret = EqualSid(&ace->SidStart, admin_sid); +- todo_wine ok(bret || broken(!bret) /* win2k */, +- "Administators Group ACE != Administators Group SID.\n"); ++ ok(bret || broken(!bret) /* win2k */, "Administators Group ACE != Administators Group SID.\n"); + ok(((ACE_HEADER *)ace)->AceFlags == 0, + "Administators Group ACE has unexpected flags (0x%x != 0x0)\n", ((ACE_HEADER *)ace)->AceFlags); + ok(ace->Mask == 0x1f01ff || broken(ace->Mask == GENERIC_ALL) /* win2k */, +@@ -3943,7 +3942,7 @@ static void test_GetSecurityInfo(void) + bret = pGetAce(pDacl, 0, (VOID **)&ace); + ok(bret, "Failed to get Current User ACE.\n"); + bret = EqualSid(&ace->SidStart, user_sid); +- todo_wine ok(bret, "Current User ACE != Current User SID.\n"); ++ ok(bret, "Current User ACE != Current User SID.\n"); + ok(((ACE_HEADER *)ace)->AceFlags == 0, + "Current User ACE has unexpected flags (0x%x != 0x0)\n", ((ACE_HEADER *)ace)->AceFlags); + ok(ace->Mask == 0x1f01ff, "Current User ACE has unexpected mask (0x%x != 0x1f01ff)\n", +@@ -3954,7 +3953,7 @@ static void test_GetSecurityInfo(void) + bret = pGetAce(pDacl, 1, (VOID **)&ace); + ok(bret, "Failed to get Administators Group ACE.\n"); + bret = EqualSid(&ace->SidStart, admin_sid); +- todo_wine ok(bret, "Administators Group ACE != Administators Group SID.\n"); ++ ok(bret, "Administators Group ACE != Administators Group SID.\n"); + ok(((ACE_HEADER *)ace)->AceFlags == 0, + "Administators Group ACE has unexpected flags (0x%x != 0x0)\n", ((ACE_HEADER *)ace)->AceFlags); + ok(ace->Mask == 0x1f01ff, "Administators Group ACE has unexpected mask (0x%x != 0x1f01ff)\n", +diff --git a/server/change.c b/server/change.c +index f6d56b0..022c780 100644 +--- a/server/change.c ++++ b/server/change.c +@@ -286,6 +286,7 @@ static int get_dir_unix_fd( struct dir *dir ) + static struct security_descriptor *dir_get_sd( struct object *obj ) + { + struct dir *dir = (struct dir *)obj; ++ const SID *user, *group; + int unix_fd; + struct stat st; + struct security_descriptor *sd; +@@ -302,9 +303,11 @@ static struct security_descriptor *dir_get_sd( struct object *obj ) + (st.st_uid == dir->uid)) + return obj->sd; + +- sd = mode_to_sd( st.st_mode, +- security_unix_uid_to_sid( st.st_uid ), +- token_get_primary_group( current->process->token )); ++ user = security_unix_uid_to_sid( st.st_uid ); ++ group = token_get_primary_group( current->process->token ); ++ sd = get_file_acls( unix_fd, user, group ); ++ if (!sd) ++ sd = mode_to_sd( st.st_mode, user, group ); + if (!sd) return obj->sd; + + dir->mode = st.st_mode; +@@ -353,6 +356,8 @@ static int dir_set_sd( struct object *obj, const struct security_descriptor *sd, + mode = st.st_mode & (S_ISUID|S_ISGID|S_ISVTX); + mode |= sd_to_mode( sd, owner ); + ++ set_file_acls( unix_fd, sd ); ++ + if (((st.st_mode ^ mode) & (S_IRWXU|S_IRWXG|S_IRWXO)) && fchmod( unix_fd, mode ) == -1) + { + file_set_error(); +diff --git a/server/fd.c b/server/fd.c +index fa8874c..98e3eca 100644 +--- a/server/fd.c ++++ b/server/fd.c +@@ -91,6 +91,9 @@ + #ifdef HAVE_SYS_SYSCALL_H + #include + #endif ++#ifdef HAVE_ATTR_XATTR_H ++#include ++#endif + + #include "ntstatus.h" + #define WIN32_NO_STATUS +@@ -99,6 +102,7 @@ + #include "handle.h" + #include "process.h" + #include "request.h" ++#include "security.h" + + #include "winternl.h" + #include "winioctl.h" +@@ -1726,9 +1730,69 @@ static char *dup_fd_name( struct fd *root, const char *name ) + return ret; + } + ++void set_file_acls( int fd, const struct security_descriptor *sd ) ++{ ++#ifdef HAVE_ATTR_XATTR_H ++ char buffer[XATTR_SIZE_MAX], *p = buffer; ++ const ACE_HEADER *ace; ++ int present, i, j, n; ++ const ACL *dacl; ++ ++ if (!sd) return; ++ dacl = sd_get_dacl( sd, &present ); ++ if (!present || !dacl) return; ++ ace = (const ACE_HEADER *)(dacl + 1); ++ ++ for (i = 0; i < dacl->AceCount; i++, ace = ace_next( ace )) ++ { ++ BYTE type = ace->AceType, flags; ++ const ACCESS_ALLOWED_ACE *aaa; ++ const ACCESS_DENIED_ACE *ada; ++ char sidtxt[100], *s; ++ const SID *sid; ++ DWORD mask; ++ ++ if (type & INHERIT_ONLY_ACE) continue; ++ ++ switch (type) ++ { ++ case ACCESS_DENIED_ACE_TYPE: ++ ada = (const ACCESS_DENIED_ACE *)ace; ++ flags = ada->Header.AceFlags; ++ mask = ada->Mask; ++ sid = (const SID *)&ada->SidStart; ++ break; ++ case ACCESS_ALLOWED_ACE_TYPE: ++ aaa = (const ACCESS_ALLOWED_ACE *)ace; ++ flags = aaa->Header.AceFlags; ++ mask = aaa->Mask; ++ sid = (const SID *)&aaa->SidStart; ++ break; ++ default: ++ continue; ++ } ++ n = sprintf( sidtxt, "S-%u-%d", sid->Revision, ++ MAKELONG( ++ MAKEWORD( sid->IdentifierAuthority.Value[5], ++ sid->IdentifierAuthority.Value[4] ), ++ MAKEWORD( sid->IdentifierAuthority.Value[3], ++ sid->IdentifierAuthority.Value[2] ) ++ ) ); ++ s = sidtxt + n; ++ for( j=0; jSubAuthorityCount; j++ ) ++ s += sprintf( s, "-%u", sid->SubAuthority[j] ); ++ ++ p += snprintf( p, XATTR_SIZE_MAX-(p-buffer), "%s%x,%x,%x,%s", ++ (p != buffer ? ";" : ""), type, flags, mask, sidtxt ); ++ } ++ ++ fsetxattr( fd, "user.wine.acl", buffer, p-buffer, 0 ); ++#endif ++} ++ + /* open() wrapper that returns a struct fd with no fd user set */ + struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, unsigned int access, +- unsigned int sharing, unsigned int options ) ++ unsigned int sharing, unsigned int options, const struct security_descriptor *sd ) + { + struct stat st; + struct closed_fd *closed_fd; +@@ -1804,6 +1868,8 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, + } + } + ++ set_file_acls( fd->unix_fd, sd ); ++ + closed_fd->unix_fd = fd->unix_fd; + closed_fd->unlink[0] = 0; + fstat( fd->unix_fd, &st ); +diff --git a/server/file.c b/server/file.c +index cceb8ad..9ac9188 100644 +--- a/server/file.c ++++ b/server/file.c +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include + #ifdef HAVE_UTIME_H + #include +@@ -39,6 +40,9 @@ + #ifdef HAVE_POLL_H + #include + #endif ++#ifdef HAVE_ATTR_XATTR_H ++#include ++#endif + + #include "ntstatus.h" + #define WIN32_NO_STATUS +@@ -237,7 +241,7 @@ static struct object *create_file( struct fd *root, const char *nameptr, data_si + access = generic_file_map_access( access ); + + /* FIXME: should set error to STATUS_OBJECT_NAME_COLLISION if file existed before */ +- fd = open_fd( root, name, flags | O_NONBLOCK | O_LARGEFILE, &mode, access, sharing, options ); ++ fd = open_fd( root, name, flags | O_NONBLOCK | O_LARGEFILE, &mode, access, sharing, options, sd ); + if (!fd) goto done; + + if (S_ISDIR(mode)) +@@ -424,9 +428,169 @@ struct security_descriptor *mode_to_sd( mode_t mode, const SID *user, const SID + return sd; + } + ++struct security_descriptor *get_file_acls( int fd, const SID *user, const SID *group ) ++{ ++#ifdef HAVE_ATTR_XATTR_H ++ int ace_count = 0, dacl_size = sizeof(ACL), i, n; ++ char buffer[XATTR_SIZE_MAX], *p = buffer, *pn; ++ struct security_descriptor *sd; ++ ACE_HEADER *current_ace; ++ ACCESS_ALLOWED_ACE *aaa; ++ ACCESS_DENIED_ACE *ada; ++ int type, flags, mask; ++ ACL *dacl; ++ char *ptr; ++ ++ n = fgetxattr( fd, "user.wine.acl", buffer, sizeof(buffer) ); ++ if (n == -1) return NULL; ++ buffer[n] = 0; ++ ++ do ++ { ++ int sub_authority_count = 0; ++ ++ pn = strchr(p, ';'); ++ if (pn) pn++; ++ sscanf(p, "%x", &type); ++ do ++ { ++ p = strchr(p, '-'); ++ if (p) p++; ++ sub_authority_count++; ++ } ++ while(p && (!pn || p < pn)); ++ sub_authority_count -= 3; /* Revision and IdentifierAuthority don't count */ ++ ++ switch (type) ++ { ++ case ACCESS_DENIED_ACE_TYPE: ++ dacl_size += FIELD_OFFSET(ACCESS_DENIED_ACE, SidStart) + ++ FIELD_OFFSET(SID, SubAuthority[sub_authority_count]); ++ break; ++ case ACCESS_ALLOWED_ACE_TYPE: ++ dacl_size += FIELD_OFFSET(ACCESS_ALLOWED_ACE, SidStart) + ++ FIELD_OFFSET(SID, SubAuthority[sub_authority_count]); ++ break; ++ default: ++ continue; ++ } ++ ace_count++; ++ p = pn; ++ } ++ while(p); ++ ++ sd = mem_alloc( sizeof(struct security_descriptor) + ++ FIELD_OFFSET(SID, SubAuthority[user->SubAuthorityCount]) + ++ FIELD_OFFSET(SID, SubAuthority[group->SubAuthorityCount]) + ++ dacl_size ); ++ ++ sd->control = SE_DACL_PRESENT; ++ sd->owner_len = FIELD_OFFSET(SID, SubAuthority[user->SubAuthorityCount]); ++ sd->group_len = FIELD_OFFSET(SID, SubAuthority[group->SubAuthorityCount]); ++ sd->sacl_len = 0; ++ sd->dacl_len = dacl_size; ++ ++ ptr = (char *)(sd + 1); ++ memcpy( ptr, user, sd->owner_len ); ++ ptr += sd->owner_len; ++ memcpy( ptr, group, sd->group_len ); ++ ptr += sd->group_len; ++ ++ dacl = (ACL *)ptr; ++ dacl->AclRevision = ACL_REVISION; ++ dacl->Sbz1 = 0; ++ dacl->AclSize = dacl_size; ++ dacl->AceCount = ace_count; ++ dacl->Sbz2 = 0; ++ aaa = (ACCESS_ALLOWED_ACE *)(dacl + 1); ++ current_ace = &aaa->Header; ++ ++ p = buffer; ++ for(i=0; iHeader; ++ } ++ pn = strchr(p, ';'); ++ if (pn) pn++; ++ sscanf(p, "%x,%x,%x,%[^;]", &type, &flags, &mask, sidtxt); ++ sscanf(sidtxt, "S-%u-%d", &rev, &ia); ++ sid->Revision = rev; ++ sid->IdentifierAuthority.Value[0] = 0; ++ sid->IdentifierAuthority.Value[1] = 0; ++ sid->IdentifierAuthority.Value[2] = HIBYTE(HIWORD(ia)); ++ sid->IdentifierAuthority.Value[3] = LOBYTE(HIWORD(ia)); ++ sid->IdentifierAuthority.Value[4] = HIBYTE(LOWORD(ia)); ++ sid->IdentifierAuthority.Value[5] = LOBYTE(LOWORD(ia)); ++ p = strchr(sidtxt, '-')+1; ++ p = strchr(p, '-')+1; /* Revision doesn't count */ ++ p = strchr(p, '-')+1; /* IdentifierAuthority doesn't count */ ++ do ++ { ++ sscanf(p, "%u", &sa); ++ sid->SubAuthority[sub_authority_count] = sa; ++ p = strchr(p, '-'); ++ if (p) p++; ++ sub_authority_count++; ++ } ++ while(p); ++ sid->SubAuthorityCount = sub_authority_count; ++ ++ /* Convert generic rights into standard access rights */ ++ if (mask & GENERIC_ALL) ++ mask |= WRITE_DAC | WRITE_OWNER | DELETE | FILE_DELETE_CHILD; ++ if (mask & (GENERIC_ALL|GENERIC_READ)) ++ mask |= FILE_GENERIC_READ; ++ if (mask & (GENERIC_ALL|GENERIC_WRITE)) ++ mask |= FILE_GENERIC_WRITE; ++ if (mask & (GENERIC_ALL|GENERIC_EXECUTE)) ++ mask |= FILE_GENERIC_EXECUTE; ++ mask &= 0x0FFFFFFF; ++ ++ /* Handle the specific ACE */ ++ switch (type) ++ { ++ case ACCESS_DENIED_ACE_TYPE: ++ ada = (ACCESS_DENIED_ACE *)aaa; ++ ada->Header.AceType = type; ++ ada->Header.AceFlags = flags; ++ ada->Header.AceSize = FIELD_OFFSET(ACCESS_DENIED_ACE, SidStart) + ++ FIELD_OFFSET(SID, SubAuthority[sid->SubAuthorityCount]); ++ ada->Mask = mask; ++ memcpy( &ada->SidStart, sid, FIELD_OFFSET(SID, SubAuthority[sid->SubAuthorityCount]) ); ++ break; ++ case ACCESS_ALLOWED_ACE_TYPE: ++ aaa->Header.AceType = type; ++ aaa->Header.AceFlags = flags; ++ aaa->Header.AceSize = FIELD_OFFSET(ACCESS_ALLOWED_ACE, SidStart) + ++ FIELD_OFFSET(SID, SubAuthority[sid->SubAuthorityCount]); ++ aaa->Mask = mask; ++ memcpy( &aaa->SidStart, sid, FIELD_OFFSET(SID, SubAuthority[sid->SubAuthorityCount]) ); ++ break; ++ default: ++ continue; ++ } ++ p = pn; ++ } ++ ++ return sd; ++#else ++ return NULL; ++#endif ++} ++ + static struct security_descriptor *file_get_sd( struct object *obj ) + { + struct file *file = (struct file *)obj; ++ const SID *user, *group; + struct stat st; + int unix_fd; + struct security_descriptor *sd; +@@ -443,9 +607,11 @@ static struct security_descriptor *file_get_sd( struct object *obj ) + (st.st_uid == file->uid)) + return obj->sd; + +- sd = mode_to_sd( st.st_mode, +- security_unix_uid_to_sid( st.st_uid ), +- token_get_primary_group( current->process->token )); ++ user = security_unix_uid_to_sid( st.st_uid ); ++ group = token_get_primary_group( current->process->token ); ++ sd = get_file_acls( unix_fd, user, group ); ++ if (!sd) ++ sd = mode_to_sd( st.st_mode, user, group); + if (!sd) return obj->sd; + + file->mode = st.st_mode; +@@ -575,6 +741,8 @@ static int file_set_sd( struct object *obj, const struct security_descriptor *sd + mode = st.st_mode & (S_ISUID|S_ISGID|S_ISVTX); + mode |= sd_to_mode( sd, owner ); + ++ set_file_acls( unix_fd, sd ); ++ + if (((st.st_mode ^ mode) & (S_IRWXU|S_IRWXG|S_IRWXO)) && fchmod( unix_fd, mode ) == -1) + { + file_set_error(); +diff --git a/server/file.h b/server/file.h +index 493d30b..721c087 100644 +--- a/server/file.h ++++ b/server/file.h +@@ -56,7 +56,8 @@ extern struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct obje + unsigned int options ); + extern void set_no_fd_status( struct fd *fd, unsigned int status ); + extern struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, +- unsigned int access, unsigned int sharing, unsigned int options ); ++ unsigned int access, unsigned int sharing, unsigned int options, ++ const struct security_descriptor *sd ); + extern struct fd *create_anonymous_fd( const struct fd_ops *fd_user_ops, + int unix_fd, struct object *user, unsigned int options ); + extern struct fd *dup_fd_object( struct fd *orig, unsigned int access, unsigned int sharing, +@@ -122,6 +123,8 @@ extern struct file *create_file_for_fd_obj( struct fd *fd, unsigned int access, + extern void file_set_error(void); + extern struct security_descriptor *mode_to_sd( mode_t mode, const SID *user, const SID *group ); + extern mode_t sd_to_mode( const struct security_descriptor *sd, const SID *owner ); ++extern void set_file_acls( int fd, const struct security_descriptor *sd ); ++extern struct security_descriptor *get_file_acls( int fd, const SID *user, const SID *group ); + + /* file mapping functions */ + +-- +1.7.9.5 + diff --git a/0005-ntdll-Inherit-security-attributes-from-parent-direct.patch b/0005-ntdll-Inherit-security-attributes-from-parent-direct.patch new file mode 100644 index 0000000..5f4365d --- /dev/null +++ b/0005-ntdll-Inherit-security-attributes-from-parent-direct.patch @@ -0,0 +1,180 @@ +From 5e49f53a4bd591e67c9b7c4fdaf46933e319f9aa Mon Sep 17 00:00:00 2001 +From: "Erich E. Hoover" +Date: Mon, 18 Nov 2013 18:15:20 -0700 +Subject: ntdll: Inherit security attributes from parent directories. + +--- + dlls/advapi32/tests/security.c | 40 ++++++++++++++++++- + dlls/ntdll/file.c | 85 +++++++++++++++++++++++++++++++++++++++- + 2 files changed, 123 insertions(+), 2 deletions(-) + +diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c +index 7d28c05..a8d136b 100644 +--- a/dlls/advapi32/tests/security.c ++++ b/dlls/advapi32/tests/security.c +@@ -3013,10 +3013,11 @@ static void test_CreateDirectoryA(void) + ACL_SIZE_INFORMATION acl_size; + ACCESS_ALLOWED_ACE *ace; + SECURITY_ATTRIBUTES sa; ++ char tmpfile[MAX_PATH]; + char tmpdir[MAX_PATH]; ++ HANDLE token, hTemp; + struct _SID *owner; + BOOL bret = TRUE; +- HANDLE token; + DWORD error; + PACL pDacl; + +@@ -3108,6 +3109,43 @@ static void test_CreateDirectoryA(void) + ace->Mask); + } + ++ /* Test inheritance of ACLs */ ++ strcpy(tmpfile, tmpdir); ++ lstrcatA(tmpfile, "/tmpfile"); ++ hTemp = CreateFileA(tmpfile, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, ++ FILE_FLAG_DELETE_ON_CLOSE, NULL); ++ error = pGetNamedSecurityInfoA(tmpfile, SE_FILE_OBJECT, ++ OWNER_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION, (PSID*)&owner, ++ NULL, &pDacl, NULL, &pSD); ++ ok(error == ERROR_SUCCESS, "Failed to get permissions on file.\n"); ++ bret = pGetAclInformation(pDacl, &acl_size, sizeof(acl_size), AclSizeInformation); ++ ok(bret, "GetAclInformation failed\n"); ++ ok(acl_size.AceCount == 2, "GetAclInformation returned unexpected entry count (%d != 2).\n", ++ acl_size.AceCount); ++ if (acl_size.AceCount > 0) ++ { ++ bret = pGetAce(pDacl, 0, (VOID **)&ace); ++ ok(bret, "Inherited Failed to get Current User ACE.\n"); ++ bret = EqualSid(&ace->SidStart, user_sid); ++ ok(bret, "Inherited Current User ACE != Current User SID.\n"); ++ ok(((ACE_HEADER *)ace)->AceFlags == INHERITED_ACE, ++ "Inherited Current User ACE has unexpected flags (0x%x != 0x10)\n", ((ACE_HEADER *)ace)->AceFlags); ++ ok(ace->Mask == 0x1f01ff, "Current User ACE has unexpected mask (0x%x != 0x1f01ff)\n", ++ ace->Mask); ++ } ++ if (acl_size.AceCount > 1) ++ { ++ bret = pGetAce(pDacl, 1, (VOID **)&ace); ++ ok(bret, "Inherited Failed to get Administators Group ACE.\n"); ++ bret = EqualSid(&ace->SidStart, admin_sid); ++ ok(bret, "Inherited Administators Group ACE != Administators Group SID.\n"); ++ ok(((ACE_HEADER *)ace)->AceFlags == INHERITED_ACE, ++ "Inherited Administators Group ACE has unexpected flags (0x%x != 0x10)\n", ((ACE_HEADER *)ace)->AceFlags); ++ ok(ace->Mask == 0x1f01ff, "Administators Group ACE has unexpected mask (0x%x != 0x1f01ff)\n", ++ ace->Mask); ++ } ++ CloseHandle(hTemp); ++ + done: + HeapFree(GetProcessHeap(), 0, user); + bret = RemoveDirectoryA(tmpdir); +diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c +index 1de2c61..8948bb7 100644 +--- a/dlls/ntdll/file.c ++++ b/dlls/ntdll/file.c +@@ -103,6 +103,81 @@ mode_t FILE_umask = 0; + + static const WCHAR ntfsW[] = {'N','T','F','S'}; + ++static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATTRIBUTES attr, ++ PIO_STATUS_BLOCK io, PLARGE_INTEGER alloc_size, ++ ULONG attributes, ULONG sharing, ULONG disposition, ++ ULONG options, PVOID ea_buffer, ULONG ea_length ); ++ ++struct security_descriptor *FILE_get_parent_sd(UNICODE_STRING *filenameW) ++{ ++ SECURITY_INFORMATION info = OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION ++ |DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION; ++ PSECURITY_DESCRIPTOR parentsd = NULL; ++ ACL_SIZE_INFORMATION acl_size; ++ BOOLEAN present, defaulted; ++ WCHAR *p, parent[MAX_PATH]; ++ OBJECT_ATTRIBUTES pattr; ++ UNICODE_STRING parentW; ++ IO_STATUS_BLOCK io; ++ NTSTATUS status; ++ HANDLE hparent; ++ ULONG n1, n2; ++ PACL pDacl; ++ int i; ++ ++ parentW.Buffer = parent; ++ parentW.Length = filenameW->Length; ++ memcpy(parentW.Buffer, filenameW->Buffer, filenameW->Length); ++ if ((p = strrchrW(parent, '\\')) != NULL) ++ { ++ p[0] = 0; ++ parentW.Length = (p-parent)*sizeof(WCHAR); ++ } ++ memset(&pattr, 0x0, sizeof(pattr)); ++ pattr.Length = sizeof(pattr); ++ pattr.Attributes = OBJ_CASE_INSENSITIVE; ++ pattr.ObjectName = &parentW; ++ status = FILE_CreateFile( &hparent, READ_CONTROL|ACCESS_SYSTEM_SECURITY, &pattr, &io, NULL, ++ FILE_FLAG_BACKUP_SEMANTICS, ++ FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, FILE_OPEN, ++ FILE_OPEN_FOR_BACKUP_INTENT, NULL, 0 ); ++ if (status == STATUS_SUCCESS) ++ status = NtQuerySecurityObject( hparent, info, NULL, 0, &n1 ); ++ if (status == STATUS_BUFFER_TOO_SMALL && (parentsd = RtlAllocateHeap( GetProcessHeap(), 0, n1 )) != NULL) ++ status = NtQuerySecurityObject( hparent, info, parentsd, n1, &n2 ); ++ if (status == STATUS_SUCCESS) ++ status = NtQuerySecurityObject( hparent, info, parentsd, n1, &n2 ); ++ if (hparent != INVALID_HANDLE_VALUE) ++ NtClose( hparent ); ++ if (status != STATUS_SUCCESS) return NULL; ++ status = RtlGetDaclSecurityDescriptor(parentsd, &present, &pDacl, &defaulted); ++ if (status != STATUS_SUCCESS || !present) return NULL; ++ status = RtlQueryInformationAcl(pDacl, &acl_size, sizeof(acl_size), AclSizeInformation); ++ if (status != STATUS_SUCCESS) return NULL; ++ ++ for (i=acl_size.AceCount-1; i>=0; i--) ++ { ++ DWORD inheritance_mask = INHERIT_ONLY_ACE|OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE; ++ ACE_HEADER *ace; ++ ++ status = RtlGetAce(pDacl, i, (VOID **)&ace); ++ if (status != STATUS_SUCCESS || !(ace->AceFlags & inheritance_mask)) ++ { ++ RtlDeleteAce(pDacl, i); ++ acl_size.AceCount--; ++ } ++ else ++ ace->AceFlags = (ace->AceFlags & ~inheritance_mask) | INHERITED_ACE; ++ } ++ ++ if (!acl_size.AceCount) ++ { ++ return NULL; ++ } ++ return parentsd; ++} ++ ++ + /************************************************************************** + * FILE_CreateFile (internal) + * Open a file. +@@ -161,10 +236,18 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT + { + struct security_descriptor *sd; + struct object_attributes objattr; ++ PSECURITY_DESCRIPTOR parentsd = NULL, psd; + + objattr.rootdir = wine_server_obj_handle( attr->RootDirectory ); + objattr.name_len = 0; +- io->u.Status = NTDLL_create_struct_sd( attr->SecurityDescriptor, &sd, &objattr.sd_len ); ++ psd = attr->SecurityDescriptor; ++ if (!psd && (disposition == FILE_CREATE||disposition == FILE_OVERWRITE_IF)) ++ parentsd = FILE_get_parent_sd( attr->ObjectName ); ++ if (parentsd) ++ psd = parentsd; ++ io->u.Status = NTDLL_create_struct_sd( psd, &sd, &objattr.sd_len ); ++ if (parentsd) ++ RtlFreeHeap( GetProcessHeap(), 0, parentsd ); + if (io->u.Status != STATUS_SUCCESS) + { + RtlFreeAnsiString( &unix_name ); +-- +1.7.9.5 + diff --git a/0006-kernel32-Allow-string-comparison-with-linguistic-cas.patch b/0006-kernel32-Allow-string-comparison-with-linguistic-cas.patch new file mode 100644 index 0000000..4cc5b24 --- /dev/null +++ b/0006-kernel32-Allow-string-comparison-with-linguistic-cas.patch @@ -0,0 +1,25 @@ +From d027a6891aa48f2614b606892bc54e25e147eee2 Mon Sep 17 00:00:00 2001 +From: "Erich E. Hoover" +Date: Sun, 11 Aug 2013 17:45:19 -0600 +Subject: kernel32: Allow string comparison with linguistic casing. + +--- + dlls/kernel32/locale.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c +index 9ddf078..d635364 100644 +--- a/dlls/kernel32/locale.c ++++ b/dlls/kernel32/locale.c +@@ -2934,7 +2934,7 @@ INT WINAPI CompareStringEx(LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1, + return 0; + } + +- if( flags & ~(NORM_IGNORECASE|NORM_IGNORENONSPACE|NORM_IGNORESYMBOLS| ++ if( flags & ~(NORM_IGNORECASE|NORM_IGNORENONSPACE|NORM_IGNORESYMBOLS|NORM_LINGUISTIC_CASING| + SORT_STRINGSORT|NORM_IGNOREKANATYPE|NORM_IGNOREWIDTH|LOCALE_USE_CP_ACP|0x10000000) ) + { + SetLastError(ERROR_INVALID_FLAGS); +-- +1.7.9.5 + diff --git a/0007-winex11-Update-gl_drawable-for-embedded-windows.patch b/0007-winex11-Update-gl_drawable-for-embedded-windows.patch new file mode 100644 index 0000000..8f908c9 --- /dev/null +++ b/0007-winex11-Update-gl_drawable-for-embedded-windows.patch @@ -0,0 +1,25 @@ +From f9b183ba340f5dd0f8cf558c91e5a30bf2d09dfd Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 26 Oct 2013 18:40:07 +0200 +Subject: winex11: Update gl_drawable for embedded windows + +--- + dlls/winex11.drv/window.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c +index ebbfd45..6a8d63b 100644 +--- a/dlls/winex11.drv/window.c ++++ b/dlls/winex11.drv/window.c +@@ -2286,7 +2286,7 @@ void CDECL X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flags + + sync_client_position( data, &old_client_rect, &old_whole_rect ); + +- if (!data->whole_window) ++ if (data->embedded || !data->whole_window) + { + release_win_data( data ); + sync_gl_drawable( hwnd, visible_rect, rectClient ); +-- +1.7.9.5 + diff --git a/0008-winex11-Enable-disable-windows-when-they-are-un-mapped.patch b/0008-winex11-Enable-disable-windows-when-they-are-un-mapped.patch new file mode 100644 index 0000000..0f4f4d6 --- /dev/null +++ b/0008-winex11-Enable-disable-windows-when-they-are-un-mapped.patch @@ -0,0 +1,58 @@ +From 90f7d78cf1ee2bf4329b298cb24e0e5145637557 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Fri, 22 Nov 2013 18:54:18 +0100 +Subject: winex11: Enable/disable windows when they are (un)mapped by foreign + applications + +--- + dlls/winex11.drv/event.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c +index 767c003..f39b922 100644 +--- a/dlls/winex11.drv/event.c ++++ b/dlls/winex11.drv/event.c +@@ -922,6 +922,7 @@ static void X11DRV_Expose( HWND hwnd, XEvent *xev ) + static void X11DRV_MapNotify( HWND hwnd, XEvent *event ) + { + struct x11drv_win_data *data; ++ BOOL is_embedded; + + if (event->xany.window == x11drv_thread_data()->clip_window) + { +@@ -936,7 +937,12 @@ static void X11DRV_MapNotify( HWND hwnd, XEvent *event ) + if (hwndFocus && IsChild( hwnd, hwndFocus )) + set_input_focus( data ); + } ++ ++ is_embedded = data->embedded; + release_win_data( data ); ++ ++ if (is_embedded) ++ EnableWindow( hwnd, TRUE ); + } + + +@@ -945,8 +951,19 @@ static void X11DRV_MapNotify( HWND hwnd, XEvent *event ) + */ + static void X11DRV_UnmapNotify( HWND hwnd, XEvent *event ) + { ++ struct x11drv_win_data *data; ++ BOOL is_embedded; ++ + if (event->xany.window == x11drv_thread_data()->clip_window) + clipping_cursor = FALSE; ++ ++ if (!(data = get_win_data( hwnd ))) return; ++ ++ is_embedded = data->embedded; ++ release_win_data( data ); ++ ++ if (is_embedded) ++ EnableWindow( hwnd, FALSE ); + } + + +-- +1.7.9.5 + diff --git a/0009-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch b/0009-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch new file mode 100644 index 0000000..eefe78d --- /dev/null +++ b/0009-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch @@ -0,0 +1,44 @@ +From 852f784dd4dd407d1183c01ce43c1a8e07231275 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 26 Oct 2013 19:39:33 +0200 +Subject: kernel32: Change return value of stub SetNamedPipeHandleState to + TRUE + +--- + dlls/kernel32/sync.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c +index 5b7f810..331188f 100644 +--- a/dlls/kernel32/sync.c ++++ b/dlls/kernel32/sync.c +@@ -1730,7 +1730,8 @@ BOOL WINAPI SetNamedPipeHandleState( + * runtime, and it slows down InstallShield a fair bit. */ + WARN("stub: %p %p/%d %p %p\n", + hNamedPipe, lpMode, lpMode ? *lpMode : 0, lpMaxCollectionCount, lpCollectDataTimeout); +- return FALSE; ++ /* some programs expect this to return TRUE, and will abort otherwise */ ++ return TRUE; + } + + /*********************************************************************** +@@ -1793,14 +1794,12 @@ BOOL WINAPI CallNamedPipeW( + mode = PIPE_READMODE_MESSAGE; + ret = SetNamedPipeHandleState(pipe, &mode, NULL, NULL); + +- /* Currently SetNamedPipeHandleState() is a stub returning FALSE */ +- if (ret) FIXME("Now that SetNamedPipeHandleState() is more than a stub, please update CallNamedPipeW\n"); +- /* ++ /* Currently SetNamedPipeHandleState() is a stub returning TRUE */ + if (!ret) + { + CloseHandle(pipe); + return FALSE; +- }*/ ++ } + + ret = TransactNamedPipe(pipe, lpInput, lpInputSize, lpOutput, lpOutputSize, lpBytesRead, NULL); + CloseHandle(pipe); +-- +1.7.9.5 + diff --git a/0010-quartz-tests-Add-tests-for-IVMRMonitorConfig-and-IVMRM.patch b/0010-quartz-tests-Add-tests-for-IVMRMonitorConfig-and-IVMRM.patch new file mode 100644 index 0000000..a0e5f39 --- /dev/null +++ b/0010-quartz-tests-Add-tests-for-IVMRMonitorConfig-and-IVMRM.patch @@ -0,0 +1,360 @@ +From 4347b37128afcd1878a0f993a058fe147f219982 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Fri, 22 Nov 2013 18:40:59 +0100 +Subject: quartz/tests: Add tests for IVMRMonitorConfig and IVMRMonitorConfig9 + interface + +--- + dlls/quartz/tests/videorenderer.c | 275 ++++++++++++++++++++++++++++++++++--- + 1 file changed, 254 insertions(+), 21 deletions(-) + +diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c +index ce1ac29..e3a4fa2 100644 +--- a/dlls/quartz/tests/videorenderer.c ++++ b/dlls/quartz/tests/videorenderer.c +@@ -22,6 +22,9 @@ + + #include "wine/test.h" + #include "dshow.h" ++#include "initguid.h" ++#include "d3d9.h" ++#include "vmr9.h" + + #define QI_SUCCEED(iface, riid, ppv) hr = IUnknown_QueryInterface(iface, &riid, (LPVOID*)&ppv); \ + ok(hr == S_OK, "IUnknown_QueryInterface returned %x\n", hr); \ +@@ -32,28 +35,17 @@ + ok(hr == num, "IUnknown_Release should return %d, got %d\n", num, hr); \ + } + +-static IUnknown *pVideoRenderer = NULL; +- +-static int create_video_renderer(void) ++static const WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n ) + { +- HRESULT hr; +- +- hr = CoCreateInstance(&CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, +- &IID_IUnknown, (LPVOID*)&pVideoRenderer); +- return (hr == S_OK && pVideoRenderer != NULL); +-} +- +-static void release_video_renderer(void) +-{ +- HRESULT hr; +- +- hr = IUnknown_Release(pVideoRenderer); +- ok(hr == 0, "IUnknown_Release failed with %x\n", hr); ++ const WCHAR *end; ++ for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return ptr; ++ return NULL; + } + + static void test_query_interface(void) + { + HRESULT hr; ++ IUnknown *pVideoRenderer = NULL; + IBaseFilter *pBaseFilter = NULL; + IBasicVideo *pBasicVideo = NULL; + IDirectDrawVideo *pDirectDrawVideo = NULL; +@@ -64,6 +56,15 @@ static void test_query_interface(void) + IQualProp *pQualProp = NULL; + IVideoWindow *pVideoWindow = NULL; + ++ hr = CoCreateInstance(&CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, ++ &IID_IUnknown, (LPVOID*)&pVideoRenderer); ++ ok(hr != S_OK || pVideoRenderer != NULL, "CoCreateInstance returned S_OK, but pVideoRenderer is NULL.\n"); ++ if (hr != S_OK || !pVideoRenderer) ++ { ++ skip("VideoRenderer is not available, skipping QI test.\n"); ++ return; ++ } ++ + QI_SUCCEED(pVideoRenderer, IID_IBaseFilter, pBaseFilter); + RELEASE_EXPECT(pBaseFilter, 1); + QI_SUCCEED(pVideoRenderer, IID_IBasicVideo, pBasicVideo); +@@ -84,6 +85,8 @@ static void test_query_interface(void) + RELEASE_EXPECT(pMediaPosition, 1); + QI_SUCCEED(pVideoRenderer, IID_IVideoWindow, pVideoWindow); + RELEASE_EXPECT(pVideoWindow, 1); ++ ++ RELEASE_EXPECT(pVideoRenderer, 0); + } + + static void test_pin(IPin *pin) +@@ -104,18 +107,28 @@ static void test_pin(IPin *pin) + + static void test_basefilter(void) + { ++ IUnknown *pVideoRenderer = NULL; + IEnumPins *pin_enum = NULL; + IBaseFilter *base = NULL; + IPin *pins[2]; + ULONG ref; + HRESULT hr; + ++ hr = CoCreateInstance(&CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, ++ &IID_IUnknown, (LPVOID*)&pVideoRenderer); ++ ok(hr != S_OK || pVideoRenderer != NULL, "CoCreateInstance returned S_OK, but pVideoRenderer is NULL.\n"); ++ if (hr != S_OK || !pVideoRenderer) ++ { ++ skip("VideoRenderer is not available, skipping BaseFilter test.\n"); ++ return; ++ } ++ + IUnknown_QueryInterface(pVideoRenderer, &IID_IBaseFilter, (void **)&base); + if (base == NULL) + { + /* test_query_interface handles this case */ + skip("No IBaseFilter\n"); +- return; ++ goto out; + } + + hr = IBaseFilter_EnumPins(base, NULL); +@@ -147,19 +160,239 @@ static void test_basefilter(void) + ref = IEnumPins_Release(pin_enum); + ok(ref == 0, "ref is %u and not 0!\n", ref); + +- IBaseFilter_Release(base); ++out: ++ if (base) IBaseFilter_Release(base); ++ RELEASE_EXPECT(pVideoRenderer, 0); ++} ++ ++static void test_monitorconfig7(void) ++{ ++ HRESULT hr; ++ IUnknown *pVMR7 = NULL; ++ IVMRMonitorConfig *pMonitorConfig = NULL; ++ VMRGUID guid; ++ VMRMONITORINFO info[8]; ++ DWORD numdev_total, numdev; ++ GUID max_guid; ++ RECT max_rect; ++ ++ hr = CoCreateInstance(&CLSID_VideoMixingRenderer, NULL, CLSCTX_INPROC_SERVER, ++ &IID_IUnknown, (LPVOID*)&pVMR7); ++ ok(hr != S_OK || pVMR7 != NULL, "CoCreateInstance returned S_OK, but pVMR7 is NULL.\n"); ++ if (hr != S_OK || !pVMR7) ++ { ++ skip("VideoMixingRenderer7 is not available, skipping MonitorConfig7 test.\n"); ++ return; ++ } ++ ++ hr = IUnknown_QueryInterface(pVMR7, &IID_IVMRMonitorConfig, (LPVOID*)&pMonitorConfig); ++ ok(hr == S_OK, "IUnknown_QueryInterface returned %x.\n", hr); ++ ok(pMonitorConfig != NULL, "pMonitorConfig is NULL.\n"); ++ if (!pMonitorConfig) goto out; ++ ++ hr = IVMRMonitorConfig_SetMonitor(pMonitorConfig, NULL); ++ ok(hr == E_POINTER, "SetMonitor returned %x, expected E_POINTER.\n", hr); ++ ++ hr = IVMRMonitorConfig_GetMonitor(pMonitorConfig, NULL); ++ ok(hr == E_POINTER, "GetMonitor returned %x, expected E_POINTER.\n", hr); ++ ++ hr = IVMRMonitorConfig_SetDefaultMonitor(pMonitorConfig, NULL); ++ ok(hr == E_POINTER, "SetDefaultMonitor returned %x, expected E_POINTER.\n", hr); ++ ++ hr = IVMRMonitorConfig_GetDefaultMonitor(pMonitorConfig, NULL); ++ ok(hr == E_POINTER, "GetDefaultMonitor returned %x, expected E_POINTER.\n", hr); ++ ++ memset(&guid, 0, sizeof(guid)); ++ guid.pGUID = NULL; /* default DirectDraw device */ ++ hr = IVMRMonitorConfig_SetMonitor(pMonitorConfig, &guid); ++ ok(hr == S_OK, "SetMonitor failed with %x.\n", hr); ++ ++ memset(&guid, 255, sizeof(guid)); ++ hr = IVMRMonitorConfig_GetMonitor(pMonitorConfig, &guid); ++ ok(hr == S_OK, "GetMonitor failed with %x.\n", hr); ++ ok(guid.pGUID == NULL, "GetMonitor returned guid.pGUID = %p, expected NULL.\n", guid.pGUID); ++ ++ memset(&guid, 0, sizeof(guid)); ++ guid.pGUID = NULL; /* default DirectDraw device */ ++ hr = IVMRMonitorConfig_SetDefaultMonitor(pMonitorConfig, &guid); ++ ok(hr == S_OK, "SetDefaultMonitor failed with %x.\n", hr); ++ ++ memset(&guid, 255, sizeof(guid)); ++ hr = IVMRMonitorConfig_GetDefaultMonitor(pMonitorConfig, &guid); ++ ok(hr == S_OK, "GetDefaultMonitor failed with %x.\n", hr); ++ ok(guid.pGUID == NULL, "GetDefaultMonitor returned guid.pGUID = %p, expected NULL.\n", guid.pGUID); ++ ++ hr = IVMRMonitorConfig_GetAvailableMonitors(pMonitorConfig, NULL, 0, NULL); ++ ok(hr == E_POINTER, "GetAvailableMonitors returned %x, expected E_POINTER.\n", hr); ++ ++ hr = IVMRMonitorConfig_GetAvailableMonitors(pMonitorConfig, info, 0, &numdev_total); ++ ok(hr == E_INVALIDARG, "GetAvailableMonitors returned %x, expected E_INVALIDARG.\n", hr); ++ ++ numdev_total = 0; ++ hr = IVMRMonitorConfig_GetAvailableMonitors(pMonitorConfig, NULL, 0, &numdev_total); ++ ok(hr == S_OK, "GetAvailableMonitors failed with %x.\n", hr); ++ ok(numdev_total > 0, "GetAvailableMonitors returned numdev_total = %d, expected > 0.\n", numdev_total); ++ ++ /* check if its possible to provide a buffer which is too small for all entries */ ++ if (numdev_total > 1) ++ { ++ hr = IVMRMonitorConfig_GetAvailableMonitors(pMonitorConfig, info, 1, &numdev); ++ ok(hr == S_OK, "GetAvailableMonitors failed with %x.\n", hr); ++ ok(numdev == 1, "GetAvailableMonitors returned numdev = %d, expected 1.\n", numdev); ++ } ++ ++ /* don't request information for more monitors than memory available */ ++ if (numdev_total > sizeof(info)/sizeof(info[0])) ++ numdev_total = sizeof(info)/sizeof(info[0]); ++ memset(info, 255, sizeof(info)); ++ hr = IVMRMonitorConfig_GetAvailableMonitors(pMonitorConfig, info, numdev_total, &numdev); ++ ok(hr == S_OK, "GetAvailableMonitors failed with %x.\n", hr); ++ ok(numdev == numdev_total, "GetAvailableMonitors returned numdev = %d, expected %d.\n", numdev, numdev_total); ++ ++ memset(&max_guid, 255, sizeof(max_guid)); ++ memset(&max_rect, 255, sizeof(max_rect)); ++ ++ /* check that result is filled out, we do not check if the values actually make any sense */ ++ while (numdev--) ++ { ++ ok(info[numdev].guid.pGUID == NULL || info[numdev].guid.pGUID == &info[numdev].guid.GUID, ++ "GetAvailableMonitors returned info[%d].guid.pGUID = %p, expected NULL or %p.\n", numdev, info[numdev].guid.pGUID, &info[numdev].guid.GUID); ++ ok(info[numdev].guid.pGUID != &info[numdev].guid.GUID || memcmp(&info[numdev].guid.GUID, &max_guid, sizeof(max_guid)) != 0, ++ "GetAvailableMonitors returned info[%d].GUID = {FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}, expected any other value.\n", numdev); ++ ok(memcmp(&info[numdev].rcMonitor, &max_rect, sizeof(max_rect)) != 0, ++ "GetAvailableMonitors returned info[%d].rcMonitor = {-1, -1, -1, -1}, expected any other value.\n", numdev); ++ ok(info[numdev].hMon != (HMONITOR)0 && info[numdev].hMon != (HMONITOR)-1, ++ "GetAvailableMonitors returned info[%d].hMon = %p, expected != 0 and != -1.\n", numdev, info[numdev].hMon); ++ ok(info[numdev].dwFlags != (DWORD)-1, ++ "GetAvailableMonitors returned info[%d].dwFlags = -1, expected != -1.\n", numdev); ++ ok(memchrW(info[numdev].szDevice, 0, sizeof(info[numdev].szDevice)/sizeof(WCHAR)) != NULL, ++ "GetAvailableMonitors returned info[%d].szDevice without null-termination.\n", numdev); ++ ok(memchrW(info[numdev].szDescription, 0, sizeof(info[numdev].szDescription)/sizeof(WCHAR)) != NULL, ++ "GetAvailableMonitors returned info[%d].szDescription without null-termination.\n", numdev); ++ } ++ ++out: ++ if (pMonitorConfig) IVMRMonitorConfig_Release(pMonitorConfig); ++ RELEASE_EXPECT(pVMR7, 0); ++} ++ ++static void test_monitorconfig9(void) ++{ ++ HRESULT hr; ++ IUnknown *pVMR9 = NULL; ++ IVMRMonitorConfig9 *pMonitorConfig = NULL; ++ UINT uDev; ++ VMR9MonitorInfo info[8]; ++ DWORD numdev_total, numdev; ++ RECT max_rect; ++ ++ hr = CoCreateInstance(&CLSID_VideoMixingRenderer9, NULL, CLSCTX_INPROC_SERVER, ++ &IID_IUnknown, (LPVOID*)&pVMR9); ++ ok(hr != S_OK || pVMR9 != NULL, "CoCreateInstance returned S_OK, but pVMR9 is NULL.\n"); ++ if (hr != S_OK || !pVMR9) ++ { ++ skip("VideoMixingRenderer9 is not available, skipping MonitorConfig9 test.\n"); ++ return; ++ } ++ ++ hr = IUnknown_QueryInterface(pVMR9, &IID_IVMRMonitorConfig9, (LPVOID*)&pMonitorConfig); ++ ok(hr == S_OK, "IUnknown_QueryInterface returned %x.\n", hr); ++ ok(pMonitorConfig != NULL, "pMonitorConfig is NULL.\n"); ++ if (!pMonitorConfig) goto out; ++ ++ hr = IVMRMonitorConfig9_GetMonitor(pMonitorConfig, NULL); ++ ok(hr == E_POINTER, "GetMonitor returned %x, expected E_POINTER.\n", hr); ++ ++ hr = IVMRMonitorConfig9_GetDefaultMonitor(pMonitorConfig, NULL); ++ ok(hr == E_POINTER, "GetDefaultMonitor returned %x, expected E_POINTER.\n", hr); ++ ++ hr = IVMRMonitorConfig9_SetMonitor(pMonitorConfig, 0); ++ ok(hr == S_OK, "SetMonitor failed with %x.\n", hr); ++ ++ uDev = 0xdeadbeef; ++ hr = IVMRMonitorConfig9_GetMonitor(pMonitorConfig, &uDev); ++ ok(hr == S_OK, "GetMonitor failed with %x.\n", hr); ++ ok(uDev == 0, "GetMonitor returned uDev = %d, expected 0.\n", uDev); ++ ++ hr = IVMRMonitorConfig9_SetDefaultMonitor(pMonitorConfig, 0); ++ ok(hr == S_OK, "SetDefaultMonitor failed with %x.\n", hr); ++ ++ uDev = 0xdeadbeef; ++ hr = IVMRMonitorConfig9_GetDefaultMonitor(pMonitorConfig, &uDev); ++ ok(hr == S_OK, "GetDefaultMonitor failed with %x.\n", hr); ++ ok(uDev == 0, "GetDefaultMonitor returned uDev = %d, expected 0.\n", uDev); ++ ++ hr = IVMRMonitorConfig9_GetAvailableMonitors(pMonitorConfig, NULL, 0, NULL); ++ ok(hr == E_POINTER, "GetAvailableMonitors returned %x, expected E_POINTER.\n", hr); ++ ++ hr = IVMRMonitorConfig9_GetAvailableMonitors(pMonitorConfig, info, 0, &numdev_total); ++ ok(hr == E_INVALIDARG, "GetAvailableMonitors returned %x, expected E_INVALIDARG.\n", hr); ++ ++ numdev_total = 0; ++ hr = IVMRMonitorConfig9_GetAvailableMonitors(pMonitorConfig, NULL, 0, &numdev_total); ++ ok(hr == S_OK, "GetAvailableMonitors failed with %x.\n", hr); ++ ok(numdev_total > 0, "GetAvailableMonitors returned numdev_total = %d, expected > 0.\n", numdev_total); ++ ++ /* check if its possible to provide a buffer which is too small for all entries */ ++ if (numdev_total > 1) ++ { ++ hr = IVMRMonitorConfig9_GetAvailableMonitors(pMonitorConfig, info, 1, &numdev); ++ ok(hr == S_OK, "GetAvailableMonitors failed with %x.\n", hr); ++ ok(numdev == 1, "GetAvailableMonitors returned numdev = %d, expected 1.\n", numdev); ++ } ++ ++ if (numdev_total > sizeof(info)/sizeof(info[0])) ++ numdev_total = sizeof(info)/sizeof(info[0]); ++ memset(info, 255, sizeof(info)); ++ hr = IVMRMonitorConfig9_GetAvailableMonitors(pMonitorConfig, info, numdev_total, &numdev); ++ ok(hr == S_OK, "GetAvailableMonitors failed with %x.\n", hr); ++ ok(numdev == numdev_total, "GetAvailableMonitors returned numdev = %d, expected %d.\n", numdev, numdev_total); ++ ++ memset(&max_rect, 255, sizeof(max_rect)); ++ ++ /* check that result is filled out, we do not check if the values actually make any sense */ ++ while (numdev--) ++ { ++ ok(info[numdev].uDevID != (UINT)-1, ++ "GetAvailableMonitors returned info[%d].uDevID = -1, expected != -1.\n", numdev); ++ ok(memcmp(&info[numdev].rcMonitor, &max_rect, sizeof(max_rect)) != 0, ++ "GetAvailableMonitors returned info[%d].rcMonitor = {-1, -1, -1, -1}, expected any other value.\n", numdev); ++ ok(info[numdev].hMon != (HMONITOR)0 && info[numdev].hMon != (HMONITOR)-1, ++ "GetAvailableMonitors returned info[%d].hMon = %p, expected != 0 and != -1.\n", numdev, info[numdev].hMon); ++ ok(info[numdev].dwFlags != (DWORD)-1, ++ "GetAvailableMonitors returned info[%d].dwFlags = -1, expected != -1.\n", numdev); ++ ok(memchrW(info[numdev].szDevice, 0, sizeof(info[numdev].szDevice)/sizeof(WCHAR)) != NULL, ++ "GetAvailableMonitors returned info[%d].szDevice without null-termination.\n", numdev); ++ ok(memchrW(info[numdev].szDescription, 0, sizeof(info[numdev].szDescription)/sizeof(WCHAR)) != NULL, ++ "GetAvailableMonitors returned info[%d].szDescription without null-termination.\n", numdev); ++ ok(info[numdev].dwVendorId != (DWORD)-1, ++ "GetAvailableMonitors returned info[%d].dwVendorId = -1, expected != -1.\n", numdev); ++ ok(info[numdev].dwDeviceId != (DWORD)-1, ++ "GetAvailableMonitors returned info[%d].dwDeviceId = -1, expected != -1.\n", numdev); ++ ok(info[numdev].dwSubSysId != (DWORD)-1, ++ "GetAvailableMonitors returned info[%d].dwSubSysId = -1, expected != -1.\n", numdev); ++ ok(info[numdev].dwRevision != (DWORD)-1, ++ "GetAvailableMonitors returned info[%d].dwRevision = -1, expected != -1.\n", numdev); ++ } ++ ++out: ++ if (pMonitorConfig) IVMRMonitorConfig9_Release(pMonitorConfig); ++ RELEASE_EXPECT(pVMR9, 0); + } + + START_TEST(videorenderer) + { + CoInitialize(NULL); +- if (!create_video_renderer()) +- return; + ++ /* Video Renderer tests */ + test_query_interface(); + test_basefilter(); + +- release_video_renderer(); ++ /* Video Mixing Renderer 7 tests */ ++ test_monitorconfig7(); ++ ++ /* Video Mixing Renderer 9 tests */ ++ test_monitorconfig9(); + + CoUninitialize(); + } +-- +1.7.9.5 + diff --git a/0011-quartz-Workaround-Silverlight-problems-when-multiple-m.patch b/0011-quartz-Workaround-Silverlight-problems-when-multiple-m.patch new file mode 100644 index 0000000..8413bcd --- /dev/null +++ b/0011-quartz-Workaround-Silverlight-problems-when-multiple-m.patch @@ -0,0 +1,35 @@ +From c586d47aabf8741b8526579868c691e77ff5f7c8 Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Thu, 21 Nov 2013 03:37:31 +0100 +Subject: quartz: Workaround Silverlight problems when multiple monitors are + found + +--- + dlls/quartz/vmr9.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c +index 31f3f8e..20da5b9 100644 +--- a/dlls/quartz/vmr9.c ++++ b/dlls/quartz/vmr9.c +@@ -1440,7 +1440,7 @@ static HRESULT WINAPI VMR7MonitorConfig_GetAvailableMonitors(IVMRMonitorConfig * + + args.info7 = info; + args.info9 = NULL; +- args.arraysize = arraysize; ++ args.arraysize = 1; /* only return first entry */ + args.numdev = 0; + EnumDisplayMonitors(NULL, NULL, get_available_monitors_proc, (LPARAM)&args); + +@@ -1540,7 +1540,7 @@ static HRESULT WINAPI VMR9MonitorConfig_GetAvailableMonitors(IVMRMonitorConfig9 + + args.info7 = NULL; + args.info9 = info; +- args.arraysize = arraysize; ++ args.arraysize = 1; /* only return first entry */ + args.numdev = 0; + EnumDisplayMonitors(NULL, NULL, get_available_monitors_proc, (LPARAM)&args); + +-- +1.7.9.5 + diff --git a/wine.rpmlintrc b/wine.rpmlintrc index 81a5148..cf18615 100644 --- a/wine.rpmlintrc +++ b/wine.rpmlintrc @@ -1,2 +1,5 @@ addFilter("E: executable-in-library-package") addFilter("E: non-versioned-file-in-library-package") +addFilter("E: incoherent-version-in-name") +# Intentional - linking to Linux libc would cause symbol clashes with MS libc +addFilter("E: library-not-linked-against-libc") diff --git a/wine.spec b/wine.spec index 3c155c6..00b9cd0 100644 --- a/wine.spec +++ b/wine.spec @@ -5,10 +5,11 @@ %define wine wine %define mark64 %{nil} %endif +%define major 1 %define lib_name_orig lib%{name} -%define lib_major 1 -%define lib_name %mklibname %{name} %{lib_major} -%define lib_name_devel %{mklibname -d wine} +%define libname %mklibname %{name} %{major} +%define devname %{mklibname -d wine} +%define beta %nil # On 32-bit we have # wine32 - those 32-bit binaries that are also used on 64-bit for 32-bit support @@ -19,43 +20,53 @@ Name: wine #(peroyvind): please do backports for new versions -Version: 1.5.28 -%define rel 2 -Release: %{rel} -%define o_ver %{version} +Version: 1.7.8 +%if "%beta" != "" +Release: 0.%beta.1 +Source0: http://mirrors.ibiblio.org/wine/source/%(echo %version |cut -d. -f1-2)/%{name}-%{version}-%beta.tar.bz2 +Source1: http://mirrors.ibiblio.org/wine/source/%(echo %version |cut -d. -f1-2)/%{name}-%{version}-%beta.tar.bz2.sign +%else +Release: 1 +Source0: http://mirrors.ibiblio.org/wine/source/%(echo %version |cut -d. -f1-2)/%{name}-%{version}.tar.bz2 +Source1: http://mirrors.ibiblio.org/wine/source/%(echo %version |cut -d. -f1-2)/%{name}-%{version}.tar.bz2.sign +%endif Epoch: 2 Summary: WINE Is Not An Emulator - runs MS Windows programs License: LGPLv2+ Group: Emulators URL: http://www.winehq.com/ -Source0: http://mirrors.ibiblio.org/wine/source/1.5//%{name}-%{o_ver}.tar.bz2 -Source1: http://mirrors.ibiblio.org/wine/source/1.5//%{name}-%{o_ver}.tar.bz2.sign # RH stuff Source2: wine.init Source10: wine.rpmlintrc Patch0: wine-1.0-rc3-fix-conflicts-with-openssl.patch -Patch1: wine-1.1.7-chinese-font-substitutes.patch # (Anssi 05/2008) Adds: # a: => /media/floppy (/mnt/floppy on 2007.1 and older) # d: => $HOME (at config_dir creation time, not refreshed if $HOME changes; # note that Wine also provides $HOME in My Documents) # only on 2008.0: e: => /media/cdrom (does not exist on 2008.1+) -# only on 2007.1 and older: e: => /mnt/cdrom # com4 => /dev/ttyUSB0 (replaces /dev/ttyS3) # have to substitute @MDKVERSION@ in dlls/ntdll/server.c Patch108: wine-mdkconf.patch Patch200: wine-1.3.24-64bit-tools.patch -#(eandry) add a pulseaudio sound driver (from http://art.ified.ca/downloads/ ) -# Rediff configure.ac patch manually until winepulse upstream fixes it +### pipelight patches +Patch1001: 0001-ws2_32-Ask-the-server-to-process-unsupported-WSAIoct.patch +Patch1002: 0002-server-Implement-an-interface-change-notification-ob.patch +Patch1003: 0003-ws2_32-Add-an-interactive-test-for-interface-change-.patch +Patch1004: 0004-server-Store-and-return-security-attributes-with-ext.patch +Patch1005: 0005-ntdll-Inherit-security-attributes-from-parent-direct.patch +Patch1006: 0006-kernel32-Allow-string-comparison-with-linguistic-cas.patch +Patch1007: 0007-winex11-Update-gl_drawable-for-embedded-windows.patch +Patch1008: 0008-winex11-Enable-disable-windows-when-they-are-un-mapped.patch +Patch1009: 0009-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch +Patch1010: 0010-quartz-tests-Add-tests-for-IVMRMonitorConfig-and-IVMRM.patch +Patch1011: 0011-quartz-Workaround-Silverlight-problems-when-multiple-m.patch # (anssi) Wine needs GCC 4.4+ on x86_64 for MS ABI support. Note also that # 64-bit wine cannot run 32-bit programs without wine32. ExclusiveArch: %{ix86} -%if %{mdkversion} >= 201010 ExclusiveArch: x86_64 -%endif %ifarch x86_64 BuildRequires: gcc >= 4.4 %endif @@ -64,57 +75,55 @@ BuildRequires: bison BuildRequires: flex BuildRequires: gpm-devel BuildRequires: perl-devel -BuildRequires: ncurses-devel +BuildRequires: pkgconfig(ncursesw) BuildRequires: cups-devel -BuildRequires: sane-devel -BuildRequires: lcms-devel +BuildRequires: pkgconfig(sane-backends) +BuildRequires: pkgconfig(lcms) BuildRequires: autoconf BuildRequires: docbook-utils BuildRequires: docbook-dtd-sgml BuildRequires: docbook-utils BuildRequires: docbook-dtd-sgml BuildRequires: sgml-tools -BuildRequires: jackit-devel -BuildRequires: pulseaudio-devel -BuildRequires: libmpg123-devel -BuildRequires: openal-devel -BuildRequires: libalsa-devel -BuildRequires: gstreamer0.10-devel -BuildRequires: libgstreamer0.10-plugins-base-devel +BuildRequires: pkgconfig(jack) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libmpg123) +BuildRequires: pkgconfig(openal) +BuildRequires: pkgconfig(alsa) +BuildRequires: pkgconfig(gstreamer-0.10) +BuildRequires: pkgconfig(gstreamer-plugins-base-0.10) BuildRequires: isdn4k-utils-devel BuildRequires: glibc-static-devel BuildRequires: chrpath BuildRequires: ungif-devel -BuildRequires: xpm-devel -BuildRequires: tiff-devel -BuildRequires: librsvg +BuildRequires: pkgconfig(xpm) +BuildRequires: pkgconfig(libtiff-4) +BuildRequires: pkgconfig(librsvg-2.0) BuildRequires: imagemagick -BuildRequires: libgphoto-devel +BuildRequires: pkgconfig(libgphoto2) BuildRequires: desktop-file-utils BuildRequires: openldap-devel -BuildRequires: libxslt-devel -BuildRequires: dbus-devel +BuildRequires: pkgconfig(libxslt) +BuildRequires: pkgconfig(dbus-1) BuildRequires: valgrind BuildRequires: gsm-devel BuildRequires: unixODBC-devel -BuildRequires: gnutls-devel +BuildRequires: pkgconfig(gnutls) BuildRequires: gettext-devel -BuildRequires: mesaglu-devel -BuildRequires: libv4l-devel -BuildRequires: libxcursor-devel -BuildRequires: libxcomposite-devel -BuildRequires: libxinerama-devel -BuildRequires: libxrandr-devel +BuildRequires: pkgconfig(glu) +BuildRequires: pkgconfig(libv4l2) +BuildRequires: pkgconfig(xcursor) +BuildRequires: pkgconfig(xcomposite) +BuildRequires: pkgconfig(xinerama) +BuildRequires: pkgconfig(xrandr) BuildRequires: pkgconfig(x11) -BuildRequires: libxrender-devel -BuildRequires: libxext-devel -BuildRequires: libsm-devel +BuildRequires: pkgconfig(xrender) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(sm) BuildRequires: fontforge -BuildRequires: fontconfig-devel -BuildRequires: freetype2-devel -%if "%{distepoch}" >= "2011.0" +BuildRequires: pkgconfig(fontconfig) +BuildRequires: pkgconfig(freetype2) BuildRequires: prelink -%endif %define desc Wine is a program which allows running Microsoft Windows programs \ (including DOS, Windows 3.x and Win32 executables) on Unix. It \ @@ -124,7 +133,7 @@ API calls using their Unix or X11 equivalents. The library may also \ be used for porting Win32 code into native Unix executables. %ifarch x86_64 -%package -n %{wine} +%package -n %{wine} Summary: WINE Is Not An Emulator - runs MS Windows programs Group: Emulators Suggests: wine32 = %{EVRD} @@ -136,16 +145,12 @@ Suggests: libncurses.so.5%{mark64} Requires: wine32 = %{EVRD} %endif -Provides: %{wine}-utils = %{EVRD} -Provides: %{wine}-full = %{EVRD} -Provides: %{lib_name}-capi = %{EVRD} -Provides: %{lib_name}-twain = %{EVRD} -Provides: %{lib_name} = %{EVRD} +%rename %{wine}-utils +%rename %{wine}-full +%rename %{libname}-capi +%rename %{libname}-twain +%rename %{libname} Provides: wine-bin = %{EVRD} -Obsoletes: %{wine}-utils %{wine}-full -Obsoletes: %{lib_name}-capi -Obsoletes: %{lib_name}-twain -Obsoletes: %{lib_name} <= %{EVRD} Requires: xmessage Suggests: sane-frontends # wine dlopen's these, so let's add the dependencies ourself @@ -178,7 +183,7 @@ package from the 32-bit repository to be able to run 32-bit applications. %endif %ifarch %{ix86} -%package -n wine32 +%package -n wine32 Summary: 32-bit support for Wine Group: Emulators # This is not an EVR-specific requirement, as otherwise on x86_64 urpmi could @@ -202,11 +207,11 @@ This package contains the files needed to support 32-bit Windows programs. %endif -%package -n %{wine}-devel +%package -n %{wine}-devel Summary: Static libraries and headers for %{name} Group: Development/C Requires: %{wine} = %{EVRD} -%rename %{lib_name_devel} +%rename %{devname} Provides: %{lib_name_orig}-devel = %{EVRD} Obsoletes: %{mklibname -d wine 1} < %{EVRD} %ifarch %{ix86} @@ -225,12 +230,29 @@ develop programs which make use of wine. Wine is often updated. %prep -%setup -q -n %{name}-%{o_ver} -%patch1 -p0 -b .chinese +%if "%beta" != "" +%setup -q -n %name-%version-%beta +%else +%setup -q +%endif %patch108 -p1 -b .conf %patch200 -p1 sed -i 's,@MDKVERSION@,%{mdkversion},' dlls/ntdll/server.c +### Netflix patches + +%patch1001 -p1 +%patch1002 -p1 +%patch1003 -p1 +%patch1004 -p1 +%patch1005 -p1 +%patch1006 -p1 +%patch1007 -p1 +%patch1008 -p1 +%patch1009 -p1 +%patch1010 -p1 +%patch1011 -p1 + %build %ifarch %ix86 # (Anssi 04/2008) bug #39604 @@ -246,8 +268,7 @@ export CFLAGS="%{optflags} -fno-omit-frame-pointer" export ICOTOOL=false autoreconf -%configure2_5x --with-x \ - --with-pulse \ +%configure2_5x --with-pulse \ --without-nas \ %ifarch x86_64 --enable-win64 @@ -424,7 +445,7 @@ EOF %{_mandir}/man1/winemine.1* %{_mandir}/man1/winepath.1* %dir %{_datadir}/%{name} -%{_datadir}/%{name}/generic.ppd +#{_datadir}/%{name}/generic.ppd %{_datadir}/%{name}/%{name}.inf %{_datadir}/%{name}/l_intl.nls %{_datadir}/applications/*.desktop @@ -442,7 +463,7 @@ EOF %{_bindir}/wine-preloader %endif -%{_libdir}/libwine*.so.%{lib_major}* +%{_libdir}/libwine*.so.%{major}* %dir %{_libdir}/%{name} %{_libdir}/%{name}/*.cpl.so %{_libdir}/%{name}/*.drv.so @@ -485,1219 +506,3 @@ EOF %{_mandir}/man1/wineg++.1* %{_mandir}/man1/winegcc.1* %{_mandir}/pl.UTF-8/man1/wine.1* - - -%changelog -* Sat Sep 01 2012 Zombie Ryushu 1:1.5.12-1mdv2012.0 -+ Revision: 816157 -- Upgrade to 1.5.12 - -* Tue Aug 28 2012 Tomasz Pawel Gajc 1:1.5.11-1.2 -+ Revision: 815962 -- correct buildrequires on libgphoto-devel -- spec file clean - - + Zombie Ryushu - - Why is the cluster rejecting this? - -* Tue Aug 21 2012 Zombie Ryushu 1:1.5.11-1 -+ Revision: 815544 -- Upgrade to 1.5.11 - - + Per Øyvind Karlsen - - add suggests on libncurses & libncursesw - -* Thu Aug 02 2012 Zombie Ryushu 1:1.5.10-1 -+ Revision: 811627 -- Upgrade to 1.5.10 - -* Thu Jul 19 2012 Zombie Ryushu 1:1.5.9-1 -+ Revision: 810145 -- Upgrade to 1.5.9 - -* Thu Jul 05 2012 Zombie Ryushu 1:1.5.8-1 -+ Revision: 808157 -- Upgrade to 1.5.8 - -* Sat Jun 30 2012 Per Øyvind Karlsen 1:1.5.7-1 -+ Revision: 807634 -- new version -- update download url - -* Sat Jun 09 2012 Zombie Ryushu 1:1.5.6-1 -+ Revision: 804099 -- Upgrade to 1.5.6 - -* Tue May 29 2012 Zombie Ryushu 1:1.5.5-1 -+ Revision: 801175 -- fnt2bdf -- Upgrade to 1.5.5 - -* Mon May 14 2012 Zombie Ryushu 1:1.5.4-1 -+ Revision: 798763 -- Upgrade to 1.5.4 - -* Sat Apr 28 2012 Zombie Ryushu 1:1.5.3-1 -+ Revision: 794200 -- Upgrade to 1.5.3 - -* Fri Apr 20 2012 Zombie Ryushu 1:1.5.2-1 -+ Revision: 792410 -- remove oname -- Upgrade to 1.5.2 -- setup stage directory - -* Mon Apr 02 2012 Bernhard Rosenkraenzer 1:1.5.1-1 -+ Revision: 788714 -- Update to 1.5.1 - -* Thu Mar 08 2012 Zombie Ryushu 1:1.4-1 -+ Revision: 783218 -- Remove Pre-Release flahs -- Upgrade to 1.4 -- Upgrade to 1.4 - -* Sun Mar 04 2012 Bernhard Rosenkraenzer 1:1.4-0.rc6.1 -+ Revision: 782089 -- Update to rc6 - - + Dmitry Mikhirev - - use %%mark64 for requires - -* Tue Feb 28 2012 Zombie Ryushu 1:1.4-0.rc5.1 -+ Revision: 781187 -- Upgrade to rc5 - -* Mon Feb 20 2012 Per Øyvind Karlsen 1:1.4-0.rc4.2 -+ Revision: 778115 -- use canonical soname dependency on libpng - -* Fri Feb 17 2012 Zombie Ryushu 1:1.4-0.rc4.1 -+ Revision: 776309 -- Upgrade to rc4 - -* Thu Feb 16 2012 Zombie Ryushu 1:1.4-0.rc3.1 -+ Revision: 775112 -- Upgrade to rc3 - -* Sat Feb 04 2012 Zombie Ryushu 1:1.4-0.rc2.1 -+ Revision: 771074 -- Upgrade to rc2 - -* Tue Jan 31 2012 Bernhard Rosenkraenzer 1:1.4-0.rc1.1 -+ Revision: 770033 -- Require the correct version of libpng (1.5, not 1.2) -- Update to 1.4-rc1 -- Fix build with current rpmlint rules - -* Sat Jan 14 2012 Zombie Ryushu 1:1.3.37-1 -+ Revision: 760871 -- Upgrade to 1.3.37 - -* Sun Jan 01 2012 Zombie Ryushu 1:1.3.36-1 -+ Revision: 748543 -- Upgrade to 1.3.36 -- Upgrade to 1.3.36 - -* Sat Dec 17 2011 Zombie Ryushu 1:1.3.35-1 -+ Revision: 743210 -- Upgrade to 1.3.35 - -* Fri Dec 09 2011 Zombie Ryushu 1:1.3.34-1 -+ Revision: 739290 -- Upgrade to 1.3.34 - -* Sat Nov 19 2011 Zombie Ryushu 1:1.3.33-1 -+ Revision: 731770 -- Upgrade to 1.3.33 - -* Sat Nov 05 2011 Zombie Ryushu 1:1.3.32-1 -+ Revision: 719043 -- Upgrade to 1.3.32 - -* Sat Oct 22 2011 Zombie Ryushu 1:1.3.31-1 -+ Revision: 705643 -- Upgrade to 1.3.31 - -* Tue Oct 11 2011 Zombie Ryushu 1:1.3.30-1 -+ Revision: 704325 -- Upgrade to 1.1.30 -- upgrade to 1.3.29 - -* Sat Sep 10 2011 Per Øyvind Karlsen 1:1.3.28-1 -+ Revision: 699297 -- new version -- haul out some trash -- use %%{EVRD} & %%rename macros - -* Tue Sep 06 2011 Zombie Ryushu 1:1.3.27-1 -+ Revision: 698389 -- Fix missing backslash -- Upgrade to 1.3.27 and deprecated un-needed Winepulse patches - -* Sat Aug 06 2011 Zombie Ryushu 1:1.3.26-1 -+ Revision: 693381 -- Upgrade to 1.3.26 - -* Thu Aug 04 2011 Zombie Ryushu 1:1.3.25-1 -+ Revision: 693162 -- Deprecate Winepulse -- Upgrade to 1.3.25 - -* Sat Jul 09 2011 Zombie Ryushu 1:1.3.24-1 -+ Revision: 689372 -- Upgrade to 1.3.24 - -* Sat Jun 25 2011 Zombie Ryushu 1:1.3.23-1 -+ Revision: 687173 -- Upgrade to 1.3.23 - -* Sun Jun 12 2011 Zombie Ryushu 1:1.3.22-2.2 -+ Revision: 684354 -- Update Build deps because some were missing -- Fix man page - -* Fri Jun 10 2011 Zombie Ryushu 1:1.3.22-2 -+ Revision: 684188 -- Fix man page -- Fix man page -- Upgrade to 1.3.22 - -* Sat May 28 2011 Funda Wang 1:1.3.21-1 -+ Revision: 680398 -- update to new version 1.3.21 - -* Sat May 14 2011 Funda Wang 1:1.3.20-2 -+ Revision: 674586 -- rediff winepulse configure.ac patch - - + Zombie Ryushu - - Upgrade 1.3.20 - -* Mon May 09 2011 Anssi Hannula 1:1.3.19-2 -+ Revision: 673040 -- add suggests on wine64-gecko in wine64 -- update old comment in .spec - -* Sun May 01 2011 Zombie Ryushu 1:1.3.19-1 -+ Revision: 661378 -- Fix Winepulse -- Fix Winepulse -- Upgrade to 1.3.19 - -* Thu Apr 21 2011 Zombie Ryushu 1:1.3.18-1 -+ Revision: 656561 -- Upgrade to wine 1.3.18 - -* Sat Apr 09 2011 Zombie Ryushu 1:1.3.17-2 -+ Revision: 652133 -- Fix missing build deps - -* Sat Apr 09 2011 Funda Wang 1:1.3.17-1 -+ Revision: 652086 -- X11-devel is not needed -- new version 1.3.17 -- rediff winpusle configure patch - - + Zombie Ryushu - - Reset Releaseflag - - Upgrade to 1.3.16 - - add X11-devel - - compile with gstreamer - - Add gettext-devel - -* Sun Mar 13 2011 Zombie Ryushu 1:1.3.15-2 -+ Revision: 644144 -- Upgrade to 1.3.15 and restore Winepulse patch - -* Sat Feb 26 2011 Funda Wang 1:1.3.14-2 -+ Revision: 639995 -- rebuild - -* Fri Feb 18 2011 Zombie Ryushu 1:1.3.14-1 -+ Revision: 638605 -- Update to 1.3.14 - -* Sat Feb 05 2011 Zombie Ryushu 1:1.3.13-1 -+ Revision: 636021 -- Update to 1.3.13 - -* Wed Jan 26 2011 Zombie Ryushu 1:1.3.12-1 -+ Revision: 633001 -- remove deprecated patch preventing building -- Upgrade to 1.3.12 - -* Fri Jan 07 2011 Ahmad Samir 1:1.3.11-1mdv2011.0 -+ Revision: 629667 -- update to 1.3.11 - - + Funda Wang - - tighten BR - -* Fri Dec 24 2010 Ahmad Samir 1:1.3.10-1mdv2011.0 -+ Revision: 624675 -- update to 1.3.10 -- rediff the winepulse-configure.ac patch -- update the file list - -* Fri Dec 17 2010 Ahmad Samir 1:1.3.9-2mdv2011.0 -+ Revision: 622434 -- make the prelink BR condintional, so that the package can be backported - -* Fri Dec 10 2010 Ahmad Samir 1:1.3.9-1mdv2011.0 -+ Revision: 620457 -- update to 1.3.9 -- rediff winepulse-configure.ac patch -- add gstreamer*-devel as BR for gstreamer support -- add BR prelink - -* Wed Dec 01 2010 Funda Wang 1:1.3.8-2mdv2011.0 -+ Revision: 604301 -- update file list -- new verison 1.3.8 - -* Sat Nov 13 2010 Ahmad Samir 1:1.3.7-1mdv2011.0 -+ Revision: 597055 -- Update to 1.3.7 - -* Sat Oct 30 2010 Ahmad Samir 1:1.3.6-1mdv2011.0 -+ Revision: 590647 -- update to wine-1.3.6 -- rediff winepulse-configure.ac manually for now -- update str-fmt patch - -* Sat Oct 16 2010 Ahmad Samir 1:1.3.5-1mdv2011.0 -+ Revision: 585933 -- update to 1.3.5 - -* Sat Oct 02 2010 Anssi Hannula 1:1.3.4-2mdv2011.0 -+ Revision: 582531 -- remove version-specific dependency on wine-bin from wine32 to avoid - possible upgrade problems on x86_64 (32-bit installations were replaced - with 32+64-bit installations) - -* Sat Oct 02 2010 Ahmad Samir 1:1.3.4-1mdv2011.0 -+ Revision: 582416 -- update to 1.3.4 -- update two of pulseaudio patches (winepulse and winepulse-configure.ac) to 0.39 - -* Sat Sep 18 2010 Ahmad Samir 1:1.3.3-1mdv2011.0 -+ Revision: 579758 -- new version, 1.3.3 -- update to 1.3.2 - -* Fri Aug 20 2010 Ahmad Samir 1:1.3.1-1mdv2011.0 -+ Revision: 571519 -- update to 1.3.1 - -* Fri Jul 30 2010 Ahmad Samir 1:1.3.0-1mdv2011.0 -+ Revision: 563794 -- update to 1.3.0 - -* Wed Jul 21 2010 Ahmad Samir 1:1.2-3mdv2011.0 -+ Revision: 556588 -- provide a .desktop file for 'wine uninstaller' - -* Sat Jul 17 2010 Thierry Vignaud 1:1.2-2mdv2011.0 -+ Revision: 554460 -- BuildRequires: gnutls-devel tiff-devel libv4l-devel according to annouce - -* Fri Jul 16 2010 Ahmad Samir 1:1.2-1mdv2011.0 -+ Revision: 554424 -- update to 1.2 final -- use the icons of notepad,winefile,regedit,winemine for their respective .desktop files - -* Sat Jul 10 2010 Anssi Hannula 1:1.2-0.rc7.1mdv2011.0 -+ Revision: 549898 -- split 32-bit package to 'wine' and 'wine32' - o 'wine32' contains only the files needed for 32-bit support on 64-bit - o 'wine' contains all the other files - o one can now install both 'wine64' and 'wine32' on x86_64 and run both - 64-bit and 32-bit applications - o on 32-bit systems both 'wine' and 'wine32' are needed -- fix .desktop file of wine64 - - + Ahmad Samir - - new release, 1.2-rc7 - - update all winepulse patches to 0.38 - -* Mon Jun 21 2010 Ahmad Samir 1:1.2-0.rc4.1mdv2010.1 -+ Revision: 548353 -- new upstream release, 1.2-rc4 - -* Sat Jun 12 2010 Ahmad Samir 1:1.2-0.rc3.1mdv2010.1 -+ Revision: 547953 -- new upstream release 1.2-rc3 -- update winepulse-0.36-winecfg to 0.37 - -* Mon May 31 2010 Ahmad Samir 1:1.2-0.rc2.2mdv2010.1 -+ Revision: 546774 -- add requires on libpng3 as it's dlopened fixes winemenubuilder crash - (mdv #59578) - -* Sat May 29 2010 Ahmad Samir 1:1.2-0.rc2.1mdv2010.1 -+ Revision: 546574 -- new upstream release 1.2-rc2 - -* Sun May 09 2010 Ahmad Samir 1:1.1.44-1mdv2010.1 -+ Revision: 544287 -- update to 1.1.44 -- update to winepulse-0.36-winecfg.patch -- stay with manually rediffed winepulse-configure.ac.patch as upstream's still - doesn't work - -* Thu May 06 2010 Anssi Hannula 1:1.1.43-2mdv2010.1 -+ Revision: 542937 -- require dlopened libxrender1 (fixes at least Spotify issues, reported - by Mikko Kuivaniemi) - -* Fri Apr 16 2010 Ahmad Samir 1:1.1.43-1mdv2010.1 -+ Revision: 535640 -- new upstream release 1.1.43 -- fix file list - -* Fri Apr 02 2010 Ahmad Samir 1:1.1.42-1mdv2010.1 -+ Revision: 530790 -- new upstream release 1.1.42 -- remove the winepule makefile sed hack, fixed upstream -- update winepulse patch to 0.36 -- update winepule-winecfg patch to 0.34 -- rediff winepulse-configure.ac patch manually until winepulse upstream updates it - -* Sat Mar 20 2010 Ahmad Samir 1:1.1.41-1mdv2010.1 -+ Revision: 525418 -- add a hack to make it build with winepulse -- parallel make works again -- disable esd, it's old, and pulseaudio (via winepulse) can do esd - - + Funda Wang - - new version 1.1.41 - -* Sat Mar 13 2010 Funda Wang 1:1.1.40-1mdv2010.1 -+ Revision: 518737 -- build non-parallelly -- new version 1.1.40 - -* Sat Feb 20 2010 Emmanuel Andry 1:1.1.39-1mdv2010.1 -+ Revision: 508703 -- drop obsolete esound-devel BR -- New version 1.1.39 - -* Sat Feb 06 2010 Funda Wang 1:1.1.38-1mdv2010.1 -+ Revision: 501310 -- update winepulse patches -- New version 1.1.38 - - + Anssi Hannula - - add notices to the description and README.install.urpmi of x86_64 - wine64 packages that explain that it cannot be used to run 32-bit - Windows applications - -* Fri Jan 22 2010 Frederik Himpe 1:1.1.37-1mdv2010.1 -+ Revision: 495081 -- update to new version 1.1.37 - - + Per Øyvind Karlsen - - add suggests on sane-frontends (#57193) - -* Tue Jan 12 2010 Anssi Hannula 1:1.1.36-3mdv2010.1 -+ Revision: 490060 -- move main description block below tags (fixes tags and description in - 32-bit build) - -* Mon Jan 11 2010 Per Øyvind Karlsen 1:1.1.36-2mdv2010.1 -+ Revision: 489885 -- add conflicts on wine64 for wine package and vice versa -- suggest wine-gecko only for 32 bit wine -- drop library package as library isn't of much use without binary... -- fix so that dependencies, obsoletes etc. gets in place for wine64 package -- do 64 bit build again (with some improvements, still not parallel installable - with 32 bit build though..) -- remove backwards compatibility for ancient menu structure -- add back service scriptlets that got accidentally removed earlier... - -* Sat Jan 09 2010 Funda Wang 1:1.1.36-1mdv2010.1 -+ Revision: 488104 -- update file list again -- update file list -- New version 1.1.36 - - + Per Øyvind Karlsen - - disable 64 bit build for now.. - - make 32 bit library dependencies specific to %%{ix86} only - - ditch requires_exceptions, wine dlopen()'s all libraries anyways.. - - get rid of some pre/post requires that were required in dead scriptlets - - get rid of obsolete scriptlets - - add initial support for wine64... - - enable pulseaudio patches that I for some reason accidentally disabled previously.. - -* Sat Dec 19 2009 Funda Wang 1:1.1.35-1mdv2010.1 -+ Revision: 480043 -- new version 1.1.35 - - + Anssi Hannula - - add suggests on wine-gecko - -* Mon Dec 07 2009 Emmanuel Andry 1:1.1.34-3mdv2010.1 -+ Revision: 474373 -- update P401 - -* Sun Dec 06 2009 Per Øyvind Karlsen 1:1.1.34-2mdv2010.1 -+ Revision: 474268 -- add library dependencies for alsa & freetype -- ditch nonsense explicit dependency on library package - -* Sat Dec 05 2009 Ahmad Samir 1:1.1.34-1mdv2010.1 -+ Revision: 473851 -- Update to 1.1.34 - -* Sat Nov 14 2009 Funda Wang 1:1.1.33-1mdv2010.1 -+ Revision: 465944 -- new version 1.1.33 - -* Sat Oct 24 2009 Frederic Crozat 1:1.1.32-1mdv2010.0 -+ Revision: 459155 -- Release 1.1.32 - -* Mon Oct 19 2009 Emmanuel Andry 1:1.1.31-2mdv2010.0 -+ Revision: 458259 -- reenable and update P400 - -* Sat Oct 10 2009 Zombie Ryushu 1:1.1.31-1mdv2010.0 -+ Revision: 456511 -- Remove Deprecated Pulse patch -- Upgrade to version 1.1.31 - -* Sat Sep 26 2009 Emmanuel Andry 1:1.1.30-1mdv2010.0 -+ Revision: 449458 -- New version 1.1.30 -- update P400 and P402 -- BR openal-devel - - + Anssi Hannula - - add missing buildrequires on gphoto2-devel unixODBC-devel - -* Mon Sep 07 2009 Emmanuel Andry 1:1.1.29-1mdv2010.0 -+ Revision: 432638 -- New version 1.1.29 -- update P402 -- BR libmpg123-devel - -* Sat Aug 22 2009 Funda Wang 1:1.1.28-1mdv2010.0 -+ Revision: 419578 -- fix file list -- New version 1.1.28 - -* Wed Aug 19 2009 Emmanuel Andry 1:1.1.27-3mdv2010.0 -+ Revision: 418119 -- update winepulse patches -- add menu entries for wineboot and wineconsole - -* Mon Aug 10 2009 Emmanuel Andry 1:1.1.27-2mdv2010.0 -+ Revision: 414323 -- BR gsm-devel -- drop old 2007.0 conditionnals - -* Sat Aug 08 2009 Funda Wang 1:1.1.27-1mdv2010.0 -+ Revision: 411565 -- rediff pulseaudio patch -- new version 1.1.27 - -* Sat Jul 25 2009 Emmanuel Andry 1:1.1.26-2mdv2010.0 -+ Revision: 399779 -- update winepulse to 0.29 - -* Sat Jul 18 2009 Funda Wang 1:1.1.26-1mdv2010.0 -+ Revision: 396970 -- update wine patch -- new version 1.1.26 - -* Sun Jul 05 2009 Funda Wang 1:1.1.25-1mdv2010.0 -+ Revision: 392574 -- New version 1.1.25 - -* Sun Jun 07 2009 Funda Wang 1:1.1.23-1mdv2010.0 -+ Revision: 383427 -- fix str fmt -- New version 1.1.23 - -* Sat May 23 2009 Funda Wang 1:1.1.22-1mdv2010.0 -+ Revision: 378877 -- New version 1.1.22 - -* Sat May 09 2009 Funda Wang 1:1.1.21-1mdv2010.0 -+ Revision: 373696 -- New version 1.1.21 - -* Wed Apr 29 2009 Emmanuel Andry 1:1.1.20-1mdv2010.0 -+ Revision: 369137 -- New version 1.1.20 - -* Tue Apr 14 2009 Emmanuel Andry 1:1.1.19-1mdv2009.1 -+ Revision: 366908 -- New version 1.1.19 -- update winepulse driver - -* Wed Mar 18 2009 Emmanuel Andry 1:1.1.17-2mdv2009.1 -+ Revision: 357306 -- disable nas (#48843) - -* Sat Mar 14 2009 Emmanuel Andry 1:1.1.17-1mdv2009.1 -+ Revision: 355121 -- fix chrpath arguments -- update files list -- add winepulse sound driver (fedora) -- New version 1.1.17 -- drop patch 109 (merged upstream) - - + Anssi Hannula - - add back 64-bit comments that were erroneously removed in r355000 - -* Sat Feb 28 2009 Funda Wang 1:1.1.16-1mdv2009.1 -+ Revision: 346000 -- fix file list -- New version 1.1.16 - -* Fri Feb 13 2009 Emmanuel Andry 1:1.1.15-1mdv2009.1 -+ Revision: 340139 -- New version 1.1.15 -- drop P110, fixed diffently upstream - - + Anssi Hannula - - update comments in spec about wine64 according to recent developments - -* Fri Jan 30 2009 Funda Wang 1:1.1.14-1mdv2009.1 -+ Revision: 335650 -- new version 1.1.14 - -* Sun Jan 18 2009 Funda Wang 1:1.1.13-1mdv2009.1 -+ Revision: 330836 -- New version 1.1.13 - -* Sat Jan 03 2009 Funda Wang 1:1.1.12-1mdv2009.1 -+ Revision: 323571 -- New version 1.1.12 - -* Sun Dec 21 2008 Funda Wang 1:1.1.11-1mdv2009.1 -+ Revision: 316867 -- new version 1.1.11 - - + Oden Eriksson - - lowercase ImageMagick - -* Sat Dec 06 2008 Funda Wang 1:1.1.10-1mdv2009.1 -+ Revision: 310958 -- New version 1.1.10 - -* Sat Nov 22 2008 Funda Wang 1:1.1.9-1mdv2009.1 -+ Revision: 305697 -- wineshelllink is merged into winemenubuilder - - + Emmanuel Andry - - New version - -* Sat Nov 08 2008 Funda Wang 1:1.1.8-2mdv2009.1 -+ Revision: 300925 -- New version 1.1.8 - -* Wed Oct 29 2008 Funda Wang 1:1.1.7-2mdv2009.1 -+ Revision: 298147 -- better chinese font substitute list - -* Tue Oct 28 2008 Funda Wang 1:1.1.7-1mdv2009.1 -+ Revision: 297804 -- New version 1.1.7 - -* Sat Oct 11 2008 Funda Wang 1:1.1.6-1mdv2009.1 -+ Revision: 291790 -- New version 1.1.6 - -* Sat Sep 06 2008 Funda Wang 1:1.1.4-1mdv2009.0 -+ Revision: 281787 -- New version 1.1.4 - -* Sat Aug 23 2008 Funda Wang 1:1.1.3-1mdv2009.0 -+ Revision: 275341 -- New version 1.1.3 - -* Fri Jul 25 2008 Funda Wang 1:1.1.2-1mdv2009.0 -+ Revision: 249803 -- add cpl.so -- New version 1.1.2 - - + Emmanuel Andry - - New version - -* Sat Jun 28 2008 Funda Wang 1:1.1.0-1mdv2009.0 -+ Revision: 229612 -- New version 1.1.0 - -* Tue Jun 17 2008 Anssi Hannula 1:1.0-1mdv2009.0 -+ Revision: 222989 -- final 1.0 - -* Sat Jun 14 2008 Funda Wang 1:1.0-0.rc5.1mdv2009.0 -+ Revision: 219112 -- New version 1.0 rc5 - - + Pixel - - rpm filetriggers deprecates update_menus/update_scrollkeeper/update_mime_database/update_icon_cache/update_desktop_database/post_install_gconf_schemas - - do not call ldconfig in %%post/%%postun, it is now handled by filetriggers - -* Sat Jun 07 2008 Funda Wang 1:1.0-0.rc4.1mdv2009.0 -+ Revision: 216649 -- New version 1.0 rc4 -- disable patch0, it seems there is a better solution upstream - -* Mon Jun 02 2008 Funda Wang 1:1.0-0.rc3.1mdv2009.0 -+ Revision: 214176 -- fix for newer openssl -- New version 1.0 rc3 - -* Fri May 23 2008 Anssi Hannula 1:1.0-0.rc2.1mdv2009.0 -+ Revision: 210752 -- new version -- update file list - -* Tue May 13 2008 Anssi Hannula 1:1.0-0.rc1.2mdv2009.0 -+ Revision: 206812 -- make d: $HOME again -- make e: cdrom on 2008.0 and older, not on 2008.1 as /media/cdrom does - not exist by default -- use /mnt instead of /media on 2007.1 and earlier - -* Sun May 11 2008 Anssi Hannula 1:1.0-0.rc1.1mdv2009.0 -+ Revision: 205445 -- new version -- adapt mdkconf.patch for rewritten dosdevices creation -- change dos device mappings (will affect newly created wine prefixes - only): - o reintroduce D: => /media/cdrom mapping, it is not handled - automatically - o change home dir from D: to E: - o drop E: => ~/tmp mapping - o replace COM4 => /dev/modem with COM4 => /dev/ttyUSB0 - o drop explicit COM1-3 and LPT1 mappings, they are handled - automatically by wine (it maps them to /dev/ttySX and /dev/lpX) -- drop "My Documents" directory from Windows directory, it was - apparently inadvertently added on an earlier rediffing of mdkconf.patch -- drop duplicate buildroot entry -- drop now unneeded CVS file cleaning -- drop unsupported option --enable-opengl (it is enabled by default) -- use parallel make for make depend -- drop unneeded additional make and make install calls in programs/ - subdirectory - -* Tue Apr 22 2008 Anssi Hannula 1:0.9.60-1mdv2009.0 -+ Revision: 196630 -- new version -- rediff mdkconf patch -- update file list - -* Sun Apr 13 2008 Anssi Hannula 1:0.9.59-1mdv2009.0 -+ Revision: 192650 -- do not buildrequire icoutils for now -- new version -- rediff fontforge-symbol-font.patch and add comments -- buildrequires valgrind icoutils librsvg -- fix "debugger detected" errors with some protection systems (#39604) - by disabling -fomit-frame-pointer - -* Sun Mar 30 2008 Anssi Hannula 1:0.9.58-2mdv2008.1 -+ Revision: 191173 -- revert commit 191172 (Emmanuel Aundry), there is no --disable-debug - option (debugging is still enabled) - - + Emmanuel Andry - - disable debug to please cd protections - - add patch from ubuntu to fix some font rendering (#39552) - -* Mon Mar 24 2008 Anssi Hannula 1:0.9.58-1mdv2008.1 -+ Revision: 189764 -- move wine backport branch as the main branch -- new version -- rediff mdkconf patch -- prepare branch for backporting wine during 2008.1 freeze - -* Thu Mar 20 2008 Per Øyvind Karlsen 1:0.9.56-2mdv2008.1 -+ Revision: 189141 -- sorta ressurect esd patch since there's still issues (remaining issues seems to lie - with pulseaudio and not wine), but only use esd if alsa fails (ie. in case of - pulseaudio occupying sound device). This way you'll only get wine wine sound latency - in cases where you otherwise wouldn't have any sound at all. (P109) - -* Sun Feb 24 2008 Funda Wang 1:0.9.56-1mdv2008.1 -+ Revision: 174204 -- New version 0.9.56 - -* Mon Feb 18 2008 Thierry Vignaud 1:0.9.55-4mdv2008.1 -+ Revision: 171173 -- rebuild - -* Thu Feb 14 2008 Per Øyvind Karlsen 1:0.9.55-3mdv2008.1 -+ Revision: 167747 -- drop bogus patch for #37259 as it's not only wrong, but also broken -- drop symlink for /media/cdrom as it's handled by HAL (#37362) - -* Wed Feb 13 2008 Frederic Crozat 1:0.9.55-2mdv2008.1 -+ Revision: 167078 -- Patch109: try esd before Alsa for PulseAudio (only on 2008.1 and later) (Mdv bug #37259) - - + Funda Wang - - New devel package policy - -* Sat Feb 09 2008 Funda Wang 1:0.9.55-1mdv2008.1 -+ Revision: 164391 -- New version 0.9.55 - - + Per Øyvind Karlsen - - fix inccorect link to cdrom & floppy in wineprefixcreate (fixes #37362) - -* Sat Jan 26 2008 Funda Wang 1:0.9.54-1mdv2008.1 -+ Revision: 158296 -- New version 0.9.54 - -* Sat Jan 12 2008 Funda Wang 1:0.9.53-1mdv2008.1 -+ Revision: 149704 -- New version 0.9.53 -- restore buildroot - - + Olivier Blin - - restore BuildRoot - -* Sat Dec 29 2007 Funda Wang 1:0.9.52-1mdv2008.1 -+ Revision: 139050 -- New version 0.9.52 - - + Thierry Vignaud - - kill re-definition of %%buildroot on Pixel's request - -* Sat Dec 15 2007 Funda Wang 1:0.9.51-1mdv2008.1 -+ Revision: 120291 -- add de man page -- New version 0.9.51 - -* Sat Dec 01 2007 Funda Wang 1:0.9.50-1mdv2008.1 -+ Revision: 114240 -- New version 0.9.50 - -* Sat Nov 10 2007 Funda Wang 1:0.9.49-1mdv2008.1 -+ Revision: 107403 -- New version 0.9.49 - -* Tue Nov 06 2007 Funda Wang 1:0.9.48-2mdv2008.1 -+ Revision: 106463 -- rebuild for new lzma - -* Sun Oct 28 2007 Funda Wang 1:0.9.48-1mdv2008.1 -+ Revision: 102744 -- New version 0.9.48 - -* Sat Oct 13 2007 Funda Wang 1:0.9.47-1mdv2008.1 -+ Revision: 97817 -- New version 0.9.47 - -* Tue Oct 09 2007 Funda Wang 1:0.9.46-1mdv2008.1 -+ Revision: 96063 -- New version 0.9.46 -- drop old menu - -* Fri Aug 31 2007 Anssi Hannula 1:0.9.44-2mdv2008.0 -+ Revision: 76970 -- adapt wine submenu to the new menu structure - - + Thierry Vignaud - - kill desktop-file-validate's 'warning: key "Encoding" in group "Desktop Entry" is deprecated' - -* Sat Aug 25 2007 Funda Wang 1:0.9.44-1mdv2008.0 -+ Revision: 71334 -- rediff prefix patch -- New version 0.9.44 - -* Thu Aug 23 2007 Thierry Vignaud 1:0.9.43-2mdv2008.0 -+ Revision: 69712 -- kill ldconfig require as requested by pixel - -* Sun Aug 12 2007 Funda Wang 1:0.9.43-1mdv2008.0 -+ Revision: 62172 -- New version 0.9.43 - -* Fri Aug 03 2007 Anssi Hannula 1:0.9.42-1mdv2008.0 -+ Revision: 58393 -- 0.9.42 - -* Sat Jul 14 2007 Funda Wang 1:0.9.41-1mdv2008.0 -+ Revision: 52009 -- New version - -* Sat Jun 30 2007 Funda Wang 1:0.9.40-1mdv2008.0 -+ Revision: 45993 -- New version - -* Wed Jun 27 2007 Andreas Hasenack 1:0.9.39-2mdv2008.0 -+ Revision: 44945 -- rebuild with new rpm-mandriva-setup (-fstack-protector) - -* Sat Jun 16 2007 Funda Wang 1:0.9.39-1mdv2008.0 -+ Revision: 40325 -- New version - -* Fri Jun 01 2007 Per Øyvind Karlsen 1:0.9.38-1mdv2008.0 -+ Revision: 34387 -- new release: 0.9.38 - -* Sat May 12 2007 David Walluck 1:0.9.37-1mdv2008.0 -+ Revision: 26415 -- 0.9.37 - -* Fri Apr 27 2007 Per Øyvind Karlsen 1:0.9.36-1mdv2008.0 -+ Revision: 18750 -- oops, forgot signature -- new release: 0.9.36 - -* Thu Apr 19 2007 David Walluck 1:0.9.35-1mdv2008.0 -+ Revision: 14962 -- 0.9.35 -- 0.9.34 - - -* Sun Mar 18 2007 David Walluck -+ 2007-03-18 19:40:25 (146189) -- 0.9.33 - -* Sun Mar 04 2007 Anssi Hannula 0.9.32-1mdv2007.1 -+ 2007-03-04 02:48:54 (131975) -- remove source1 from spec too (SILENT) -- from Per Øyvind Karlsen - - new release: 0.9.32 - -* Fri Feb 16 2007 David Walluck 0.9.31-1mdv2007.1 -+ 2007-02-16 23:17:01 (122042) -- 0.9.31 - bunzip2 patches - wine.init should not be mode 755 in SRPM - -* Sun Jan 28 2007 Per Øyvind Karlsen 0.9.30-1mdv2007.1 -+ 2007-01-28 13:16:56 (114488) -- new release: 0.9.30 - drop P112 (fixed upstream) - -* Thu Jan 11 2007 Anssi Hannula 0.9.29-1mdv2007.1 -+ 2007-01-11 22:01:12 (107674) -- 0.9.29 - -* Fri Dec 22 2006 Anssi Hannula 0.9.28-1mdv2007.1 -+ 2006-12-22 20:01:19 (101655) -- 0.9.28 - -* Sat Dec 16 2006 Anssi Hannula 0.9.27-2mdv2007.1 -+ 2006-12-16 03:46:22 (98021) -- add a workaround for kde .exe association (#27700) - -* Sat Dec 16 2006 Anssi Hannula 0.9.27-1mdv2007.1 -+ 2006-12-16 01:46:11 (98013) -- 0.9.27 - o requires Mandriva 2007.0 or newer for start menu entry creation -- clean already removed patches from spec -- drop non-working patch107, start menu and desktop entries now as upstream -- add xdg wine submenu -- remove rpath from wmc and wrc too - -* Fri Dec 01 2006 Anssi Hannula 0.9.26-1mdv2007.1 -+ 2006-12-01 15:47:08 (89701) -- 0.9.26 - -* Sat Nov 11 2006 Anssi Hannula 0.9.25-1mdv2007.1 -+ 2006-11-11 23:02:35 (83226) -- 0.9.25 - -* Sat Nov 04 2006 Anssi Hannula 0.9.24-1mdv2007.1 -+ 2006-11-04 22:11:49 (76646) -- update filelist -- 0.9.24 -- disable x86_64 as it does not build correctly yet -- Import wine - -* Sat Sep 16 2006 Anssi Hannula 0.9.20-5mdv2007.0 -- rebuild to fix binary rpm upload - -* Tue Sep 12 2006 Anssi Hannula 0.9.20-4mdv2007.0 -- fix buildrequires - -* Sun Sep 10 2006 Per Øyvind Karlsen 0.9.20-3mdv2007.0 -- fix install of fnt2bdf - -* Sat Aug 26 2006 Götz Waschk 0.9.20-2mdv2007.0 -- fix buildrequires - -* Fri Aug 25 2006 Per Øyvind Karlsen 0.9.20-1mdv2007.0 -- New release 0.9.20 - -* Fri Aug 11 2006 Per Øyvind Karlsen 1:0.9.19-1mdv2007.0 -- New release 0.9.19 - -* Thu Aug 03 2006 Per Øyvind Karlsen 0.9.18-2mdv2007.0 -- initscript fixes: - o do a check before trying to enable wine registration - o fix formatting of success/failure output - o use gprintf in stead of echo to make it translatable - -* Tue Aug 01 2006 Per Øyvind Karlsen 0.9.18-1mdv2007.0 -- 0.9.18 - -* Sun Jul 16 2006 Per Øyvind Karlsen 1:0.9.17-1mdv2007.0 -- New release 0.9.17 -- new xdg menu (that might be broken:p) -- fix macro-in-%%changelog - -* Fri Jun 23 2006 Per Øyvind Karlsen 0.9.16-1mdv2007.0 -- New release 0.9.16 -- fix backport for 2006.0 -- don't build on sparc - -* Wed Jun 14 2006 Per Øyvind Karlsen 0.9.15-1mdv2007.0 -- 0.9.15 - -* Fri May 26 2006 Per Øyvind Karlsen 0.9.14-1mdk -- New release 0.9.14 - -* Sat May 20 2006 Thierry Vignaud 0.9.13-3mdk -- fix requires for xorg7 (s/X11R6-contrib/xmessage/) -- fix buildrequires - -* Sat May 13 2006 Per Øyvind Karlsen 0.9.13-2mdk -- fix path in menu P207 (fixes #21842) - -* Fri May 12 2006 Per Øyvind Karlsen 1:0.9.13-1mdk -- New release 0.9.13 -- get rid of rpath - -* Thu Apr 20 2006 Per Øyvind Karlsen 0.9.12-1mdk -- New release 0.9.12 - -* Sat Apr 01 2006 Per Øyvind Karlsen 0.9.11-1mdk -- New release 0.9.11 - -* Sat Apr 01 2006 Per Øyvind Karlsen 0.9.10-2mdk -- Rebuild - -* Thu Mar 16 2006 Per Øyvind Karlsen 0.9.10-1mdk -- New release 0.9.10 - -* Fri Mar 03 2006 Per Øyvind Karlsen 0.9.9-1mdk -- New release 0.9.9 - -* Mon Feb 20 2006 Per Øyvind Karlsen 0.9.8-1mdk -- New release 0.9.8 -- drop destdir patch (P1) as it's finally fixed upstream! - -* Thu Feb 02 2006 Per Øyvind Karlsen 0.9.7-1mdk -- 0.9.7 -- requires(bla,bla) -> requires(bla) requires(bla) - -* Thu Jan 19 2006 Per Øyvind Karlsen 0.9.6-1mdk -- New release 0.9.6 -- drop P115 (fixed upstream) - -* Thu Jan 12 2006 Per Øyvind Karlsen 0.9.5-3mdk -- fix WMF vulnerability (P115, from Ubuntu) - -* Mon Jan 09 2006 Olivier Blin 0.9.5-2mdk -- convert parallel init to LSB - -* Fri Jan 06 2006 Per Øyvind Karlsen 0.9.5-1mdk -- New release 0.9.5 - -* Tue Jan 03 2006 Per Øyvind Karlsen 0.9.4-3mdk -- parallel init support - -* Sat Dec 31 2005 Per Øyvind Karlsen 0.9.4-2mdk -- force dependency on current library version (fixes #19522) - -* Fri Dec 23 2005 Per Øyvind Karlsen 0.9.4-1mdk -- New release 0.9.4 - -* Mon Dec 12 2005 Per Øyvind Karlsen 0.9.3-1mdk -- New release 0.9.3 -- drop P113 - -* Thu Nov 24 2005 Per Øyvind Karlsen 0.9.2-1mdk -- New release 0.9.2 - -* Tue Nov 15 2005 Thierry Vignaud 0.9.1-1mdk -- new release - -* Fri Oct 28 2005 Per Øyvind Karlsen 0.9-3mdk -- gah, fix conflicts - -* Thu Oct 27 2005 Per Øyvind Karlsen 0.9-2mdk -- merge back in twain and capi libraries and rather exclude them from depencies - as they're softlinked and the availability will be automatically detected -- remove autoreq on sound daemon libraries for the same reason -- update url for source - -* Wed Oct 26 2005 Per Øyvind Karlsen 0.9-1mdk -- 0.9 (first beta after 12 years! :o) -- add epoch due to new versioning -- don't build on ppc (by spturtle's request, doesn't build) - -* Sat Oct 01 2005 Per Øyvind Karlsen 20050930-1mdk -- 20050930 -- regenerate wineprefix patch (P108) -- drop esd patch (P109, merged upstream) -- drop fontforge patch (P114, fixed upstream) - -* Wed Aug 31 2005 Buchan Milne 20050725-6mdk -- Rebuild for new libldap-2.2 - -* Tue Aug 30 2005 Per Øyvind Karlsen 20050725-5mdk -- fix problem with conflicts by adding version to provides (fixes #17927) - -* Thu Aug 25 2005 Laurent MONTEL 20050725-4 -- Fix upgrade from 10.1 - -* Tue Aug 23 2005 Per Øyvind Karlsen 20050725-3mdk -- fix initscript (rewrote S2, fixes #17676) -- fix upgrade by adding conflicts (fixes #17737) -- fix build with new fontforge (P114 from wine cvs) - -* Sat Aug 06 2005 Per Øyvind Karlsen 20050725-2mdk -- fix so that esd support is automatically detected by winecfg and also added - to the driver list (added to P109) -- try to detect oss after other sound drivers, otherwise it will be detected - first even if there are other drivers (added to to P113) -- fix requires(pre,postun,preun) -- fix requires-on-release -- nuke wine-utils and wine-full packages and rather just move the user - utils to main wine package and the devel utils to the devel package -- drop mdk 8.2 specific stuff -- don't add library dir to /etc/ld.so.conf anymore, remove the old line -- clean out old junk!! - -* Fri Aug 05 2005 Per Øyvind Karlsen 20050725-1mdk -- 20050725 -- add back esd support (P109) -- drop wine wrapper script as it's no longer needed (drop S104, modifies P108, - should also fix #9350) - -* Sun Jul 10 2005 Per Øyvind Karlsen 20050628-3mdk -- move winecfg to main package as it's now usable and the only way to configure wine -- fix dangling-relative-symlink by moving symlink for twain to twain package - -* Sat Jul 09 2005 Per Øyvind Karlsen 20050628-2mdk -- arg, by an accident last release got shipped with an old version of wine-launcher.sh, - ship new one again - -* Fri Jul 08 2005 Per Øyvind Karlsen 20050628-1mdk -- 20050628 -- all configs have been moved to registry, therefore remove those configs (S200 & P100) -- don't build documentation - -* Fri Jun 10 2005 Per Øyvind Karlsen 20050524-1mdk -- 20050524 -- fix build with newer alsa (P112 from gentoo) -- add missing buildrequires (fixes #16062) - -* Sat Apr 30 2005 Per Øyvind Karlsen 20050419-2mdk -- don't build on x86_64 -- fix build on older releases where fontforge isn't available (which - also makes it easier to rebuild package for the club:o) - -* Fri Apr 29 2005 Per Øyvind Karlsen 20050419-1mdk -- 20050419 -- regenerate P100 -- drop directx9 patch (P111, merged upstream:) - -* Sun Apr 17 2005 Per Øyvind Karlsen 20050310-1mdk -- 20050310 -- add directx9 patch (P111) -- update shellink patch (P107) -- %%mkrel -- fix executable-marked-as-config-file - -* Wed Feb 16 2005 Per Øyvind Karlsen 20050211-2mdk -- fix buildrequires - -* Sun Feb 13 2005 Per Øyvind Karlsen 20050211-1mdk -- 20050211 - -* Fri Jan 14 2005 Per Øyvind Karlsen 20050111-1mdk -- 20040111 -- drop apploader patch (P105) as it breaks current scripts -- drop P110 (fixed upstream) - -* Wed Dec 01 2004 Per Øyvind Karlsen 20041201-1mdk -- 20041201 -- fix problem with preloader (P110, fixes #12438) -- regenerate P100 - -* Mon Nov 08 2004 Per Øyvind Karlsen 20041019-1mdk -- 20041019 -- regenerate P107 -- wineclipsrv is no more, remove from %%files -- initial attempt on building win64 emulator on x64_64 (probably needs more work) - -* Thu Aug 26 2004 Per Øyvind Karlsen 20040813-2mdk -- fix temp path in config file and remove some directories in path (P100) -- update launcher script (upstream changes) (S104) -- drop S103 & S105 - -* Wed Aug 18 2004 Per Øyvind Karlsen 20040813-1mdk -- 20040813 -- regenerate P100 -- drop P109 (added upstream) - -* Fri Jul 23 2004 Per Øyvind Karlsen 20040716-2mdk -- add support for esd (P109) -- update wine-launcher.sh script (S104) to no longer use soundwrappers as we now - have support for both arts and esd in wine - -* Thu Jul 22 2004 Per Øyvind Karlsen 20040716-1mdk -- 20040716 -- regenerate P100 -- drop P106 - -* Wed Jun 30 2004 Per Øyvind Karlsen 20040615-2mdk -- fix buildrequires -- clean out old stuff from spec - -* Sat Jun 19 2004 Per Øyvind Karlsen 20040615-1mdk -- 20040615 -- adapt wineprefixcreate for mdk (P108, fixes #10074): - o trash wine-config (S103 & S105) - o no longer make a windows system i /var/lib/wine as we rather use a local - per user (trash S100) - o update wine-launcher.sh (S104) to use wineprefixcreate -- regenerate P100 -- add new files to %%files list -- do not build on sparc64 - -* Thu Jun 17 2004 Per Øyvind Karlsen 20040505-4mdk -- quick and dirty replacement for wine-config.pl (S105) for making drives in - wine with symlinks (feedback wanted!) -- spec fixes - -* Sat Jun 05 2004 Per Øyvind Karlsen 20040505-3mdk -- rebuild - -* Thu May 13 2004 Per Øyvind Karlsen 20040505-2mdk -- 20040505 -- drop P2 -- regenerate P100 - -* Wed May 05 2004 Per Øyvind Karlsen 20040408-2mdk -- fix problem with $WINEPREFIX being overridden (fixes #9511 Frank ) - -* Thu Apr 15 2004 Per Øyvind Karlsen 20040408-1mdk -- 20040408 -- regenerate P2 & P100 - -* Fri Apr 02 2004 Per Øyvind Karlsen 20040309-1mdk -- 20040309 -- regenerate P100 -- make a separate .wine-native directory for native windowsdir (from Danny, see #8823) -- update %%files list, files changed upstream - -* Sun Mar 21 2004 Per Øyvind Karlsen 20040213-3mdk -- fix problems with arguments when none is specified (fixes #9100) -