Folks,
Last night I managed to compile, link, and successfully run all(1) samples that come with wxWindows.
In all honesty I am overjoyed! Let me explain why: -- wxWindows is a large piece of software that touches on most (if not all) Wine aspects. It does put our headers through their paces. -- The porting effort has been simple, and it took me a just a few days to do it. -- I have not used _any_ of the previous efforts to port wxWindows to Wine. I rather started with their MinGW port. -- Most of the changes have been trivial fixes for Wine which I have sent to wine-patches in the last few days. -- The hacks to wxWindows have been trivial and few in number. I have touched only a few files, and the changes are real simple. They'll need some cleaning up, and I'll submit them to the wxWindows folks for inclusion. -- The wine{gcc,wrap} combo is a great success. All I had to do was to touch only *one* file (makeg95.env), and modify only a few lines to get *everything* to compile and link.
What does Wine get out of it: -- A good test for our headers -- Proof that wine{gcc,wrap} are a good idea (at least for me) -- A large number of sample that show quite a few problems in Wine.
If anyone is interested in more details please let me know, and I'll be glad to provide them. Once we decide on the __WINE__ vs. __WINESRC__ thing, I'll cleanup the wxWindows changes and submit them for inclusion in their tree, so hopefully you'll be able to play with it using the official version not before long.
Notes 1. All but a few: - 'dialup' did not compile because I had to disable dialup support in wxWindows since wine does not have a wininet.h - 'proplist' did not compile because I forgot to enable property lists in the configuration when I compiled wxWindows - 'tab' sample did not compile because it's recommended to not enable this deprecated option, so I did not. - the samples 'listbox', 'memcheck', and 'opengl/*' are not supported by wxWindows under MinGW, so I did not bother.
Dimitrie O. Paun wrote:
Folks,
Last night I managed to compile, link, and successfully run all(1) samples that come with wxWindows.
In all honesty I am overjoyed! Let me explain why:
Excellent news!
-- wxWindows is a large piece of software that touches on most (if not all) Wine aspects. It does put our headers through their paces. -- The porting effort has been simple, and it took me a just a few days to do it. -- I have not used _any_ of the previous efforts to port wxWindows to Wine. I rather started with their MinGW port. -- Most of the changes have been trivial fixes for Wine which I have sent to wine-patches in the last few days. -- The hacks to wxWindows have been trivial and few in number. I have touched only a few files, and the changes are real simple. They'll need some cleaning up, and I'll submit them to the wxWindows folks for inclusion. -- The wine{gcc,wrap} combo is a great success. All I had to do was to touch only *one* file (makeg95.env), and modify only a few lines to get *everything* to compile and link.
What does Wine get out of it: -- A good test for our headers -- Proof that wine{gcc,wrap} are a good idea (at least for me) -- A large number of sample that show quite a few problems in Wine.
If anyone is interested in more details please let me know, and I'll be glad to provide them. Once we decide on the __WINE__ vs. __WINESRC__ thing, I'll cleanup the wxWindows changes and submit them for inclusion in their tree, so hopefully you'll be able to play with it using the official version not before long.
I'd be very interested in this, as I use wxWindows alot in my work... This means we can try compile our app like this (it already kind of works using wxGTK, but this will be interesting too) Thanks a lot...
David
On December 24, 2002 04:36 pm, David Fraser wrote:
I'd be very interested in this, as I use wxWindows alot in my work...
OK, here are the _raw_ modifications that I had to make. All trivially fixable also (waiting on the __WINE__ decision).
Look for example to the makeg95.env changes to see how few were needed!
Here's the diff (against latest wxWindows CVS).
Index: include/wx/filefn.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/include/wx/filefn.h,v retrieving revision 1.63 diff -u -r1.63 filefn.h --- include/wx/filefn.h 2002/12/07 15:41:11 1.63 +++ include/wx/filefn.h 2002/12/24 22:17:25 @@ -74,9 +74,9 @@ // ----------------------------------------------------------------------------
// Microsoft compiler loves underscores, feed them to it -#if defined( __VISUALC__ ) \ +#if 0 && (defined( __VISUALC__ ) \ || ( defined(__MINGW32__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \ - || ( defined(__MWERKS__) && defined(__WXMSW__) ) + || ( defined(__MWERKS__) && defined(__WXMSW__) )) // functions #define wxClose _close #define wxRead _read Index: include/wx/sckaddr.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/include/wx/sckaddr.h,v retrieving revision 1.16 diff -u -r1.16 sckaddr.h --- include/wx/sckaddr.h 2002/08/31 11:29:11 1.16 +++ include/wx/sckaddr.h 2002/12/24 22:17:26 @@ -102,7 +102,7 @@ #endif
#if defined(__UNIX__) && (!defined(__WXMAC__) || defined(__DARWIN__)) -#include <sys/socket.h> +//#include <sys/socket.h> #ifndef __VMS__ # include <sys/un.h> #endif Index: include/wx/wxchar.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/include/wx/wxchar.h,v retrieving revision 1.102 diff -u -r1.102 wxchar.h --- include/wx/wxchar.h 2002/12/10 00:43:24 1.102 +++ include/wx/wxchar.h 2002/12/24 22:17:27 @@ -248,6 +248,7 @@ // it in Unicode build as well // ----------------------------------------------------------------------------
+#undef wxHAVE_TCHAR_SUPPORT #ifdef wxHAVE_TCHAR_SUPPORT #include <ctype.h>
Index: include/wx/msw/gccpriv.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/include/wx/msw/gccpriv.h,v retrieving revision 1.6 diff -u -r1.6 gccpriv.h --- include/wx/msw/gccpriv.h 2001/08/02 19:02:17 1.6 +++ include/wx/msw/gccpriv.h 2002/12/24 22:17:28 @@ -48,6 +48,7 @@
// Mingw runtime 1.0-20010604 has some missing _tXXXX functions, // so let's define them ourselves: +#include <tchar.h> #if defined(__GNUWIN32__) && wxCHECK_W32API_VERSION( 1, 0 ) #ifndef _tsetlocale #if wxUSE_UNICODE Index: include/wx/msw/gnuwin32/extra.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/include/wx/msw/gnuwin32/extra.h,v retrieving revision 1.8 diff -u -r1.8 extra.h --- include/wx/msw/gnuwin32/extra.h 2001/06/08 15:03:59 1.8 +++ include/wx/msw/gnuwin32/extra.h 2002/12/24 22:17:29 @@ -3,7 +3,7 @@ * have (B18/B19). */
-#ifndef _WX_EXTRAH_ +#if 0 #define _WX_EXTRAH_
#ifndef __CYGWIN10__ Index: include/wx/msw/gnuwin32/winresrc.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/include/wx/msw/gnuwin32/winresrc.h,v retrieving revision 1.2 diff -u -r1.2 winresrc.h --- include/wx/msw/gnuwin32/winresrc.h 1999/01/19 18:20:15 1.2 +++ include/wx/msw/gnuwin32/winresrc.h 2002/12/24 22:17:32 @@ -1409,12 +1409,12 @@
-#ifdef UNICODE -#define __TEXT(quote) L##quote -#else /* UNICODE */ -#define __TEXT(quote) quote -#endif /* UNICODE */ -#define TEXT(quote) __TEXT(quote) +#ifdef UNICODE +#define __TEXT(quote) L##quote +#else +#define __TEXT(quote) quote +#endif +#define TEXT(quote) __TEXT(quote)
// // Language IDs. Index: samples/makefile.g95 =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/samples/makefile.g95,v retrieving revision 1.16 diff -u -r1.16 makefile.g95 --- samples/makefile.g95 2002/04/12 13:15:44 1.16 +++ samples/makefile.g95 2002/12/24 22:17:32 @@ -17,7 +17,7 @@ THISDIR=$(WXDIR)/samples MAKEFILE=makefile.g95 MAKEFLAGS=WXUSINGDLL=$(WXUSINGDLL) UNICODE=$(UNICODE) -CMDLINE=-f $(MAKEFILE) $(MAKEFLAGS) +CMDLINE=-s -f $(MAKEFILE) $(MAKEFLAGS)
# Mingw make may not have a shell to use, so can't use a loop here. Sigh. # Please add new sample directories alphabetically to make it easier to Index: src/makeg95.env =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/makeg95.env,v retrieving revision 1.73 diff -u -r1.73 makeg95.env --- src/makeg95.env 2002/12/18 08:33:27 1.73 +++ src/makeg95.env 2002/12/24 22:17:37 @@ -22,7 +22,7 @@ # use forward slashes, we need to set this when # invoking the makefile from DOS, or the wrong separators # will be assumed. -#OSTYPE=msys +OSTYPE=msys
# If building DLL, the version WXVERSION=250 @@ -81,6 +81,7 @@ else CC = gcc endif +CC=winegcc
# C compiler for pure C programs CCC = $(CC) @@ -102,7 +103,7 @@ # Settings for Cyginw/Mingw32 # Some versions of windres cannot cope with the --preprocessor # option. Uncomment the RCPREPROCESSOR line below if yours can. -RESCOMP=windres +RESCOMP=wrc RCINPUTSWITCH=-i RCOUTPUTSWITCH=-o RCINCSWITCH=--include-dir @@ -125,7 +126,7 @@ # Miscellaneous compiler options # GRG: the __MINGW32__ option is not needed anymore # add "-DHAVE_W32API_H" if you have w32api >= 0.5 -OPTIONS = -DSTRICT # -D__MINGW32__ +OPTIONS = -DSTRICT -DwxSIZE_T_IS_UINT -DHAVE_W32API_H -D__MINGW32__ -D_FORCENAMELESSUNION
# Add "-mthreads" if you want to have threads under mingw32 COMMON_THREADFLAGS = @@ -198,12 +199,12 @@
########################## Directories ###############################
-OLELIBS=-lole32 -loleaut32 -luuid +OLELIBS=-lole32 -loleaut32 /usr/local/lib/libwine_uuid.a BASELIBS=-lstdc++ -lgcc -lodbc32 -lwsock32 ifeq ($(wxUSE_GUI),1) WINLIBS= $(BASELIBS) \ -lwinspool -lwinmm -lshell32 \ - -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 \ + -lcomctl32 -lcomdlg32 -lodbc32 -ladvapi32 \ -lodbc32 -lwsock32 -lopengl32 -lglu32 $(OLELIBS) # -loldnames else WINLIBS=$(BASELIBS) @@ -238,7 +239,7 @@ # png, jpeg, etc are exported from wx dll, so skip and save on link time. LIBS = $(EXTRALIBS) $(WXLIB) $(WINLIBS) $(COMPLIBS) else - LIBS = $(EXTRALIBS) $(WXLIB) -lregex -lpng -ljpeg -lzlib -ltiff $(WINLIBS) $(COMPLIBS) + LIBS = $(EXTRALIBS) $(WXLIB) /home/dimi/dev/wine/wxWindows/lib/libregex.a /home/dimi/dev/wine/wxWindows/lib/libpng.a /home/dimi/dev/wine/wxWindows/lib/libjpeg.a /home/dimi/dev/wine/wxWindows/lib/libzlib.a /home/dimi/dev/wine/wxWindows/lib/libtiff.a $(WINLIBS) $(COMPLIBS) endif
WINFLAGS=-D_X86_=1 -DWIN32 -D_WIN32 $(WINVERSION) Index: src/common/datetime.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/datetime.cpp,v retrieving revision 1.71 diff -u -r1.71 datetime.cpp --- src/common/datetime.cpp 2002/12/04 14:06:21 1.71 +++ src/common/datetime.cpp 2002/12/24 22:17:42 @@ -286,7 +286,8 @@ #ifdef WX_GMTOFF_IN_TM return (int)gmtoffset; #else - return (int)WX_TIMEZONE; + //return (int)WX_TIMEZONE; + return LONG_MAX; #endif }
Index: src/common/dynarray.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/dynarray.cpp,v retrieving revision 1.28 diff -u -r1.28 dynarray.cpp --- src/common/dynarray.cpp 2002/12/04 14:06:27 1.28 +++ src/common/dynarray.cpp 2002/12/24 22:17:43 @@ -28,6 +28,7 @@
#include <stdlib.h> #include <string.h> // for memmove +#include <search.h>
#ifndef max #define max(a, b) (((a) > (b)) ? (a) : (b)) Index: src/common/encconv.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/encconv.cpp,v retrieving revision 1.14 diff -u -r1.14 encconv.cpp --- src/common/encconv.cpp 2002/01/25 14:45:20 1.14 +++ src/common/encconv.cpp 2002/12/24 22:17:44 @@ -23,6 +23,7 @@ #include "wx/encconv.h"
#include <stdlib.h> +#include <search.h>
// conversion tables, generated by scripts in $(WXWIN)/misc/unictabl: #ifdef __BORLANDC__ Index: src/common/filefn.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/filefn.cpp,v retrieving revision 1.161 diff -u -r1.161 filefn.cpp --- src/common/filefn.cpp 2002/12/10 21:44:08 1.161 +++ src/common/filefn.cpp 2002/12/24 22:17:49 @@ -1258,7 +1258,7 @@
// assume mkdir() has 2 args on non Windows-OS/2 platforms and on Windows too // for the GNU compiler -#if (!(defined(__WXMSW__) || defined(__WXPM__) || defined(__DOS__))) || (defined(__GNUWIN32__) && !defined(__MINGW32__)) || defined(__WXWINE__) || defined(__WXMICROWIN__) +#if 1 || (!(defined(__WXMSW__) || defined(__WXPM__) || defined(__DOS__))) || (defined(__GNUWIN32__) && !defined(__MINGW32__)) || defined(__WXWINE__) || defined(__WXMICROWIN__) if ( mkdir(wxFNCONV(dirname), perm) != 0 ) #elif defined(__WXPM__) if (::DosCreateDir((PSZ)dirname, NULL) != 0) // enhance for EAB's?? Index: src/common/filename.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/filename.cpp,v retrieving revision 1.101 diff -u -r1.101 filename.cpp --- src/common/filename.cpp 2002/12/04 14:06:32 1.101 +++ src/common/filename.cpp 2002/12/24 22:17:51 @@ -99,7 +99,7 @@ #include <sys/types.h> #include <utime.h> #include <sys/stat.h> -#include <unistd.h> +//#include <unistd.h> #endif
#ifdef __DJGPP__ Index: src/common/list.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/list.cpp,v retrieving revision 1.38 diff -u -r1.38 list.cpp --- src/common/list.cpp 2002/02/06 01:38:08 1.38 +++ src/common/list.cpp 2002/12/24 22:17:52 @@ -31,6 +31,7 @@ #include <stdarg.h> #include <stdlib.h> #include <string.h> +#include <search.h>
#ifndef WX_PRECOMP #include "wx/defs.h" Index: src/common/mimecmn.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/mimecmn.cpp,v retrieving revision 1.23 diff -u -r1.23 mimecmn.cpp --- src/common/mimecmn.cpp 2002/12/04 14:06:45 1.23 +++ src/common/mimecmn.cpp 2002/12/24 22:17:53 @@ -486,7 +486,7 @@
bool wxMimeTypesManager::Unassociate(wxFileType *ft) { -#if defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) && !defined(__WXWINE__) +#if 0 && defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) && !defined(__WXWINE__) return m_impl->Unassociate(ft); #else return ft->Unassociate(); @@ -596,7 +596,7 @@ void wxMimeTypesManager::Initialize(int mcapStyle, const wxString& sExtraDir) { -#if defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) && !defined(__WXWINE__) +#if 0 && defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) && !defined(__WXWINE__) EnsureImpl();
m_impl->Initialize(mcapStyle, sExtraDir); @@ -609,7 +609,7 @@ // and this function clears all the data from the manager void wxMimeTypesManager::ClearData() { -#if defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) && !defined(__WXWINE__) +#if 0 && defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) && !defined(__WXWINE__) EnsureImpl();
m_impl->ClearData(); Index: src/common/string.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/string.cpp,v retrieving revision 1.166 diff -u -r1.166 string.cpp --- src/common/string.cpp 2002/12/10 12:13:23 1.166 +++ src/common/string.cpp 2002/12/24 22:17:55 @@ -41,6 +41,7 @@ #include <ctype.h> #include <string.h> #include <stdlib.h> +#include <search.h>
#ifdef __SALFORDC__ #include <clib.h> Index: src/common/wxchar.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/common/wxchar.cpp,v retrieving revision 1.51 diff -u -r1.51 wxchar.cpp --- src/common/wxchar.cpp 2002/12/10 00:43:28 1.51 +++ src/common/wxchar.cpp 2002/12/24 22:17:57 @@ -105,7 +105,7 @@
bool WXDLLEXPORT wxOKlibc() { -#if wxUSE_WCHAR_T && defined(__UNIX__) && defined(__GLIBC__) +#if 0 && wxUSE_WCHAR_T && defined(__UNIX__) && defined(__GLIBC__) // glibc 2.0 uses UTF-8 even when it shouldn't wchar_t res = 0; if ((MB_CUR_MAX == 2) && Index: src/jpeg/jmorecfg.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/jpeg/jmorecfg.h,v retrieving revision 1.19 diff -u -r1.19 jmorecfg.h --- src/jpeg/jmorecfg.h 2002/05/26 11:49:37 1.19 +++ src/jpeg/jmorecfg.h 2002/12/24 22:17:58 @@ -130,6 +130,7 @@ */
/* UINT8 must hold at least the values 0..255. */ +#ifndef __WINE_BASETSD_H
#ifdef HAVE_UNSIGNED_CHAR typedef unsigned char UINT8; @@ -154,6 +155,8 @@ #ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ typedef short INT16; #endif + +#endif /* __WINE_BASETSD_H */
/* INT32 must hold at least signed 32-bit values. */
Index: src/msw/app.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/msw/app.cpp,v retrieving revision 1.174 diff -u -r1.174 app.cpp --- src/msw/app.cpp 2002/12/04 14:09:06 1.174 +++ src/msw/app.cpp 2002/12/24 22:18:01 @@ -1382,5 +1382,5 @@ // For some reason, with MSVC++ 1.5, WinMain isn't linked in properly // if in a separate file. So include it here to ensure it's linked. #if (defined(__VISUALC__) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__TWIN32__) && !defined(WXMAKINGDLL)) -#include "main.cpp" +//#include "main.cpp" #endif Index: src/msw/dialup.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/msw/dialup.cpp,v retrieving revision 1.34 diff -u -r1.34 dialup.cpp --- src/msw/dialup.cpp 2002/08/30 20:34:25 1.34 +++ src/msw/dialup.cpp 2002/12/24 22:18:02 @@ -50,7 +50,7 @@
// Doesn't yet compile under VC++ 4, BC++, Watcom C++, // Wine: no wininet.h -#if !defined(__BORLANDC__) && \ +#if 0 && !defined(__BORLANDC__) && \ (!defined(__GNUWIN32__) || wxCHECK_W32API_VERSION(0, 5)) && \ !defined(__GNUWIN32_OLD__) && \ !defined(__WATCOMC__) && \ Index: src/msw/gsocket.c =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/msw/gsocket.c,v retrieving revision 1.42 diff -u -r1.42 gsocket.c --- src/msw/gsocket.c 2002/12/06 16:57:30 1.42 +++ src/msw/gsocket.c 2002/12/24 22:18:04 @@ -11,6 +11,8 @@ * PLEASE don't put C++ comments here - this is a C source file. */
+#include <winsock.h> + #ifdef _MSC_VER /* RPCNOTIFICATION_ROUTINE in rasasync.h (included from winsock.h), * warning: conditional expression is constant. @@ -55,8 +57,6 @@ #include <stdlib.h> #include <stddef.h> #include <ctype.h> - -#include <winsock.h>
/* if we use configure for MSW SOCKLEN_T will be already defined */ #ifndef SOCKLEN_T Index: src/msw/utils.cpp =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/msw/utils.cpp,v retrieving revision 1.102 diff -u -r1.102 utils.cpp --- src/msw/utils.cpp 2002/12/07 00:58:11 1.102 +++ src/msw/utils.cpp 2002/12/24 22:18:06 @@ -47,6 +47,7 @@ #endif
#include "wx/timer.h" +#include <unistd.h>
#if !defined(__GNUWIN32__) && !defined(__WXWINE__) && !defined(__SALFORDC__) && !defined(__WXMICROWIN__) #include <direct.h> Index: src/png/pngconf.h =================================================================== RCS file: /pack/cvsroots/wxwindows/wxWindows/src/png/pngconf.h,v retrieving revision 1.7 diff -u -r1.7 pngconf.h --- src/png/pngconf.h 2002/12/04 14:10:03 1.7 +++ src/png/pngconf.h 2002/12/24 22:18:08 @@ -1157,9 +1157,10 @@ # endif #endif
-#if defined(__CYGWIN__) +#if 1 || defined(__CYGWIN__) # undef PNGAPI -# define PNGAPI __cdecl +//# define PNGAPI __cdecl +# define PNGAPI # undef PNG_IMPEXP # define PNG_IMPEXP #endif