Cleanly separate GUI socket-related code from net library.

This fixes linking problems under Unix introduced by recent changes which
fixed previous problems which were due to files not being linked in at all.

In order to provide a clean separation between base, net and core libraries we
now use the same wxSocketManager (wxSocketFDBasedManager), defined in net
library for both console and GUI Unix applications and just use different FD
IO manager for them: the latter can be defined in base and core libraries as
it doesn't involve wxSocketImpl at all, only its base wxFDIOHandler class.

At more detailed level, these changes required:
 1. Adding the new wxFDIOManager class.
 2. Refactoring the old (and now removed) wxSocketFDIOManager to use the same
    code as wxSocketFDIOManager. This involved:
  a) Adding handler and direction parameter to RemoveInput().
  b) Storing the mask of registered events in wxFDIOHandler itself.
  c) Defining wxFDIOManagerUnix which works with wxFDIODispatcher.
 3. Changing the traits classes in Unix ports to define GetFDIOManager()
    instead of GetSocketManager().

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61688 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-08-17 23:02:46 +00:00
parent b79dfbca98
commit 6bcc1145fe
16 changed files with 519 additions and 336 deletions

View File

@ -746,16 +746,17 @@ ALL_BASE_SOURCES = \
src/common/zstream.cpp \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp \
src/unix/mimetype.cpp \
src/msw/basemsw.cpp \
@ -1965,16 +1966,17 @@ COND_USE_STC_1___wxscintilla___depname = \
COND_TOOLKIT__BASE_OSX_SRC = \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp \
src/unix/mimetype.cpp \
src/osx/core/cfstring.cpp \
@ -1985,16 +1987,17 @@ COND_TOOLKIT__BASE_OSX_SRC = \
COND_TOOLKIT_COCOA_BASE_OSX_SRC = \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp \
src/unix/mimetype.cpp \
src/osx/core/cfstring.cpp \
@ -2005,16 +2008,17 @@ COND_TOOLKIT_COCOA_BASE_OSX_SRC = \
COND_TOOLKIT_GTK_BASE_OSX_SRC = \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp \
src/unix/mimetype.cpp \
src/osx/core/cfstring.cpp \
@ -2025,16 +2029,17 @@ COND_TOOLKIT_GTK_BASE_OSX_SRC = \
COND_TOOLKIT_MOTIF_BASE_OSX_SRC = \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp \
src/unix/mimetype.cpp \
src/osx/core/cfstring.cpp \
@ -2050,16 +2055,17 @@ COND_TOOLKIT_OSX_CARBON_BASE_OSX_SRC = \
src/osx/core/utilsexc_base.cpp \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp
@COND_TOOLKIT_OSX_CARBON@BASE_OSX_SRC = $(COND_TOOLKIT_OSX_CARBON_BASE_OSX_SRC)
COND_TOOLKIT_OSX_COCOA_BASE_OSX_SRC = \
@ -2070,31 +2076,33 @@ COND_TOOLKIT_OSX_COCOA_BASE_OSX_SRC = \
src/osx/core/utilsexc_base.cpp \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp
@COND_TOOLKIT_OSX_COCOA@BASE_OSX_SRC = $(COND_TOOLKIT_OSX_COCOA_BASE_OSX_SRC)
COND_TOOLKIT_X11_BASE_OSX_SRC = \
src/common/fdiodispatcher.cpp \
src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \
src/unix/evtloopunix.cpp \
src/unix/dir.cpp \
src/unix/dlunix.cpp \
src/unix/epolldispatcher.cpp \
src/unix/evtloopunix.cpp \
src/unix/fdiounix.cpp \
src/unix/snglinst.cpp \
src/unix/stackwalk.cpp \
src/unix/stdpaths.cpp \
src/unix/timerunx.cpp \
src/unix/threadpsx.cpp \
src/unix/stackwalk.cpp \
src/unix/utilsunx.cpp \
src/unix/mimetype.cpp \
src/osx/core/cfstring.cpp \
@ -3854,16 +3862,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS = \
monodll_utilsexc_base.o \
monodll_fdiodispatcher.o \
monodll_selectdispatcher.o \
monodll_epolldispatcher.o \
monodll_appunix.o \
monodll_evtloopunix.o \
monodll_unix_dir.o \
monodll_dlunix.o \
monodll_epolldispatcher.o \
monodll_evtloopunix.o \
monodll_fdiounix.o \
monodll_unix_snglinst.o \
monodll_unix_stackwalk.o \
monodll_unix_stdpaths.o \
monodll_timerunx.o \
monodll_threadpsx.o \
monodll_unix_stackwalk.o \
monodll_utilsunx.o
@COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS)
@COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS = \
@ -3886,16 +3895,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS = \
COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS = \
monodll_fdiodispatcher.o \
monodll_selectdispatcher.o \
monodll_epolldispatcher.o \
monodll_appunix.o \
monodll_evtloopunix.o \
monodll_unix_dir.o \
monodll_dlunix.o \
monodll_epolldispatcher.o \
monodll_evtloopunix.o \
monodll_fdiounix.o \
monodll_unix_snglinst.o \
monodll_unix_stackwalk.o \
monodll_unix_stdpaths.o \
monodll_timerunx.o \
monodll_threadpsx.o \
monodll_unix_stackwalk.o \
monodll_utilsunx.o \
monodll_unix_mimetype.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS)
@ -5652,16 +5662,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_1 = \
monolib_utilsexc_base.o \
monolib_fdiodispatcher.o \
monolib_selectdispatcher.o \
monolib_epolldispatcher.o \
monolib_appunix.o \
monolib_evtloopunix.o \
monolib_unix_dir.o \
monolib_dlunix.o \
monolib_epolldispatcher.o \
monolib_evtloopunix.o \
monolib_fdiounix.o \
monolib_unix_snglinst.o \
monolib_unix_stackwalk.o \
monolib_unix_stdpaths.o \
monolib_timerunx.o \
monolib_threadpsx.o \
monolib_unix_stackwalk.o \
monolib_utilsunx.o
@COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS_1 = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_1)
@COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS_1 \
@ -5684,16 +5695,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS_1 = \
COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_1 = \
monolib_fdiodispatcher.o \
monolib_selectdispatcher.o \
monolib_epolldispatcher.o \
monolib_appunix.o \
monolib_evtloopunix.o \
monolib_unix_dir.o \
monolib_dlunix.o \
monolib_epolldispatcher.o \
monolib_evtloopunix.o \
monolib_fdiounix.o \
monolib_unix_snglinst.o \
monolib_unix_stackwalk.o \
monolib_unix_stdpaths.o \
monolib_timerunx.o \
monolib_threadpsx.o \
monolib_unix_stackwalk.o \
monolib_utilsunx.o \
monolib_unix_mimetype.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_1 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_1)
@ -7487,16 +7499,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_2 = \
basedll_utilsexc_base.o \
basedll_fdiodispatcher.o \
basedll_selectdispatcher.o \
basedll_epolldispatcher.o \
basedll_appunix.o \
basedll_evtloopunix.o \
basedll_unix_dir.o \
basedll_dlunix.o \
basedll_epolldispatcher.o \
basedll_evtloopunix.o \
basedll_fdiounix.o \
basedll_unix_snglinst.o \
basedll_unix_stackwalk.o \
basedll_unix_stdpaths.o \
basedll_timerunx.o \
basedll_threadpsx.o \
basedll_unix_stackwalk.o \
basedll_utilsunx.o
@COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS_2 = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_2)
@COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS_2 \
@ -7519,16 +7532,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS_2 = \
COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_2 = \
basedll_fdiodispatcher.o \
basedll_selectdispatcher.o \
basedll_epolldispatcher.o \
basedll_appunix.o \
basedll_evtloopunix.o \
basedll_unix_dir.o \
basedll_dlunix.o \
basedll_epolldispatcher.o \
basedll_evtloopunix.o \
basedll_fdiounix.o \
basedll_unix_snglinst.o \
basedll_unix_stackwalk.o \
basedll_unix_stdpaths.o \
basedll_timerunx.o \
basedll_threadpsx.o \
basedll_unix_stackwalk.o \
basedll_utilsunx.o \
basedll_unix_mimetype.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_2 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_2)
@ -7580,16 +7594,17 @@ COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_3 = \
baselib_utilsexc_base.o \
baselib_fdiodispatcher.o \
baselib_selectdispatcher.o \
baselib_epolldispatcher.o \
baselib_appunix.o \
baselib_evtloopunix.o \
baselib_unix_dir.o \
baselib_dlunix.o \
baselib_epolldispatcher.o \
baselib_evtloopunix.o \
baselib_fdiounix.o \
baselib_unix_snglinst.o \
baselib_unix_stackwalk.o \
baselib_unix_stdpaths.o \
baselib_timerunx.o \
baselib_threadpsx.o \
baselib_unix_stackwalk.o \
baselib_utilsunx.o
@COND_PLATFORM_MACOSX_1@__BASE_PLATFORM_SRC_OBJECTS_3 = $(COND_PLATFORM_MACOSX_1___BASE_PLATFORM_SRC_OBJECTS_3)
@COND_PLATFORM_MSDOS_1@__BASE_PLATFORM_SRC_OBJECTS_3 \
@ -7612,16 +7627,17 @@ COND_PLATFORM_OS2_1___BASE_PLATFORM_SRC_OBJECTS_3 = \
COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_3 = \
baselib_fdiodispatcher.o \
baselib_selectdispatcher.o \
baselib_epolldispatcher.o \
baselib_appunix.o \
baselib_evtloopunix.o \
baselib_unix_dir.o \
baselib_dlunix.o \
baselib_epolldispatcher.o \
baselib_evtloopunix.o \
baselib_fdiounix.o \
baselib_unix_snglinst.o \
baselib_unix_stackwalk.o \
baselib_unix_stdpaths.o \
baselib_timerunx.o \
baselib_threadpsx.o \
baselib_unix_stackwalk.o \
baselib_utilsunx.o \
baselib_unix_mimetype.o
@COND_PLATFORM_UNIX_1@__BASE_PLATFORM_SRC_OBJECTS_3 = $(COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_3)
@ -16007,12 +16023,6 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_PLATFORM_OS2_1@monodll_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(MONODLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
@COND_PLATFORM_UNIX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@monodll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@ -16022,15 +16032,6 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_PLATFORM_OS2_1@monodll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@monodll_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
@ -16043,12 +16044,39 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@monodll_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
@COND_PLATFORM_UNIX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@monodll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@monodll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_MACOSX_1@monodll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_UNIX_1@monodll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_MACOSX_1@monodll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_UNIX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@monodll_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
@ -16070,12 +16098,6 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@monodll_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
@COND_PLATFORM_UNIX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@monodll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@monodll_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp
@ -20729,12 +20751,6 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_OS2_1@monolib_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
@COND_PLATFORM_UNIX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@monolib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@ -20744,15 +20760,6 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_OS2_1@monolib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@monolib_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
@ -20765,12 +20772,39 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@monolib_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
@COND_PLATFORM_UNIX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@monolib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@monolib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_MACOSX_1@monolib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_UNIX_1@monolib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_MACOSX_1@monolib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_UNIX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@monolib_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
@ -20792,12 +20826,6 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@monolib_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
@COND_PLATFORM_UNIX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@monolib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@monolib_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp
@ -23861,12 +23889,6 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
@COND_PLATFORM_OS2_1@basedll_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
@COND_PLATFORM_UNIX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@basedll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@ -23876,15 +23898,6 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
@COND_PLATFORM_OS2_1@basedll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@basedll_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
@ -23897,12 +23910,39 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@basedll_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
@COND_PLATFORM_UNIX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@basedll_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@basedll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_MACOSX_1@basedll_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_UNIX_1@basedll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_MACOSX_1@basedll_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_UNIX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@basedll_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
@ -23924,12 +23964,6 @@ basedll_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@basedll_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
@COND_PLATFORM_UNIX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@basedll_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@basedll_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp
@ -24326,12 +24360,6 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
@COND_PLATFORM_OS2_1@baselib_selectdispatcher.o: $(srcdir)/src/common/selectdispatcher.cpp $(BASELIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/selectdispatcher.cpp
@COND_PLATFORM_UNIX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@baselib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@ -24341,15 +24369,6 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
@COND_PLATFORM_OS2_1@baselib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@baselib_unix_dir.o: $(srcdir)/src/unix/dir.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/dir.cpp
@ -24362,12 +24381,39 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@baselib_dlunix.o: $(srcdir)/src/unix/dlunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/dlunix.cpp
@COND_PLATFORM_UNIX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_MACOSX_1@baselib_epolldispatcher.o: $(srcdir)/src/unix/epolldispatcher.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/epolldispatcher.cpp
@COND_PLATFORM_UNIX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_MACOSX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_OS2_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_OS2_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@COND_PLATFORM_UNIX_1@baselib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_MACOSX_1@baselib_fdiounix.o: $(srcdir)/src/unix/fdiounix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/fdiounix.cpp
@COND_PLATFORM_UNIX_1@baselib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_MACOSX_1@baselib_unix_snglinst.o: $(srcdir)/src/unix/snglinst.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/snglinst.cpp
@COND_PLATFORM_UNIX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@baselib_unix_stdpaths.o: $(srcdir)/src/unix/stdpaths.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stdpaths.cpp
@ -24389,12 +24435,6 @@ baselib_cocoa_utils.o: $(srcdir)/src/osx/cocoa/utils.mm $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@baselib_threadpsx.o: $(srcdir)/src/unix/threadpsx.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/threadpsx.cpp
@COND_PLATFORM_UNIX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_MACOSX_1@baselib_unix_stackwalk.o: $(srcdir)/src/unix/stackwalk.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/stackwalk.cpp
@COND_PLATFORM_UNIX_1@baselib_utilsunx.o: $(srcdir)/src/unix/utilsunx.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/utilsunx.cpp

View File

@ -63,6 +63,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/unix/dlunix.cpp
src/unix/epolldispatcher.cpp
src/unix/evtloopunix.cpp
src/unix/fdiounix.cpp
src/unix/snglinst.cpp
src/unix/stackwalk.cpp
src/unix/stdpaths.cpp

View File

@ -27,11 +27,9 @@ public:
// Clean up message queue.
virtual void TerminateGui(unsigned long ulHab);
#if wxUSE_SOCKETS
// returns the select()-based socket manager for console applications which
// is also used by some ports (wxX11, wxDFB) in the GUI build (hence it is
// here and not in wxConsoleAppTraits)
virtual wxSocketManager *GetSocketManager();
virtual wxFDIOManager *GetFDIOManager();
#endif
};

View File

@ -50,7 +50,7 @@ public:
virtual wxString GetDesktopEnvironment() const;
#endif
#if wxUSE_SOCKETS
virtual wxSocketManager *GetSocketManager();
virtual wxFDIOManager *GetFDIOManager();
#endif
};

View File

@ -18,6 +18,8 @@
class wxFDIOHandler
{
public:
wxFDIOHandler() { m_regmask = 0; }
// called when descriptor is available for non-blocking read
virtual void OnReadWaiting() = 0;
@ -31,8 +33,21 @@ public:
// wxSocketImplUnix currently
virtual bool IsOk() const { return true; }
// get/set the mask of events for which we're currently registered for:
// it's a combination of wxFDIO_{INPUT,OUTPUT,EXCEPTION}
int GetRegisteredEvents() const { return m_regmask; }
void SetRegisteredEvent(int flag) { m_regmask |= flag; }
void ClearRegisteredEvent(int flag) { m_regmask &= ~flag; }
// virtual dtor for the base class
virtual ~wxFDIOHandler() { }
private:
int m_regmask;
wxDECLARE_NO_COPY_CLASS(wxFDIOHandler);
};
#endif // _WX_PRIVATE_FDIOHANDLER_H_

View File

@ -0,0 +1,43 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/private/fdiomanager.h
// Purpose: declaration of wxFDIOManager
// Author: Vadim Zeitlin
// Created: 2009-08-17
// RCS-ID: $Id: wxhead.h,v 1.11 2009-06-29 10:23:04 zeitlin Exp $
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PRIVATE_FDIOMANAGER_H_
#define _WX_PRIVATE_FDIOMANAGER_H_
#include "wx/private/fdiohandler.h"
// ----------------------------------------------------------------------------
// wxFDIOManager: register or unregister wxFDIOHandlers
// ----------------------------------------------------------------------------
// currently only used in wxGTK and wxMotif, see wx/unix/apptrait.h
class wxFDIOManager
{
public:
// identifies either input or output direction
//
// NB: the values of this enum shouldn't change
enum Direction
{
INPUT,
OUTPUT
};
// start or stop monitoring the events on the given file descriptor
virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d) = 0;
virtual void RemoveInput(wxFDIOHandler *handler, int fd, Direction d) = 0;
// empty but virtual dtor for the base class
virtual ~wxFDIOManager() { }
};
#endif // _WX_PRIVATE_FDIOMANAGER_H_

View File

@ -14,6 +14,7 @@
struct wxEndProcessData;
struct wxExecuteData;
class wxFDIOManager;
// ----------------------------------------------------------------------------
// wxAppTraits: the Unix version adds extra hooks needed by Unix code
@ -42,6 +43,18 @@ public:
// loop
virtual int AddProcessCallback(wxEndProcessData *data, int fd);
#if wxUSE_SOCKETS
// return a pointer to the object which should be used to integrate
// monitoring of the file descriptors to the event loop (currently this is
// used for the sockets only but should be used for arbitrary event loop
// sources in the future)
//
// this object may be different for the console and GUI applications
//
// the pointer is not deleted by the caller as normally it points to a
// static variable
virtual wxFDIOManager *GetFDIOManager();
#endif // wxUSE_SOCKETS
protected:
// a helper for the implementation of WaitForChild() in wxGUIAppTraits:

View File

@ -36,7 +36,12 @@ public:
// TODO: Should we use XtAddInput() for wxX11 too? Or, vice versa, if there is
// no advantage in doing this compared to the generic way currently used
// by wxX11, should we continue to use GTK/Motif-specific stuff?
#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__)
#if defined(__WXGTK__) || defined(__WXMOTIF__)
#define wxHAS_GUI_FDIOMANAGER
#define wxHAS_GUI_PROCESS_CALLBACKS
#endif // ports using wxFDIOManager
#if defined(__WXMAC__)
#define wxHAS_GUI_PROCESS_CALLBACKS
#define wxHAS_GUI_SOCKET_MANAGER
#endif
@ -76,9 +81,17 @@ public:
virtual bool ShowAssertDialog(const wxString& msg);
#endif
#if wxUSE_SOCKETS && defined(wxHAS_GUI_SOCKET_MANAGER)
#if wxUSE_SOCKETS
#ifdef wxHAS_GUI_SOCKET_MANAGER
virtual wxSocketManager *GetSocketManager();
#endif
#ifdef wxHAS_GUI_FDIOMANAGER
virtual wxFDIOManager *GetFDIOManager();
#endif
#endif // wxUSE_SOCKETS
};
#endif // wxUSE_GUI

View File

@ -0,0 +1,28 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/unix/private/fdiounix.h
// Purpose: wxFDIOManagerUnix class used by console Unix applications
// Author: Vadim Zeitlin
// Created: 2009-08-17
// RCS-ID: $Id: wxhead.h,v 1.11 2009-06-29 10:23:04 zeitlin Exp $
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _UNIX_PRIVATE_FDIOUNIX_H_
#define _UNIX_PRIVATE_FDIOUNIX_H_
#include "wx/private/fdiomanager.h"
// ----------------------------------------------------------------------------
// wxFDIOManagerUnix: implement wxFDIOManager interface using wxFDIODispatcher
// ----------------------------------------------------------------------------
class wxFDIOManagerUnix : public wxFDIOManager
{
public:
virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d);
virtual void RemoveInput(wxFDIOHandler *handler, int fd, Direction d);
};
#endif // _UNIX_PRIVATE_FDIOUNIX_H_

View File

@ -14,7 +14,7 @@
#include <unistd.h>
#include <sys/ioctl.h>
#include "wx/private/fdiodispatcher.h"
#include "wx/private/fdiomanager.h"
class wxSocketImplUnix : public wxSocketImpl,
public wxFDIOHandler
@ -25,8 +25,6 @@ public:
{
m_fds[0] =
m_fds[1] = -1;
m_enabledCallbacks = 0;
}
virtual wxSocketError GetLastError() const;
@ -54,14 +52,6 @@ public:
virtual void OnExceptionWaiting();
virtual bool IsOk() const { return m_fd != INVALID_SOCKET; }
// Unix-specific functions used by wxSocketFDIOManager only
bool HasAnyEnabledCallbacks() const { return m_enabledCallbacks != 0; }
void EnableCallback(wxFDIODispatcherEntryFlags flag)
{ m_enabledCallbacks |= flag; }
void DisableCallback(wxFDIODispatcherEntryFlags flag)
{ m_enabledCallbacks &= ~flag; }
int GetEnabledCallbacks() const { return m_enabledCallbacks; }
private:
virtual void DoClose()
{
@ -92,10 +82,6 @@ protected:
// with the socket
int m_fds[2];
// the events which are currently enabled for this socket, combination of
// wxFDIO_INPUT and wxFDIO_OUTPUT values
int m_enabledCallbacks;
private:
// notify the associated wxSocket about a change in socket state and shut
// down the socket if the event is wxSOCKET_LOST
@ -110,12 +96,18 @@ private:
friend class wxSocketFDBasedManager;
};
// A version of wxSocketManager which uses FDs for socket IO
// A version of wxSocketManager which uses FDs for socket IO: it is used by
// Unix console applications and some X11-like ports (wxGTK and wxMotif but not
// wxX11 currently) which implement their own port-specific wxFDIOManagers
class wxSocketFDBasedManager : public wxSocketManager
{
public:
// no special initialization/cleanup needed when using FDs
virtual bool OnInit() { return true; }
wxSocketFDBasedManager()
{
m_fdioManager = NULL;
}
virtual bool OnInit();
virtual void OnExit() { }
virtual wxSocketImpl *CreateSocket(wxSocketBase& wxsocket)
@ -123,95 +115,23 @@ public:
return new wxSocketImplUnix(wxsocket);
}
virtual void Install_Callback(wxSocketImpl *socket_, wxSocketNotify event);
virtual void Uninstall_Callback(wxSocketImpl *socket_, wxSocketNotify event);
protected:
// identifies either input or output direction
//
// NB: the values of this enum shouldn't change
enum SocketDir
{
FD_INPUT,
FD_OUTPUT
};
// get the FD index corresponding to the given wxSocketNotify
SocketDir GetDirForEvent(wxSocketImpl *socket, wxSocketNotify event)
{
switch ( event )
{
default:
wxFAIL_MSG( "unknown socket event" );
return FD_INPUT; // we must return something
case wxSOCKET_LOST:
wxFAIL_MSG( "unexpected socket event" );
return FD_INPUT; // as above
case wxSOCKET_INPUT:
return FD_INPUT;
case wxSOCKET_OUTPUT:
return FD_OUTPUT;
case wxSOCKET_CONNECTION:
// for server sockets we're interested in events indicating
// that a new connection is pending, i.e. that accept() will
// succeed and this is indicated by socket becoming ready for
// reading, while for the other ones we're interested in the
// completion of non-blocking connect() which is indicated by
// the socket becoming ready for writing
return socket->IsServer() ? FD_INPUT : FD_OUTPUT;
}
}
wxFDIOManager::Direction
GetDirForEvent(wxSocketImpl *socket, wxSocketNotify event);
// access the FDs we store
int& FD(wxSocketImplUnix *socket, SocketDir d)
int& FD(wxSocketImplUnix *socket, wxFDIOManager::Direction d)
{
return socket->m_fds[d];
}
};
// Common base class for all ports using X11-like (and hence implemented in
// X11, Motif and GTK) AddInput() and RemoveInput() functions
class wxSocketInputBasedManager : public wxSocketFDBasedManager
{
public:
virtual void Install_Callback(wxSocketImpl *socket_, wxSocketNotify event)
{
wxSocketImplUnix * const
socket = static_cast<wxSocketImplUnix *>(socket_);
wxFDIOManager *m_fdioManager;
wxCHECK_RET( socket->m_fd != -1,
"shouldn't be called on invalid socket" );
const SocketDir d = GetDirForEvent(socket, event);
int& fd = FD(socket, d);
if ( fd != -1 )
RemoveInput(fd);
fd = AddInput(socket, socket->m_fd, d);
}
virtual void Uninstall_Callback(wxSocketImpl *socket_, wxSocketNotify event)
{
wxSocketImplUnix * const
socket = static_cast<wxSocketImplUnix *>(socket_);
const SocketDir d = GetDirForEvent(socket, event);
int& fd = FD(socket, d);
if ( fd != -1 )
{
RemoveInput(fd);
fd = -1;
}
}
private:
// these functions map directly to XtAdd/RemoveInput() or
// gdk_input_add/remove()
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d) = 0;
virtual void RemoveInput(int fd) = 0;
wxDECLARE_NO_COPY_CLASS(wxSocketFDBasedManager);
};
#endif /* _WX_UNIX_GSOCKUNX_H_ */

View File

@ -24,83 +24,91 @@
#pragma hdrstop
#endif
#if wxUSE_SOCKETS && wxUSE_SELECT_DISPATCHER
#if wxUSE_SOCKETS
#include "wx/app.h"
#include "wx/apptrait.h"
#include "wx/private/socket.h"
#include "wx/link.h"
// ============================================================================
// implementation
// wxSocketFDBasedManager implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxSocketFDIOManager: socket manager using wxFDIODispatcher
// ----------------------------------------------------------------------------
class wxSocketFDIOManager : public wxSocketFDBasedManager
bool wxSocketFDBasedManager::OnInit()
{
public:
virtual void Install_Callback(wxSocketImpl *socket, wxSocketNotify event);
virtual void Uninstall_Callback(wxSocketImpl *socket, wxSocketNotify event);
};
wxAppTraits * const traits = wxApp::GetTraitsIfExists();
if ( !traits )
return false;
void wxSocketFDIOManager::Install_Callback(wxSocketImpl *socket_,
wxSocketNotify event)
{
wxSocketImplUnix * const socket = static_cast<wxSocketImplUnix *>(socket_);
const int fd = socket->m_fd;
if ( fd == -1 )
return;
const SocketDir d = GetDirForEvent(socket, event);
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
if ( !dispatcher )
return;
FD(socket, d) = fd;
// register it when it's used for the first time, update it if it had been
// previously registered
const bool alreadyRegistered = socket->HasAnyEnabledCallbacks();
socket->EnableCallback(d == FD_INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT);
if ( alreadyRegistered )
dispatcher->ModifyFD(fd, socket, socket->GetEnabledCallbacks());
else
dispatcher->RegisterFD(fd, socket, socket->GetEnabledCallbacks());
m_fdioManager = traits->GetFDIOManager();
return m_fdioManager != NULL;
}
void wxSocketFDIOManager::Uninstall_Callback(wxSocketImpl *socket_,
wxSocketNotify event)
void wxSocketFDBasedManager::Install_Callback(wxSocketImpl *socket_,
wxSocketNotify event)
{
wxSocketImplUnix * const socket = static_cast<wxSocketImplUnix *>(socket_);
wxSocketImplUnix * const
socket = static_cast<wxSocketImplUnix *>(socket_);
const SocketDir d = GetDirForEvent(socket, event);
wxCHECK_RET( socket->m_fd != -1,
"shouldn't be called on invalid socket" );
const int fd = FD(socket, d);
if ( fd == -1 )
return;
const wxFDIOManager::Direction d = GetDirForEvent(socket, event);
FD(socket, d) = -1;
int& fd = FD(socket, d);
if ( fd != -1 )
m_fdioManager->RemoveInput(socket, fd, d);
const wxFDIODispatcherEntryFlags
flag = d == FD_INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT;
fd = m_fdioManager->AddInput(socket, socket->m_fd, d);
}
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
if ( !dispatcher )
return;
void wxSocketFDBasedManager::Uninstall_Callback(wxSocketImpl *socket_,
wxSocketNotify event)
{
wxSocketImplUnix * const
socket = static_cast<wxSocketImplUnix *>(socket_);
socket->DisableCallback(flag);
const wxFDIOManager::Direction d = GetDirForEvent(socket, event);
if ( !socket->HasAnyEnabledCallbacks() )
dispatcher->UnregisterFD(fd);
else
dispatcher->ModifyFD(fd, socket, socket->GetEnabledCallbacks());
int& fd = FD(socket, d);
if ( fd != -1 )
{
m_fdioManager->RemoveInput(socket, fd, d);
fd = -1;
}
}
wxFDIOManager::Direction
wxSocketFDBasedManager::GetDirForEvent(wxSocketImpl *socket,
wxSocketNotify event)
{
switch ( event )
{
default:
wxFAIL_MSG( "unknown socket event" );
return wxFDIOManager::INPUT; // we must return something
case wxSOCKET_LOST:
wxFAIL_MSG( "unexpected socket event" );
return wxFDIOManager::INPUT; // as above
case wxSOCKET_INPUT:
return wxFDIOManager::INPUT;
case wxSOCKET_OUTPUT:
return wxFDIOManager::OUTPUT;
case wxSOCKET_CONNECTION:
// for server sockets we're interested in events indicating
// that a new connection is pending, i.e. that accept() will
// succeed and this is indicated by socket becoming ready for
// reading, while for the other ones we're interested in the
// completion of non-blocking connect() which is indicated by
// the socket becoming ready for writing
return socket->IsServer() ? wxFDIOManager::INPUT
: wxFDIOManager::OUTPUT;
}
}
// set the wxBase variable to point to our wxSocketManager implementation
@ -111,7 +119,7 @@ static struct ManagerSetter
{
ManagerSetter()
{
static wxSocketFDIOManager s_manager;
static wxSocketFDBasedManager s_manager;
wxAppTraits::SetDefaultSocketManager(&s_manager);
}
} gs_managerSetter;

View File

@ -5,6 +5,7 @@
// Created: 1999
// RCS-ID: $Id$
// Copyright: (c) 1999, 2007 wxWidgets dev team
// (c) 2009 Vadim Zeitlin
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
@ -13,14 +14,11 @@
#if wxUSE_SOCKETS
#include <stdlib.h>
#include <stdio.h>
#include <gdk/gdk.h>
#include <glib.h>
#include "wx/private/socket.h"
#include "wx/apptrait.h"
#include "wx/private/fdiomanager.h"
extern "C" {
static
@ -28,7 +26,7 @@ void wxSocket_GDK_Input(gpointer data,
gint WXUNUSED(source),
GdkInputCondition condition)
{
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
if ( condition & GDK_INPUT_READ )
{
@ -46,29 +44,30 @@ void wxSocket_GDK_Input(gpointer data,
}
}
class GTKSocketManager : public wxSocketInputBasedManager
class GTKFDIOManager : public wxFDIOManager
{
public:
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d)
{
return gdk_input_add
(
fd,
d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
d == OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
wxSocket_GDK_Input,
handler
);
}
virtual void RemoveInput(int fd)
virtual void
RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d))
{
gdk_input_remove(fd);
}
};
wxSocketManager *wxGUIAppTraits::GetSocketManager()
wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
{
static GTKSocketManager s_manager;
static GTKFDIOManager s_manager;
return &s_manager;
}

View File

@ -5,6 +5,7 @@
// Created: 1999
// RCS-ID: $Id$
// Copyright: (c) 1999, 2007 wxWidgets dev team
// (c) 2009 Vadim Zeitlin
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
@ -13,14 +14,11 @@
#if wxUSE_SOCKETS
#include <stdlib.h>
#include <stdio.h>
#include <gdk/gdk.h>
#include <glib.h>
#include "wx/private/socket.h"
#include "wx/apptrait.h"
#include "wx/private/fdiomanager.h"
extern "C" {
static
@ -28,7 +26,7 @@ void wxSocket_GDK_Input(gpointer data,
gint WXUNUSED(source),
GdkInputCondition condition)
{
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
if ( condition & GDK_INPUT_READ )
{
@ -46,29 +44,30 @@ void wxSocket_GDK_Input(gpointer data,
}
}
class GTKSocketManager : public wxSocketInputBasedManager
class GTKFDIOManager : public wxFDIOManager
{
public:
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d)
{
return gdk_input_add
(
fd,
d == FD_OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
d == OUTPUT ? GDK_INPUT_WRITE : GDK_INPUT_READ,
wxSocket_GDK_Input,
handler
);
}
virtual void RemoveInput(int fd)
virtual void
RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d))
{
gdk_input_remove(fd);
}
};
wxSocketManager *wxGUIAppTraits::GetSocketManager()
wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
{
static GTKSocketManager s_manager;
static GTKFDIOManager s_manager;
return &s_manager;
}

View File

@ -15,7 +15,7 @@
#include <X11/Intrinsic.h> // XtAppAdd/RemoveInput()
#include "wx/motif/private.h" // wxGetAppContext()
#include "wx/private/socket.h"
#include "wx/private/fdiomanager.h"
#include "wx/apptrait.h"
extern "C" {
@ -23,7 +23,7 @@ extern "C" {
static void wxSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
XtInputId *WXUNUSED(id))
{
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
handler->OnReadWaiting();
}
@ -31,39 +31,40 @@ static void wxSocket_Motif_Input(XtPointer data, int *WXUNUSED(fid),
static void wxSocket_Motif_Output(XtPointer data, int *WXUNUSED(fid),
XtInputId *WXUNUSED(id))
{
wxSocketImplUnix * const handler = static_cast<wxSocketImplUnix *>(data);
wxFDIOHandler * const handler = static_cast<wxFDIOHandler *>(data);
handler->OnWriteWaiting();
}
}
class MotifSocketManager : public wxSocketInputBasedManager
class MotifFDIOManager : public wxFDIOManager
{
public:
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
virtual int AddInput(wxFDIOHandler *handler, int fd, Direction d)
{
return XtAppAddInput
(
wxGetAppContext(),
fd,
(XtPointer)(d == FD_OUTPUT ? XtInputWriteMask
: XtInputReadMask),
d == FD_OUTPUT ? wxSocket_Motif_Output
: wxSocket_Motif_Input,
(XtPointer)(d == OUTPUT ? XtInputWriteMask
: XtInputReadMask),
d == OUTPUT ? wxSocket_Motif_Output
: wxSocket_Motif_Input,
handler
);
}
virtual void RemoveInput(int fd)
virtual void
RemoveInput(wxFDIOHandler* WXUNUSED(handler), int fd, Direction WXUNUSED(d))
{
XtRemoveInput(fd);
}
};
wxSocketManager *wxGUIAppTraits::GetSocketManager()
wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
{
static MotifSocketManager s_manager;
static MotifFDIOManager s_manager;
return &s_manager;
}

View File

@ -23,22 +23,24 @@
static void wxSocket_PM_Input(void *data)
{
wxSocketImplUnix *handler = static_cast<wxSocketImplUnix *>(data);
wxFDIOHandler *handler = static_cast<wxSocketImplUnix *>(data);
handler->OnReadWaiting();
}
static void wxSocket_PM_Output(void *data)
{
wxSocketImplUnix *handler = static_cast<wxSocketImplUnix *>(data);
wxFDIOHandler *handler = static_cast<wxSocketImplUnix *>(data);
handler->OnWriteWaiting();
}
class PMSocketManager : public wxSocketInputBasedManager
class PMFDIOManager : public wxFDIOManager
{
public:
virtual int AddInput(wxSocketImplUnix *handler, int fd, SocketDir d)
virtual int AddInput(wxFDIOHandler *handler,
int fd,
wxFDIOManager::Direction d)
{
if (d == FD_OUTPUT)
return wxTheApp->AddSocketHandler(fd, wxSockWriteMask,
@ -48,15 +50,18 @@ public:
wxSocket_PM_Input, handler);
}
virtual void RemoveInput(int fd)
virtual void
RemoveInput(wxFDIOHandler * WXUNUSED(handler),
int fd,
wxFDIOManager::Direction WXUNUSED(dir))
{
wxTheApp->RemoveSocketHandler(fd);
}
};
wxSocketManager *wxGUIAppTraits::GetSocketManager()
wxFDIOManager *wxGUIAppTraits::GetFDIOManager()
{
static PMSocketManager s_manager;
static PMFDIOManager s_manager;
return &s_manager;
}

100
src/unix/fdiounix.cpp Normal file
View File

@ -0,0 +1,100 @@
///////////////////////////////////////////////////////////////////////////////
// Name: src/unix/fdiounix.cpp
// Purpose: wxFDIOManager implementation for console Unix applications
// Author: Vadim Zeitlin
// Created: 2009-08-17
// RCS-ID: $Id: wxhead.cpp,v 1.10 2009-06-29 10:23:04 zeitlin Exp $
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// for compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "wx/apptrait.h"
#include "wx/private/fdiodispatcher.h"
#include "wx/unix/private/fdiounix.h"
// ============================================================================
// wxFDIOManagerUnix implementation
// ============================================================================
int wxFDIOManagerUnix::AddInput(wxFDIOHandler *handler, int fd, Direction d)
{
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
wxCHECK_MSG( dispatcher, -1, "can't monitor FDs without FD IO dispatcher" );
// translate our direction to dispatcher flags
const int flag = d == INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT;
// we need to either register this FD with the dispatcher or update an
// existing registration depending on whether it had been previously
// registered for anything or not
bool ok;
const int regmask = handler->GetRegisteredEvents();
if ( !regmask )
{
ok = dispatcher->RegisterFD(fd, handler, flag);
}
else
{
ok = dispatcher->ModifyFD(fd, handler, regmask | flag);
}
if ( !ok )
return -1;
// update the stored mask of registered events
handler->SetRegisteredEvent(flag);
return fd;
}
void wxFDIOManagerUnix::RemoveInput(wxFDIOHandler *handler, int fd, Direction d)
{
wxFDIODispatcher * const dispatcher = wxFDIODispatcher::Get();
if ( !dispatcher )
return;
const int flag = d == INPUT ? wxFDIO_INPUT : wxFDIO_OUTPUT;
// just as in AddInput() above we may need to either just modify the FD or
// remove it completely if we don't need to monitor it any more
bool ok;
const int regmask = handler->GetRegisteredEvents();
if ( regmask == flag )
{
ok = dispatcher->UnregisterFD(fd);
}
else
{
ok = dispatcher->ModifyFD(fd, handler, regmask & ~flag);
}
if ( !ok )
{
wxLogDebug("Failed to unregister %d in direction %d", fd, d);
}
// do this even after a failure to unregister it, we still tried...
handler->ClearRegisteredEvent(flag);
}
wxFDIOManager *wxAppTraits::GetFDIOManager()
{
static wxFDIOManagerUnix s_manager;
return &s_manager;
}