Compiling Wine 1.1.14 for OpenSolaris or Solaris Nevada

Update 15.02.2009 @ 14:04: Same for wine 1.1.15…

The following error:

ipstats.c: In function `getInterfaceStatsByName’:
ipstats.c:279: error: called object is not a function
ipstats.c: In function `getICMPStats’:
ipstats.c:472: error: called object is not a function
ipstats.c: In function `getIPStats’:
ipstats.c:641: error: called object is not a function
ipstats.c: In function `getTCPStats’:
ipstats.c:778: error: called object is not a function
ipstats.c: In function `getUDPStats’:
ipstats.c:862: error: called object is not a function
ipstats.c: In function `getNumWithOneHeader’:
ipstats.c:985: error: called object is not a function
ipstats.c: In function `getRouteTable’:
ipstats.c:1255: error: called object is not a function
ipstats.c: In function `getTcpTable’:
ipstats.c:1607: error: called object is not a function
gmake[2]: *** [ipstats.o] Error 1
gmake[2]: Leaving directory `/var/tmp/wine-1.1.14/dlls/iphlpapi’
gmake[1]: *** [iphlpapi] Error 2
gmake[1]: Leaving directory `/var/tmp/wine-1.1.14/dlls’
gmake: *** [dlls] Error 2

Is caused by redefinition of the ERR function in the wrong place. To fix move #include “wine/debug.h” behind all includes in dlls/iphlpapi/ipstats.c:

From (line 24):
. . .
#include “config.h”
#include “wine/port.h”
#include “wine/debug.h”

#include
#include
. . .

to (line 126):

. . .
#include “windef.h”
#include “winbase.h”
#include “iprtrmib.h”
#include “ifenum.h”
#include “ipstats.h”
#include “wine/debug.h”
. . .

Wine 1.1.5 for Solaris

Wine 1.1.5 is out. So are new compiling errors:

gmake[2]: Entering directory `/var/tmp/wine-1.1.5/dlls/cryptnet’
gcc -c -I. -I. -I../../include -I../../include -D__WINESRC__ -D_REENTRANT -fPIC -Wall -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith -O2 -o cryptnet_main.o cryptnet_main.c
In file included from cryptnet_main.c:31:
../../include/winbase.h:1518: error: syntax error before “va_list”
../../include/winbase.h:1519: error: syntax error before “va_list”
gmake[2]: *** [cryptnet_main.o] Error 1
gmake[2]: Leaving directory `/var/tmp/wine-1.1.5/dlls/cryptnet’
gmake[1]: *** [cryptnet] Error 2
gmake[1]: Leaving directory `/var/tmp/wine-1.1.5/dlls’
gmake: *** [dlls] Error 2

The thing is, wine/debug.h must be included before any other win*.h headers in dlls/cryptnet/cryptnet_main.c

$ more dlls/cryptnet/cryptnet_main.c
. . .
#include “wine/debug.h”
#include “windef.h”
#include “winbase.h”
#include “winnt.h”
#include “winnls.h”
#include “wininet.h”
#include “objbase.h”
#define CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
#include “wincrypt.h”
. . .

wine-0.9.59, OpenSolaris and Picasa

New release, new features, new bug fixes and new bugs.
Let’s start with compiling.

Compiling

  • You do not need to use –without-ldap anymore
    I used just two options: –disable-win16 and –without-capi (does anybody use ISDN?).
  • Do not forget the tricks from Part I and Part II
  • New error I haven’t seen before:
    ../../tools/wrc/wrc --nostdinc -I. -I. -I../../include -I../../include   -DBUILD_SHA1=\"$(GIT_DIR=../../.git git rev-parse HEAD 2>/dev/null)\" -fowinetest.res winetest.rc
    /bin/sh: syntax error at line 1: `(' unexpected
    gmake: *** [winetest.res] Error 2

    Not sure if and why git is needed here, but I simply removed (commented) the following line from programs/winetest/Makefile:

    EXTRARCFLAGS = -DBUILD_SHA1=\"$$(GIT_DIR=$(TOPSRCDIR)/.git git rev-parse HEAD 2>/dev/null)\"

Applications
According to the Announcement, the following bugs (among others) were fixed in 0.9.59:

  • 2866 Support for X11 multi head configurations (Xinerama)
    I use Xinerama, but I haven’t noticed anything wrong about it, it was always working
  • 4528 Firefox vertical size wrong, doesn’t take gnome system menu or task
    bars into account
    Yes, it works correctly now. But Firefox 3 beta 5 crashes every 3 seconds πŸ˜‰
  • 11574 Picasa cannot upload to web albums
    Still does not work for me. But instead it eats all possible and impossible CPU and memory resources:

    #top
    PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
    3731 alekz      9  28    4   26M   12M sleep    2:37   102% wine
    3710 alekz     11  38    4  134M  100M sleep    1:26 99.62% wine
    3713 alekz      1  28    4  109M  106M run     20:32 96.60% wineserver
    . . .

    And this is after I killed Picasa:

    PID USERNAME LWP PRI NICE  SIZE   RES STATE    TIME    CPU COMMAND
    3731 alekz     10   0    4   26M   12M cpu      8:06   102% wine
    3713 alekz      1   0    4  406M  404M cpu     26:46 99.85% wineserver

    I stopped Picasa, one process is gone, but what wine is doing now??! Also look at the consumed memory, it’s constantly increasing.

OpenSolaris Forum

There is a possibility that a Wine Community will be created for OpenSolaris. (aka Nevada, aka Solaris 11). BTW, you can try to use the wine configuring script (see further in the thread), but it does not solve the above mentioned problems, so do not waste your time.

How to compile wine under Solaris. Part II

See Part I

Beginning with wine 0.9.57 “-lsunmath” is needed. You can get the libsunmath library from blastwave, for example:

LIBS      = -lsocket -lnsl -lintl -L/opt/csw/lib -lsunmath

This is the error you might get if the library is not specified in dlls/wined3d/Makefile:

Undefined                       first referenced
symbol                             in file
isinf                               surface_base.o
ld: fatal: Symbol referencing errors. No output written to wined3d.dll.so
collect2: ld returned 1 exit status
winegcc: gcc failed
gmake[2]: *** [wined3d.dll.so] Error 2
gmake[2]: Leaving directory `/var/tmp/wine-0.9.57/dlls/wined3d'
gmake[1]: *** [wined3d] Error 2
gmake[1]: Leaving directory `/var/tmp/wine-0.9.57/dlls'
gmake: *** [dlls] Error 2

The isinf related discussion can be found here.

How to compile wine under Solaris. Part I

Unfortunately, wine can not be compiled under Solaris “as is”. Some tricks are needed.

    If you do not needed LDAP and 16bit support, turn them off:

  • ./configure --without-ldap --disable-win16
  • To get rid of the following error:
    In file included from object.h:30,
    from fd.c:76:
    ../include/wine/list.h:25: error: redefinition of `struct list'
    ../include/wine/list.h:97: error: conflicting types for 'list_remove'
    /usr/include/sys/list.h:48: error: previous declaration of 'list_remove' was here
    ../include/wine/list.h:97: error: conflicting types for 'list_remove'
    /usr/include/sys/list.h:48: error: previous declaration of 'list_remove' was here
    ../include/wine/list.h:104: error: conflicting types for 'list_next'
    /usr/include/sys/list.h:53: error: previous declaration of 'list_next' was here
    ../include/wine/list.h:104: error: conflicting types for 'list_next'
    /usr/include/sys/list.h:53: error: previous declaration of 'list_next' was here
    ../include/wine/list.h:112: error: conflicting types for 'list_prev'
    /usr/include/sys/list.h:54: error: previous declaration of 'list_prev' was here
    ../include/wine/list.h:112: error: conflicting types for 'list_prev'
    /usr/include/sys/list.h:54: error: previous declaration of 'list_prev' was here
    ../include/wine/list.h:120: error: conflicting types for 'list_head'
    /usr/include/sys/list.h:51: error: previous declaration of 'list_head' was here
    ../include/wine/list.h:120: error: conflicting types for 'list_head'
    /usr/include/sys/list.h:51: error: previous declaration of 'list_head' was here
    ../include/wine/list.h:126: error: conflicting types for 'list_tail'
    /usr/include/sys/list.h:52: error: previous declaration of 'list_tail' was here
    ../include/wine/list.h:126: error: conflicting types for 'list_tail'
    /usr/include/sys/list.h:52: error: previous declaration of 'list_tail' was here
    ../include/wine/list.h:153: warning: static declaration of 'list_move_tail' follows non-static declaration
    /usr/include/sys/list.h:49: warning: previous declaration of 'list_move_tail' was here
    gmake[1]: *** [fd.o] Error 1
    gmake[1]: Leaving directory `/var/tmp/wine-0.9.56/server'
    gmake: *** [server] Error 2
    

    Change server/fd.c:

    *** 71,76 ****
    --- 71,88 ----
    #include <sys/types.h>
    #include  <unistd.h>
    + /*
    +  struct list is defined at sys/list_impl.h on solaris
    +  this patches work around it.
    +  */
    + #define list		WINELIST
    + #define list_remove	WINELIST_REMOVE
    + #define list_next	WINELIST_NEXT
    + #define list_prev	WINELIST_PREV
    + #define list_head	WINELIST_HEAD
    + #define list_tail	WINELIST_TAIL
    + #define list_move_tail	WINELIST_MOVE_TAIL
    +
    #include "ntstatus.h"
    #define WIN32_NO_STATUS
    #include "object.h"
    
  • Compile with /usr/sfw/bin/gcc not /opt/csw/bin/gcc. You can successfully compile wine with CSWgcc but if you run wine or winecfg you will get the following error (at least under Solaris 11 builds83a-86):
    $ winecfg
    sock_init: ERROR in sock_check_pollhup()
    Assertion failed: next->flags & VFLAG_SYSTEM, file virtual.c, line 467
    Abort