[csw-users] wine 0.9.10 on solaris 10 (solaris express nv b28)
ishikawa at yk.rim.or.jp
ishikawa at yk.rim.or.jp
Sun Apr 2 11:04:39 CEST 2006
(Sorry this is a little bit lengthy)
I tried to compile the latest wine-0.9.10 available from winehq web
page.
I referenced the wine-patch-kit web page at blasware and
it was very informative.
Obviously, there are newer files in wine-0.9.10 which are not
addressed by the patches in wine-patch-kit and so here are some
patches that I created for your reference.
In the end, there were a couple of link errors and
I appreciate helpful tips.
Here is the list of comments and questions and finally the patch
itself.
(0) Suggested Improvement to wine-patch-kit web page.
Before running maintain command,
we need to run "cvs login".
This may be too obvious to write in the
guide, but it might help some people.
e.g.
export CVSROOT=:pserver:cvs at cvs.winehq.org:/home/wine
cvs login
(1) Patches to compile latest wine-0.9.10 from www.winehq.org
See the patch output at the end.
(2) Link error?
I got the following link error at the end.
Compiler problem? I am not sure.
(Please note that due to a certain compatibility problem
I have overwritten /usr/ccs/bin/ld with gnu ld. Well,
original ld is saved under /usr/ccs/bin/ld.old)
This is the compiler I used. (note that ld is actually gnu ld as noted above.)
gcc -v
Reading specs from /usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/specs
Configured with: /builds/sfwnv-gate/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/sfw/bin/gas --with-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++,f77 --enable-shared
Thread model: posix
gcc version 3.4.3 (csl-sol210-3_4-20050802)
bash-3.00$
Linker problem? This is the version of ld I use. (Again, please note
that /usr/ccs/bin/ld is actually gnu ld).
/usr/ccs/bin/ld --version
GNU ld version 2.15
Copyright 2002 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.
bash-3.00$
Or solaris express nevada b28 problem?
Or my wine configure process problem?
I have somehow -lrt and -lthread through all my Makefile.
These additional libraries might be the cause of the problem.
The link error I got at the end of "make -k".
make -k
gcc -o wine-kthread -Wl,--export-dynamic -Wl,--section-start,.interp=0x7bf00400 -Wl,--rpath,\$ORIGIN/`../tools/relpath /usr/local/bin /usr/local/lib` kthread.o main.o -L../libs/wine -lwine -L../libs/port -lwine_port
../libs/wine/libwine.so: undefined reference to `write at SUNW_0.9'
../libs/wine/libwine.so: undefined reference to `read at SUNW_0.9'
collect2: ld returned 1 exit status
*** Error code 1
make: Warning: Target `all' not remade because of errors
Current working directory /home/ishikawa/local-src/wine-sources/wine-0.9.10/wine/loader
*** Error code 1
The following command caused the error:
cd loader && make
`libdinput.def.a' is up to date.
gcc -o wineserver -Wl,--rpath,\$ORIGIN/`../tools/relpath /usr/local/bin /usr/local/lib` atom.o change.o class.o clipboard.o console.o context_alpha.o context_i386.o context_powerpc.o context_sparc.o context_x86_64.o debugger.o directory.o event.o fd.o file.o handle.o hook.o mailslot.o main.o mapping.o mutex.o named_pipe.o object.o process.o ptrace.o queue.o region.o registry.o request.o semaphore.o serial.o signal.o snapshot.o sock.o symlink.o thread.o timer.o token.o trace.o unicode.o user.o window.o winstation.o sunptrace.o -L../libs/wine -lwine -L../libs/unicode -lwine_unicode -L../libs/port -lwine_port -lrt -lthread -lsocket -lnsl
../libs/wine/libwine.so: undefined reference to `write at SUNW_0.9'
../libs/wine/libwine.so: undefined reference to `read at SUNW_0.9'
collect2: ld returned 1 exit status
*** Error code 1
make: Warning: Target `all' not remade because of errors
Current working directory /home/ishikawa/local-src/wine-sources/wine-0.9.10/wine/server
*** Error code 1
The following command caused the error:
cd server && make
make: Warning: Target `all' not remade because of errors
(3) Question: solaris 10 (actually nevada b28) freetype2 library issue.
Configure doesn't pick up freetype2 library/header.
So there are messages to that effect.
Why?
They *are* in
/usr/sfw/include/freetype2/freetype/
/usr/sfw/lib/libfreetype.so.6
Maybe due to the fact that there is
/usr/sfw/bin/freetype-config
but, not
/usr/sfw/bin/freetype2-config ?
Still, it prints version 2.1.10
bash-3.00$ freetype-config --ftversion
2.1.10
Or do we need to pass special argument(s) to configure?
(4) Finally the patches.
The patch to compile wine-0.9.10 at winehq.com
Due to the fact that I have (somehow) configured to use -lrt -lthread,
most Makefiles had the additional -lrt and -lthread.
(I am not sure why I have -lrt and -lthread. It seems that
the wine-patch-kit doesn't handle these libraries.)
e.g. Makefile or Make.rules contain these
-lt -lthread in LIBS make variable.
Ugh. I just noticed that I have date string in Japanese character code
in diff output.. So I removed them to save trouble for some mail
readers. If these cause problems, please let me know.
diff -cibwr wine-0.9.10/wine/Make.rules wine-0.9.10-local-mods//wine/Make.rules
*** wine-0.9.10/wine/Make.rules original date
--- wine-0.9.10-local-mods//wine/Make.rules newer date.
***************
*** 25,31 ****
CC = gcc
CFLAGS = -g -O2
CPPFLAGS =
! LIBS = -lsocket -lnsl
BISON = bison
LEX = flex
LEXLIB = -ll
--- 25,31 ----
CC = gcc
CFLAGS = -g -O2
CPPFLAGS =
! LIBS = -lrt -lthread -lsocket -lnsl
BISON = bison
LEX = flex
LEXLIB = -ll
I omit these.
I may have introduced more incompatibility problems than
usual, but here goes the patch.
dlls/iphlpapi
Linking requires -lresolve to
satisfy unresolved symbols.
diff -cibwr wine-0.9.10/wine/dlls/iphlpapi/Makefile wine-0.9.10-local-mods//wine/dlls/iphlpapi/Makefile
*** wine-0.9.10/wine/dlls/iphlpapi/Makefile today
--- wine-0.9.10-local-mods//wine/dlls/iphlpapi/Makefile today
***************
*** 71,77 ****
CC = gcc
CFLAGS = -g -O2
CPPFLAGS =
! LIBS = -lsocket -lnsl
BISON = bison
LEX = flex
LEXLIB = -ll
--- 71,78 ----
CC = gcc
CFLAGS = -g -O2
CPPFLAGS =
! # add -lresolv
! LIBS = -lrt -lthread -lresolv -lsocket -lnsl
BISON = bison
LEX = flex
LEXLIB = -ll
dlls/msvcrt/time.c:
I don't know for sure whether other systems require this, but
solaris asctime_r() obviously takes the third argument.
diff -cibwr wine-0.9.10/wine/dlls/msvcrt/time.c wine-0.9.10-local-mods//wine/dlls/msvcrt/time.c
*** wine-0.9.10/wine/dlls/msvcrt/time.c 2006年 old date
--- wine-0.9.10-local-mods//wine/dlls/msvcrt/time.c today
***************
*** 466,472 ****
/* FIXME: may want to map from Unix codepage to CP_ACP */
#ifdef HAVE_ASCTIME_R
! asctime_r( &tm, data->asctime_buffer );
#else
strcpy( data->asctime_buffer, asctime(&tm) );
#endif
--- 466,472 ----
/* FIXME: may want to map from Unix codepage to CP_ACP */
#ifdef HAVE_ASCTIME_R
! asctime_r( &tm, data->asctime_buffer, 30 /* TODO/FIXME: CI */ );
#else
strcpy( data->asctime_buffer, asctime(&tm) );
#endif
***************
*** 487,493 ****
if (!data->wasctime_buffer)
data->wasctime_buffer = MSVCRT_malloc( 30*sizeof(MSVCRT_wchar_t) ); /* ought to be enough */
#ifdef HAVE_ASCTIME_R
! asctime_r( &tm, buffer );
#else
strcpy( buffer, asctime(&tm) );
#endif
--- 487,493 ----
if (!data->wasctime_buffer)
data->wasctime_buffer = MSVCRT_malloc( 30*sizeof(MSVCRT_wchar_t) ); /* ought to be enough */
#ifdef HAVE_ASCTIME_R
! asctime_r( &tm, buffer, 30 * sizeof(MSVCRT_wchar_t) /* TODO/FIXME: CI */ );
#else
strcpy( buffer, asctime(&tm) );
#endif
dlls/ntdll/directory.c
We need to include limits.h since PATH_MAX is
defined there.
Also, I added one volatile specifier to
a line to shut up warning.
(Actually there is another place a warning is
generated, too.)
diff -cibwr wine-0.9.10/wine/dlls/ntdll/directory.c wine-0.9.10-local-mods//wine/dlls/ntdll/directory.c
*** wine-0.9.10/wine/dlls/ntdll/directory.c old date
--- wine-0.9.10-local-mods//wine/dlls/ntdll/directory.c today
***************
*** 57,62 ****
--- 57,66 ----
# include <unistd.h>
#endif
+ /* TODO/FIXME: PATH_MAX */
+ #include <limits.h>
+
+
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
#include "ntstatus.h"
***************
*** 316,322 ****
{
volatile struct mnttab mntentry;
! struct mnttab *entry=&mntentry;
struct stat st;
char *device;
--- 320,327 ----
{
volatile struct mnttab mntentry;
! /* Added volatile below CI */
! volatile struct mnttab *entry=&mntentry;
struct stat st;
char *device;
dlls/ntdll/tape.c:
Solaris 10 mt ioctl differences.
diff -cibwr wine-0.9.10/wine/dlls/ntdll/tape.c wine-0.9.10-local-mods//wine/dlls/ntdll/tape.c
*** wine-0.9.10/wine/dlls/ntdll/tape.c old date
--- wine-0.9.10-local-mods//wine/dlls/ntdll/tape.c today
***************
*** 163,170 ****
*/
static NTSTATUS TAPE_GetDriveParams( int fd, TAPE_GET_DRIVE_PARAMETERS *data )
{
! #ifdef HAVE_SYS_MTIO_H
struct mtget get;
NTSTATUS status;
TRACE( "fd: %d\n", fd );
--- 163,176 ----
*/
static NTSTATUS TAPE_GetDriveParams( int fd, TAPE_GET_DRIVE_PARAMETERS *data )
{
! #if defined(HAVE_SYS_MTIO_H) || defined(MTIOCGETDRIVETYPE)
! #ifdef MTIOCGETDRIVETYPE
! /* Solaris 10- actullay. */
! struct mtdrivetype get;
! #else
struct mtget get;
+ #endif
+
NTSTATUS status;
TRACE( "fd: %d\n", fd );
***************
*** 171,177 ****
--- 177,188 ----
memset( data, 0, sizeof(TAPE_GET_DRIVE_PARAMETERS) );
+ #ifdef MTIOCGETDRIVETYPE
+ /* Solaris 10- actually. */
+ status = TAPE_GetStatus( ioctl( fd, MTIOCGETDRIVETYPE, &get ) );
+ #else
status = TAPE_GetStatus( ioctl( fd, MTIOCGET, &get ) );
+ #endif
if (status != STATUS_SUCCESS)
return status;
***************
*** 179,189 ****
--- 190,205 ----
data->Compression = FALSE;
data->DataPadding = FALSE;
data->ReportSetmarks = FALSE;
+ #ifdef MTIOCGETDRIVETYPE
+ /* Solaris 10- actually. */
+ data->DefaultBlockSize = get.bsize;
+ #else
#ifdef HAVE_STRUCT_MTGET_MT_BLKSIZ
data->DefaultBlockSize = get.mt_blksiz;
#else
data->DefaultBlockSize = get.mt_dsreg & MT_ST_BLKSIZE_MASK;
#endif
+ #endif
data->MaximumBlockSize = data->DefaultBlockSize;
data->MinimumBlockSize = data->DefaultBlockSize;
data->MaximumPartitionCount = 1;
***************
*** 200,207 ****
*/
static NTSTATUS TAPE_GetMediaParams( int fd, TAPE_GET_MEDIA_PARAMETERS *data )
{
! #ifdef HAVE_SYS_MTIO_H
struct mtget get;
NTSTATUS status;
TRACE( "fd: %d\n", fd );
--- 216,230 ----
*/
static NTSTATUS TAPE_GetMediaParams( int fd, TAPE_GET_MEDIA_PARAMETERS *data )
{
! #if defined(HAVE_SYS_MTIO_H) || defined(MTIOCGETDRIVETYPE)
!
! #if defined(MTIOCGETDRIVETYPE)
! /* Actually solaris 10- */
! struct mtdrivetype get;
! #else
struct mtget get;
+ #endif
+
NTSTATUS status;
TRACE( "fd: %d\n", fd );
***************
*** 208,224 ****
--- 231,258 ----
memset( data, 0, sizeof(TAPE_GET_MEDIA_PARAMETERS) );
+ #ifdef MTIOCGETDRIVETYPE
+ /* Actually solaris 10- */
+ status = TAPE_GetStatus( ioctl( fd, MTIOCGETDRIVETYPE, &get ) );
+ #else
status = TAPE_GetStatus( ioctl( fd, MTIOCGET, &get ) );
+ #endif
if (status != STATUS_SUCCESS)
return status;
data->Capacity.u.LowPart = 1024 * 1024 * 1024;
data->Remaining.u.LowPart = 1024 * 1024 * 1024;
+ #ifdef MTIOCGETDRIVETYPE
+ /* Actually solaris 10- */
+ data->BlockSize = get.bsize;
+ #else
#ifdef HAVE_STRUCT_MTGET_MT_BLKSIZ
data->BlockSize = get.mt_blksiz;
#else
data->BlockSize = get.mt_dsreg & MT_ST_BLKSIZE_MASK;
#endif
+ #endif
+
data->PartitionCount = 1;
#ifdef HAVE_STRUCT_MTGET_MT_GSTAT
data->WriteProtected = GMT_WR_PROT(get.mt_gstat);
***************
*** 375,381 ****
--- 409,420 ----
TRACE( "fd: %d blocksize: 0x%08lx\n", fd, data->BlockSize );
+ #ifdef MTSRSZ
+ /* Actually solaris 10- */
+ cmd.mt_op = MTSRSZ;
+ #else
cmd.mt_op = MTSETBLK;
+ #endif
cmd.mt_count = data->BlockSize;
return TAPE_GetStatus( ioctl( fd, MTIOCTOP, &cmd ) );
dlls/x11drv/winpos.c:
I am not sure why, but the header files supplied
under openwindows directory is a little
old?
In any case, unless I add xuti.h before extensions/shape.h
include, compilation failed.
diff -cibwr wine-0.9.10/wine/dlls/x11drv/winpos.c wine-0.9.10-local-mods//wine/dlls/x11drv/winpos.c
*** wine-0.9.10/wine/dlls/x11drv/winpos.c old date
--- wine-0.9.10-local-mods//wine/dlls/x11drv/winpos.c today
***************
*** 21,28 ****
--- 21,33 ----
#include "config.h"
+
#include <X11/Xlib.h>
#ifdef HAVE_LIBXSHAPE
+
+ /*ci*/
+ #include <X11/Xutil.h>
+
#include <X11/extensions/shape.h>
#endif /* HAVE_LIBXSHAPE */
#include <stdarg.h>
include/config.h:
This is for reference-purposes only.
This will be overwritten by everyone's local configure.
diff -cibwr wine-0.9.10/wine/include/config.h wine-0.9.10-local-mods//wine/include/config.h
*** wine-0.9.10/wine/include/config.h 2006年 4月 2日 (日)
--- wine-0.9.10-local-mods//wine/include/config.h 2006年 3月 28日 (火)
***************
*** 300,308 ****
--- 300,314 ----
/* Define to 1 if you have the `resolv' library (-lresolv). */
/* #undef HAVE_LIBRESOLV */
+ /* Define to 1 if you have the `rt' library (-lrt). */
+ #define HAVE_LIBRT 1
+
/* Define to 1 if you have the `socket' library (-lsocket). */
#define HAVE_LIBSOCKET 1
+ /* Define to 1 if you have the `thread' library (-lthread). */
+ #define HAVE_LIBTHREAD 1
+
/* Define if you have the libxml2 library */
#define HAVE_LIBXML2 1
***************
*** 417,422 ****
--- 423,431 ----
/* Define to 1 if the system has the type `mode_t'. */
#define HAVE_MODE_T 1
+ /* Define to 1 if you have the `nanosleep' function. */
+ /* #undef HAVE_NANOSLEEP */
+
/* Define if you have NAS including devel headers */
/* #undef HAVE_NAS */
***************
*** 486,491 ****
--- 495,503 ----
/* Define to 1 if you have the `pread' function. */
#define HAVE_PREAD 1
+ /* Define if you have processor_info */
+ #define HAVE_PROCESSOR_INFO 1
+
/* Define to 1 if you have the <process.h> header file. */
/* #undef HAVE_PROCESS_H */
***************
*** 535,541 ****
#define HAVE_SCHED_H 1
/* Define to 1 if you have the `sched_yield' function. */
! /* #undef HAVE_SCHED_YIELD */
/* Define to 1 if `cmd' is member of `scsireq_t'. */
/* #undef HAVE_SCSIREQ_T_CMD */
--- 547,553 ----
#define HAVE_SCHED_H 1
/* Define to 1 if you have the `sched_yield' function. */
! #define HAVE_SCHED_YIELD 1
/* Define to 1 if `cmd' is member of `scsireq_t'. */
/* #undef HAVE_SCSIREQ_T_CMD */
***************
*** 675,680 ****
--- 687,695 ----
/* Define to 1 if you have the <syscall.h> header file. */
/* #undef HAVE_SYSCALL_H */
+ /* Define if you have sysconf */
+ #define HAVE_SYSCONF 1
+
/* Define to 1 if you have the <sys/asoundlib.h> header file. */
/* #undef HAVE_SYS_ASOUNDLIB_H */
***************
*** 693,698 ****
--- 708,716 ----
/* Define to 1 if you have the <sys/exec_elf.h> header file. */
/* #undef HAVE_SYS_EXEC_ELF_H */
+ /* Define if you have sys/filio.h */
+ #define HAVE_SYS_FILIIO_H 1
+
/* Define to 1 if you have the <sys/filio.h> header file. */
#define HAVE_SYS_FILIO_H 1
***************
*** 732,737 ****
--- 750,758 ----
/* Define to 1 if you have the <sys/poll.h> header file. */
#define HAVE_SYS_POLL_H 1
+ /* Define if you have processor.h */
+ #define HAVE_SYS_PROCESSOR_H 1
+
/* Define to 1 if you have the <sys/ptrace.h> header file. */
/* #undef HAVE_SYS_PTRACE_H */
***************
*** 810,815 ****
--- 831,842 ----
/* Define to 1 if you have the <termios.h> header file. */
#define HAVE_TERMIOS_H 1
+ /* Define if you have thr* funcs */
+ #define HAVE_THR 1
+
+ /* Define if you have thread.h (Solaris) */
+ #define HAVE_THREAD_H 1
+
/* Define to 1 if you have the `timegm' function. */
/* #undef HAVE_TIMEGM */
***************
*** 915,920 ****
--- 942,953 ----
/* Define if we have __va_copy */
#define HAVE___VA_COPY 1
+ /* Define major Os vesion */
+ #define OS_MAJOR $system_major
+
+ /* Define minor Os Version */
+ #define OS_MINOR $system_minor
+
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "wine-devel at winehq.org"
loader/kthread.c :
macro ERR conflicts with a system-supplied macro.
So I renamed it to ERRPRINT.
diff -cibwr wine-0.9.10/wine/loader/kthread.c wine-0.9.10-local-mods//wine/loader/kthread.c
*** wine-0.9.10/wine/loader/kthread.c old date
--- wine-0.9.10-local-mods//wine/loader/kthread.c today
***************
*** 115,121 ****
#endif
#define TRACE printf
! #define ERR printf
int threadmode =0;
struct pthread_descr_struct
--- 115,122 ----
#endif
#define TRACE printf
! /* #define ERR printf */
! #define ERRPRINTF printf
int threadmode =0;
struct pthread_descr_struct
***************
*** 242,248 ****
thr_setspecific(key, data);
}
else
! ERR("Thread private data already set !\n");
thr_getspecific(key, &tsd);
return((void *) tsd);
}
--- 243,249 ----
thr_setspecific(key, data);
}
else
! ERRPRINTF("Thread private data already set !\n");
thr_getspecific(key, &tsd);
return((void *) tsd);
}
***************
*** 423,441 ****
switch(err)
{
case EAGAIN:
! ERR("Thread creation failed EAGAIN - System is out of threads or lwps\n");
break;
case EINVAL:
! ERR("Thread creation failed EINVAL - The stack_base argument is not NULL and stack_size is less than the value returned by thr_min_stack, or the stack_base argument is NULL and stack_size is not 0 and is less than the value returned by thr_min_stack\n");
break;
case ENOMEM:
! ERR("Thread creation failed ENOMEM - here is not enough memory to allocate the stack for the thread\n");
break;
case -1:
! ERR("Thread creation failed (-1) - Application is not linked with threading libraryn");
break;
default:
! ERR("Thread creation failed Unknown %d - Possible mmap failure check mmap results\n",err);
break;
}
return -1;
--- 424,442 ----
switch(err)
{
case EAGAIN:
! ERRPRINTF("Thread creation failed EAGAIN - System is out of threads or lwps\n");
break;
case EINVAL:
! ERRPRINTF("Thread creation failed EINVAL - The stack_base argument is not NULL and stack_size is less than the value returned by thr_min_stack, or the stack_base argument is NULL and stack_size is not 0 and is less than the value returned by thr_min_stack\n");
break;
case ENOMEM:
! ERRPRINTF("Thread creation failed ENOMEM - here is not enough memory to allocate the stack for the thread\n");
break;
case -1:
! ERRPRINTF("Thread creation failed (-1) - Application is not linked with threading libraryn");
break;
default:
! ERRPRINTF("Thread creation failed Unknown %d - Possible mmap failure check mmap results\n",err);
break;
}
return -1;
programs/wintest/maketest:
We need to add dummy variable to shell built-in "read"
diff -cibwr wine-0.9.10/wine/programs/winetest/maketest wine-0.9.10-local-mods//wine/programs/winetest/maketest
*** wine-0.9.10/wine/programs/winetest/maketest old date
--- wine-0.9.10-local-mods//wine/programs/winetest/maketest today
***************
*** 19,25 ****
for dir in dlls/*/tests; do
sed -ne "s|^/\([^.]*.c\)/\([^/]*\).*|$dir/\1:\2|p" $dir/CVS/Entries 2>/dev/null
done |\
! while read; do
echo "REV_INFO+$i \"$REPLY\""
i=`expr $i + 1`
done
--- 19,25 ----
for dir in dlls/*/tests; do
sed -ne "s|^/\([^.]*.c\)/\([^/]*\).*|$dir/\1:\2|p" $dir/CVS/Entries 2>/dev/null
done |\
! while read dummy; do
echo "REV_INFO+$i \"$REPLY\""
i=`expr $i + 1`
done
programs/wineconsole :
We need to link -lcurses (due to unresolved
symbols)
diff -cibwr wine-0.9.10/wine/programs/wineconsole/Makefile wine-0.9.10-local-mods//wine/programs/wineconsole/Makefile
*** wine-0.9.10/wine/programs/wineconsole/Makefile old date
--- wine-0.9.10-local-mods//wine/programs/wineconsole/Makefile today
***************
*** 66,72 ****
CC = gcc
CFLAGS = -g -O2
CPPFLAGS =
! LIBS = -lsocket -lnsl
BISON = bison
LEX = flex
LEXLIB = -ll
--- 66,72 ----
CC = gcc
CFLAGS = -g -O2
CPPFLAGS =
! LIBS = -lrt -lthread -lsocket -lnsl -lcurses
BISON = bison
LEX = flex
LEXLIB = -ll
More information about the users
mailing list