replace wxAddProcessCallback() with wxAppTraits::AddProcessCallback() to fix linking problems in Unix ports; also reduce code duplication between GUI and base versions making src/unix/baseunix.cpp unnecessary any longer

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52667 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-03-22 00:07:13 +00:00
parent 9c97f8ea88
commit 1d043598b7
15 changed files with 302 additions and 1095 deletions

View File

@@ -729,7 +729,6 @@ ALL_BASE_SOURCES = \
src/common/selectdispatcher.cpp \ src/common/selectdispatcher.cpp \
src/unix/epolldispatcher.cpp \ src/unix/epolldispatcher.cpp \
src/unix/appunix.cpp \ src/unix/appunix.cpp \
src/unix/baseunix.cpp \
src/unix/evtloopunix.cpp \ src/unix/evtloopunix.cpp \
src/unix/dlunix.cpp \ src/unix/dlunix.cpp \
src/unix/snglinst.cpp \ src/unix/snglinst.cpp \
@@ -3550,7 +3549,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS = \
monodll_selectdispatcher.o \ monodll_selectdispatcher.o \
monodll_epolldispatcher.o \ monodll_epolldispatcher.o \
monodll_appunix.o \ monodll_appunix.o \
monodll_baseunix.o \
monodll_evtloopunix.o \ monodll_evtloopunix.o \
monodll_dlunix.o \ monodll_dlunix.o \
monodll_snglinst.o \ monodll_snglinst.o \
@@ -3588,7 +3586,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS = \
monodll_selectdispatcher.o \ monodll_selectdispatcher.o \
monodll_epolldispatcher.o \ monodll_epolldispatcher.o \
monodll_appunix.o \ monodll_appunix.o \
monodll_baseunix.o \
monodll_evtloopunix.o \ monodll_evtloopunix.o \
monodll_dlunix.o \ monodll_dlunix.o \
monodll_snglinst.o \ monodll_snglinst.o \
@@ -3609,7 +3606,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS = \
monodll_selectdispatcher.o \ monodll_selectdispatcher.o \
monodll_epolldispatcher.o \ monodll_epolldispatcher.o \
monodll_appunix.o \ monodll_appunix.o \
monodll_baseunix.o \
monodll_evtloopunix.o \ monodll_evtloopunix.o \
monodll_dlunix.o \ monodll_dlunix.o \
monodll_snglinst.o \ monodll_snglinst.o \
@@ -3630,7 +3626,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS = \
monodll_selectdispatcher.o \ monodll_selectdispatcher.o \
monodll_epolldispatcher.o \ monodll_epolldispatcher.o \
monodll_appunix.o \ monodll_appunix.o \
monodll_baseunix.o \
monodll_evtloopunix.o \ monodll_evtloopunix.o \
monodll_dlunix.o \ monodll_dlunix.o \
monodll_snglinst.o \ monodll_snglinst.o \
@@ -3660,7 +3655,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS = \
monodll_selectdispatcher.o \ monodll_selectdispatcher.o \
monodll_epolldispatcher.o \ monodll_epolldispatcher.o \
monodll_appunix.o \ monodll_appunix.o \
monodll_baseunix.o \
monodll_evtloopunix.o \ monodll_evtloopunix.o \
monodll_dlunix.o \ monodll_dlunix.o \
monodll_snglinst.o \ monodll_snglinst.o \
@@ -3673,7 +3667,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS = \
monodll_selectdispatcher.o \ monodll_selectdispatcher.o \
monodll_epolldispatcher.o \ monodll_epolldispatcher.o \
monodll_appunix.o \ monodll_appunix.o \
monodll_baseunix.o \
monodll_evtloopunix.o \ monodll_evtloopunix.o \
monodll_dlunix.o \ monodll_dlunix.o \
monodll_snglinst.o \ monodll_snglinst.o \
@@ -3694,7 +3687,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS = \
monodll_selectdispatcher.o \ monodll_selectdispatcher.o \
monodll_epolldispatcher.o \ monodll_epolldispatcher.o \
monodll_appunix.o \ monodll_appunix.o \
monodll_baseunix.o \
monodll_evtloopunix.o \ monodll_evtloopunix.o \
monodll_dlunix.o \ monodll_dlunix.o \
monodll_snglinst.o \ monodll_snglinst.o \
@@ -5456,7 +5448,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_1 = \
monolib_selectdispatcher.o \ monolib_selectdispatcher.o \
monolib_epolldispatcher.o \ monolib_epolldispatcher.o \
monolib_appunix.o \ monolib_appunix.o \
monolib_baseunix.o \
monolib_evtloopunix.o \ monolib_evtloopunix.o \
monolib_dlunix.o \ monolib_dlunix.o \
monolib_snglinst.o \ monolib_snglinst.o \
@@ -5494,7 +5485,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS_1 = \
monolib_selectdispatcher.o \ monolib_selectdispatcher.o \
monolib_epolldispatcher.o \ monolib_epolldispatcher.o \
monolib_appunix.o \ monolib_appunix.o \
monolib_baseunix.o \
monolib_evtloopunix.o \ monolib_evtloopunix.o \
monolib_dlunix.o \ monolib_dlunix.o \
monolib_snglinst.o \ monolib_snglinst.o \
@@ -5515,7 +5505,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS_1 = \
monolib_selectdispatcher.o \ monolib_selectdispatcher.o \
monolib_epolldispatcher.o \ monolib_epolldispatcher.o \
monolib_appunix.o \ monolib_appunix.o \
monolib_baseunix.o \
monolib_evtloopunix.o \ monolib_evtloopunix.o \
monolib_dlunix.o \ monolib_dlunix.o \
monolib_snglinst.o \ monolib_snglinst.o \
@@ -5536,7 +5525,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS_1 = \
monolib_selectdispatcher.o \ monolib_selectdispatcher.o \
monolib_epolldispatcher.o \ monolib_epolldispatcher.o \
monolib_appunix.o \ monolib_appunix.o \
monolib_baseunix.o \
monolib_evtloopunix.o \ monolib_evtloopunix.o \
monolib_dlunix.o \ monolib_dlunix.o \
monolib_snglinst.o \ monolib_snglinst.o \
@@ -5566,7 +5554,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS_1 = \
monolib_selectdispatcher.o \ monolib_selectdispatcher.o \
monolib_epolldispatcher.o \ monolib_epolldispatcher.o \
monolib_appunix.o \ monolib_appunix.o \
monolib_baseunix.o \
monolib_evtloopunix.o \ monolib_evtloopunix.o \
monolib_dlunix.o \ monolib_dlunix.o \
monolib_snglinst.o \ monolib_snglinst.o \
@@ -5579,7 +5566,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS_1 = \
monolib_selectdispatcher.o \ monolib_selectdispatcher.o \
monolib_epolldispatcher.o \ monolib_epolldispatcher.o \
monolib_appunix.o \ monolib_appunix.o \
monolib_baseunix.o \
monolib_evtloopunix.o \ monolib_evtloopunix.o \
monolib_dlunix.o \ monolib_dlunix.o \
monolib_snglinst.o \ monolib_snglinst.o \
@@ -5600,7 +5586,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS_1 = \
monolib_selectdispatcher.o \ monolib_selectdispatcher.o \
monolib_epolldispatcher.o \ monolib_epolldispatcher.o \
monolib_appunix.o \ monolib_appunix.o \
monolib_baseunix.o \
monolib_evtloopunix.o \ monolib_evtloopunix.o \
monolib_dlunix.o \ monolib_dlunix.o \
monolib_snglinst.o \ monolib_snglinst.o \
@@ -7399,7 +7384,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_2 = \
basedll_selectdispatcher.o \ basedll_selectdispatcher.o \
basedll_epolldispatcher.o \ basedll_epolldispatcher.o \
basedll_appunix.o \ basedll_appunix.o \
basedll_baseunix.o \
basedll_evtloopunix.o \ basedll_evtloopunix.o \
basedll_dlunix.o \ basedll_dlunix.o \
basedll_snglinst.o \ basedll_snglinst.o \
@@ -7437,7 +7421,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS_2 = \
basedll_selectdispatcher.o \ basedll_selectdispatcher.o \
basedll_epolldispatcher.o \ basedll_epolldispatcher.o \
basedll_appunix.o \ basedll_appunix.o \
basedll_baseunix.o \
basedll_evtloopunix.o \ basedll_evtloopunix.o \
basedll_dlunix.o \ basedll_dlunix.o \
basedll_snglinst.o \ basedll_snglinst.o \
@@ -7458,7 +7441,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS_2 = \
basedll_selectdispatcher.o \ basedll_selectdispatcher.o \
basedll_epolldispatcher.o \ basedll_epolldispatcher.o \
basedll_appunix.o \ basedll_appunix.o \
basedll_baseunix.o \
basedll_evtloopunix.o \ basedll_evtloopunix.o \
basedll_dlunix.o \ basedll_dlunix.o \
basedll_snglinst.o \ basedll_snglinst.o \
@@ -7479,7 +7461,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS_2 = \
basedll_selectdispatcher.o \ basedll_selectdispatcher.o \
basedll_epolldispatcher.o \ basedll_epolldispatcher.o \
basedll_appunix.o \ basedll_appunix.o \
basedll_baseunix.o \
basedll_evtloopunix.o \ basedll_evtloopunix.o \
basedll_dlunix.o \ basedll_dlunix.o \
basedll_snglinst.o \ basedll_snglinst.o \
@@ -7509,7 +7490,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS_2 = \
basedll_selectdispatcher.o \ basedll_selectdispatcher.o \
basedll_epolldispatcher.o \ basedll_epolldispatcher.o \
basedll_appunix.o \ basedll_appunix.o \
basedll_baseunix.o \
basedll_evtloopunix.o \ basedll_evtloopunix.o \
basedll_dlunix.o \ basedll_dlunix.o \
basedll_snglinst.o \ basedll_snglinst.o \
@@ -7522,7 +7502,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS_2 = \
basedll_selectdispatcher.o \ basedll_selectdispatcher.o \
basedll_epolldispatcher.o \ basedll_epolldispatcher.o \
basedll_appunix.o \ basedll_appunix.o \
basedll_baseunix.o \
basedll_evtloopunix.o \ basedll_evtloopunix.o \
basedll_dlunix.o \ basedll_dlunix.o \
basedll_snglinst.o \ basedll_snglinst.o \
@@ -7543,7 +7522,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS_2 = \
basedll_selectdispatcher.o \ basedll_selectdispatcher.o \
basedll_epolldispatcher.o \ basedll_epolldispatcher.o \
basedll_appunix.o \ basedll_appunix.o \
basedll_baseunix.o \
basedll_evtloopunix.o \ basedll_evtloopunix.o \
basedll_dlunix.o \ basedll_dlunix.o \
basedll_snglinst.o \ basedll_snglinst.o \
@@ -7625,7 +7603,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_3 = \
baselib_selectdispatcher.o \ baselib_selectdispatcher.o \
baselib_epolldispatcher.o \ baselib_epolldispatcher.o \
baselib_appunix.o \ baselib_appunix.o \
baselib_baseunix.o \
baselib_evtloopunix.o \ baselib_evtloopunix.o \
baselib_dlunix.o \ baselib_dlunix.o \
baselib_snglinst.o \ baselib_snglinst.o \
@@ -7663,7 +7640,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS_3 = \
baselib_selectdispatcher.o \ baselib_selectdispatcher.o \
baselib_epolldispatcher.o \ baselib_epolldispatcher.o \
baselib_appunix.o \ baselib_appunix.o \
baselib_baseunix.o \
baselib_evtloopunix.o \ baselib_evtloopunix.o \
baselib_dlunix.o \ baselib_dlunix.o \
baselib_snglinst.o \ baselib_snglinst.o \
@@ -7684,7 +7660,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS_3 = \
baselib_selectdispatcher.o \ baselib_selectdispatcher.o \
baselib_epolldispatcher.o \ baselib_epolldispatcher.o \
baselib_appunix.o \ baselib_appunix.o \
baselib_baseunix.o \
baselib_evtloopunix.o \ baselib_evtloopunix.o \
baselib_dlunix.o \ baselib_dlunix.o \
baselib_snglinst.o \ baselib_snglinst.o \
@@ -7705,7 +7680,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS_3 = \
baselib_selectdispatcher.o \ baselib_selectdispatcher.o \
baselib_epolldispatcher.o \ baselib_epolldispatcher.o \
baselib_appunix.o \ baselib_appunix.o \
baselib_baseunix.o \
baselib_evtloopunix.o \ baselib_evtloopunix.o \
baselib_dlunix.o \ baselib_dlunix.o \
baselib_snglinst.o \ baselib_snglinst.o \
@@ -7735,7 +7709,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS_3 = \
baselib_selectdispatcher.o \ baselib_selectdispatcher.o \
baselib_epolldispatcher.o \ baselib_epolldispatcher.o \
baselib_appunix.o \ baselib_appunix.o \
baselib_baseunix.o \
baselib_evtloopunix.o \ baselib_evtloopunix.o \
baselib_dlunix.o \ baselib_dlunix.o \
baselib_snglinst.o \ baselib_snglinst.o \
@@ -7748,7 +7721,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS_3 = \
baselib_selectdispatcher.o \ baselib_selectdispatcher.o \
baselib_epolldispatcher.o \ baselib_epolldispatcher.o \
baselib_appunix.o \ baselib_appunix.o \
baselib_baseunix.o \
baselib_evtloopunix.o \ baselib_evtloopunix.o \
baselib_dlunix.o \ baselib_dlunix.o \
baselib_snglinst.o \ baselib_snglinst.o \
@@ -7769,7 +7741,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS_3 = \
baselib_selectdispatcher.o \ baselib_selectdispatcher.o \
baselib_epolldispatcher.o \ baselib_epolldispatcher.o \
baselib_appunix.o \ baselib_appunix.o \
baselib_baseunix.o \
baselib_evtloopunix.o \ baselib_evtloopunix.o \
baselib_dlunix.o \ baselib_dlunix.o \
baselib_snglinst.o \ baselib_snglinst.o \
@@ -14541,27 +14512,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@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_OS2_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@monodll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@monodll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@monodll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@monodll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@monodll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@monodll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_@monodll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONODLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_UNIX_1@monodll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONODLL_ODEP) @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_UNIX_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@@ -19056,27 +19006,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@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_OS2_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@monolib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@monolib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@monolib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@monolib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@monolib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@monolib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_@monolib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_UNIX_1@monolib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(MONOLIB_ODEP) @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_UNIX_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@@ -23022,27 +22951,6 @@ basedll_uma.o: $(srcdir)/src/mac/carbon/uma.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_OS2_1@basedll_appunix.o: $(srcdir)/src/unix/appunix.cpp $(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_OS2_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@basedll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@basedll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@basedll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@basedll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@basedll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@basedll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_@basedll_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASEDLL_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_UNIX_1@basedll_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASEDLL_ODEP) @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_UNIX_1@ $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp
@@ -23832,27 +23740,6 @@ baselib_uma.o: $(srcdir)/src/mac/carbon/uma.cpp $(BASELIB_ODEP)
@COND_PLATFORM_OS2_1@baselib_appunix.o: $(srcdir)/src/unix/appunix.cpp $(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_OS2_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/appunix.cpp
@COND_PLATFORM_UNIX_1@baselib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@baselib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MAC@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@baselib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_COCOA@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@baselib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_GTK@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@baselib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_X11@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@baselib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_MOTIF@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_MACOSX_1_TOOLKIT_@baselib_baseunix.o: $(srcdir)/src/unix/baseunix.cpp $(BASELIB_ODEP)
@COND_PLATFORM_MACOSX_1_TOOLKIT_@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/baseunix.cpp
@COND_PLATFORM_UNIX_1@baselib_evtloopunix.o: $(srcdir)/src/unix/evtloopunix.cpp $(BASELIB_ODEP) @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_UNIX_1@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp

View File

@@ -60,7 +60,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/common/selectdispatcher.cpp src/common/selectdispatcher.cpp
src/unix/epolldispatcher.cpp src/unix/epolldispatcher.cpp
src/unix/appunix.cpp src/unix/appunix.cpp
src/unix/baseunix.cpp
src/unix/evtloopunix.cpp src/unix/evtloopunix.cpp
src/unix/dlunix.cpp src/unix/dlunix.cpp
src/unix/snglinst.cpp src/unix/snglinst.cpp

View File

@@ -1,75 +1,39 @@
Microsoft Visual Studio Solution File, Format Version 8.00 Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "wx_vc7_wxregex.vcproj", "{7A1A5354-6DB4-53F1-B75C-FE909D796167}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregex", "wx_vc7_wxregex.vcproj", "{7A1A5354-6DB4-53F1-B75C-FE909D796167}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "wx_vc7_wxzlib.vcproj", "{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "wx_vc7_wxzlib.vcproj", "{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "wx_vc7_wxpng.vcproj", "{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "wx_vc7_wxpng.vcproj", "{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "wx_vc7_wxjpeg.vcproj", "{3CA6563C-F480-52D4-AF05-D641E25A5DF2}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "wx_vc7_wxjpeg.vcproj", "{3CA6563C-F480-52D4-AF05-D641E25A5DF2}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "wx_vc7_wxtiff.vcproj", "{456F9EAD-4A96-59BD-A39A-75DAA25D517B}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "wx_vc7_wxtiff.vcproj", "{456F9EAD-4A96-59BD-A39A-75DAA25D517B}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "wx_vc7_wxexpat.vcproj", "{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "wx_vc7_wxexpat.vcproj", "{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxscintilla", "wx_vc7_wxscintilla.vcproj", "{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxscintilla", "wx_vc7_wxscintilla.vcproj", "{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "wx_vc7_base.vcproj", "{79F1691B-08C4-55BB-985E-FDDB0BC8753C}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "wx_vc7_base.vcproj", "{79F1691B-08C4-55BB-985E-FDDB0BC8753C}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "wx_vc7_net.vcproj", "{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "wx_vc7_net.vcproj", "{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "wx_vc7_core.vcproj", "{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "wx_vc7_core.vcproj", "{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "wx_vc7_adv.vcproj", "{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "wx_vc7_adv.vcproj", "{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "wx_vc7_media.vcproj", "{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "wx_vc7_media.vcproj", "{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "wx_vc7_html.vcproj", "{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "wx_vc7_html.vcproj", "{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "wx_vc7_qa.vcproj", "{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "wx_vc7_qa.vcproj", "{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "wx_vc7_xml.vcproj", "{B036100A-CEA0-5466-BE27-7E5B3687CAB8}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "wx_vc7_xml.vcproj", "{B036100A-CEA0-5466-BE27-7E5B3687CAB8}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "wx_vc7_xrc.vcproj", "{40DB525F-1EFF-56A4-8301-3AAD661135F3}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "wx_vc7_xrc.vcproj", "{40DB525F-1EFF-56A4-8301-3AAD661135F3}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "wx_vc7_aui.vcproj", "{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "wx_vc7_aui.vcproj", "{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "wx_vc7_richtext.vcproj", "{52F16F53-E13D-55CA-AD64-ACB0274B0704}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "wx_vc7_richtext.vcproj", "{52F16F53-E13D-55CA-AD64-ACB0274B0704}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc7_stc.vcproj", "{4B498696-42F2-5547-B159-87E4CAF436C1}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc7_stc.vcproj", "{4B498696-42F2-5547-B159-87E4CAF436C1}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
@@ -77,346 +41,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc7_stc.vcproj",
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "wx_vc7_gl.vcproj", "{407F0D6F-2B2D-5774-B9D3-FA972A663072}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "wx_vc7_gl.vcproj", "{407F0D6F-2B2D-5774-B9D3-FA972A663072}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject EndProject
Global Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
DLL Debug = DLL Debug
DLL Release = DLL Release
DLL Universal Debug = DLL Universal Debug
DLL Universal Release = DLL Universal Release
Release = Release
Universal Debug = Universal Debug
Universal Release = Universal Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Debug.ActiveCfg = Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Debug.Build.0 = Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Debug.ActiveCfg = DLL Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Debug.Build.0 = DLL Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Release.ActiveCfg = DLL Release|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Release.Build.0 = DLL Release|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Release.ActiveCfg = Release|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Release.Build.0 = Release|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Universal Debug.ActiveCfg = Universal Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Universal Debug.Build.0 = Universal Debug|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Universal Release.ActiveCfg = Universal Release|Win32
{7A1A5354-6DB4-53F1-B75C-FE909D796167}.Universal Release.Build.0 = Universal Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Debug.ActiveCfg = Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Debug.Build.0 = Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Debug.ActiveCfg = DLL Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Debug.Build.0 = DLL Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Release.ActiveCfg = DLL Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Release.Build.0 = DLL Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Release.ActiveCfg = Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Release.Build.0 = Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Universal Debug.ActiveCfg = Universal Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Universal Debug.Build.0 = Universal Debug|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Universal Release.ActiveCfg = Universal Release|Win32
{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}.Universal Release.Build.0 = Universal Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Debug.ActiveCfg = Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Debug.Build.0 = Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Debug.ActiveCfg = DLL Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Debug.Build.0 = DLL Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Release.ActiveCfg = DLL Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Release.Build.0 = DLL Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Release.ActiveCfg = Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Release.Build.0 = Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Universal Debug.ActiveCfg = Universal Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Universal Debug.Build.0 = Universal Debug|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Universal Release.ActiveCfg = Universal Release|Win32
{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}.Universal Release.Build.0 = Universal Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Debug.ActiveCfg = Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Debug.Build.0 = Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Debug.ActiveCfg = DLL Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Debug.Build.0 = DLL Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Release.ActiveCfg = DLL Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Release.Build.0 = DLL Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Release.ActiveCfg = Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Release.Build.0 = Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Universal Debug.ActiveCfg = Universal Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Universal Debug.Build.0 = Universal Debug|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Universal Release.ActiveCfg = Universal Release|Win32
{3CA6563C-F480-52D4-AF05-D641E25A5DF2}.Universal Release.Build.0 = Universal Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Debug.ActiveCfg = Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Debug.Build.0 = Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Debug.ActiveCfg = DLL Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Debug.Build.0 = DLL Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Release.ActiveCfg = DLL Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Release.Build.0 = DLL Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Release.ActiveCfg = Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Release.Build.0 = Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Universal Debug.ActiveCfg = Universal Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Universal Debug.Build.0 = Universal Debug|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Universal Release.ActiveCfg = Universal Release|Win32
{456F9EAD-4A96-59BD-A39A-75DAA25D517B}.Universal Release.Build.0 = Universal Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Debug.ActiveCfg = Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Debug.Build.0 = Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Debug.ActiveCfg = DLL Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Debug.Build.0 = DLL Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Release.ActiveCfg = DLL Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Release.Build.0 = DLL Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Release.ActiveCfg = Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Release.Build.0 = Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Universal Debug.ActiveCfg = Universal Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Universal Debug.Build.0 = Universal Debug|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Universal Release.ActiveCfg = Universal Release|Win32
{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}.Universal Release.Build.0 = Universal Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Debug.ActiveCfg = Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Debug.Build.0 = Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Debug.ActiveCfg = DLL Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Debug.Build.0 = DLL Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Release.ActiveCfg = DLL Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Release.Build.0 = DLL Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Release.ActiveCfg = Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Release.Build.0 = Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Universal Debug.ActiveCfg = Universal Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Universal Debug.Build.0 = Universal Debug|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Universal Release.ActiveCfg = Universal Release|Win32
{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}.Universal Release.Build.0 = Universal Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Debug.ActiveCfg = Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Debug.Build.0 = Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Debug.ActiveCfg = DLL Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Debug.Build.0 = DLL Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Release.ActiveCfg = DLL Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Release.Build.0 = DLL Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Release.ActiveCfg = Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Release.Build.0 = Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Universal Debug.ActiveCfg = Universal Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Universal Debug.Build.0 = Universal Debug|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Universal Release.ActiveCfg = Universal Release|Win32
{79F1691B-08C4-55BB-985E-FDDB0BC8753C}.Universal Release.Build.0 = Universal Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Debug.ActiveCfg = Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Debug.Build.0 = Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Debug.ActiveCfg = DLL Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Debug.Build.0 = DLL Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Release.ActiveCfg = DLL Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Release.Build.0 = DLL Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Release.ActiveCfg = Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Release.Build.0 = Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Universal Debug.ActiveCfg = Universal Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Universal Debug.Build.0 = Universal Debug|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Universal Release.ActiveCfg = Universal Release|Win32
{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}.Universal Release.Build.0 = Universal Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Debug.ActiveCfg = Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Debug.Build.0 = Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Debug.ActiveCfg = DLL Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Debug.Build.0 = DLL Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Release.ActiveCfg = DLL Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Release.Build.0 = DLL Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Release.ActiveCfg = Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Release.Build.0 = Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Universal Debug.ActiveCfg = Universal Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Universal Debug.Build.0 = Universal Debug|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Universal Release.ActiveCfg = Universal Release|Win32
{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}.Universal Release.Build.0 = Universal Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Debug.ActiveCfg = Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Debug.Build.0 = Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Debug.ActiveCfg = DLL Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Debug.Build.0 = DLL Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Release.ActiveCfg = DLL Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Release.Build.0 = DLL Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Release.ActiveCfg = Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Release.Build.0 = Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Universal Debug.ActiveCfg = Universal Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Universal Debug.Build.0 = Universal Debug|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Universal Release.ActiveCfg = Universal Release|Win32
{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}.Universal Release.Build.0 = Universal Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Debug.ActiveCfg = Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Debug.Build.0 = Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Debug.ActiveCfg = DLL Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Debug.Build.0 = DLL Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Release.ActiveCfg = DLL Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Release.Build.0 = DLL Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Release.ActiveCfg = Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Release.Build.0 = Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Universal Debug.ActiveCfg = Universal Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Universal Debug.Build.0 = Universal Debug|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Universal Release.ActiveCfg = Universal Release|Win32
{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}.Universal Release.Build.0 = Universal Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Debug.ActiveCfg = Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Debug.Build.0 = Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Debug.ActiveCfg = DLL Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Debug.Build.0 = DLL Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Release.ActiveCfg = DLL Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Release.Build.0 = DLL Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Release.ActiveCfg = Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Release.Build.0 = Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Universal Debug.ActiveCfg = Universal Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Universal Debug.Build.0 = Universal Debug|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Universal Release.ActiveCfg = Universal Release|Win32
{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}.Universal Release.Build.0 = Universal Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Debug.ActiveCfg = Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Debug.Build.0 = Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Debug.ActiveCfg = DLL Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Debug.Build.0 = DLL Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Release.ActiveCfg = DLL Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Release.Build.0 = DLL Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Release.ActiveCfg = Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Release.Build.0 = Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Universal Debug.ActiveCfg = Universal Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Universal Debug.Build.0 = Universal Debug|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Universal Release.ActiveCfg = Universal Release|Win32
{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}.Universal Release.Build.0 = Universal Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Debug.ActiveCfg = Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Debug.Build.0 = Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Debug.ActiveCfg = DLL Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Debug.Build.0 = DLL Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Release.ActiveCfg = DLL Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Release.Build.0 = DLL Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Release.ActiveCfg = Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Release.Build.0 = Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Universal Debug.ActiveCfg = Universal Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Universal Debug.Build.0 = Universal Debug|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Universal Release.ActiveCfg = Universal Release|Win32
{B036100A-CEA0-5466-BE27-7E5B3687CAB8}.Universal Release.Build.0 = Universal Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Debug.ActiveCfg = Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Debug.Build.0 = Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Debug.ActiveCfg = DLL Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Debug.Build.0 = DLL Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Release.ActiveCfg = DLL Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Release.Build.0 = DLL Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Release.ActiveCfg = Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Release.Build.0 = Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Universal Debug.ActiveCfg = Universal Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Universal Debug.Build.0 = Universal Debug|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Universal Release.ActiveCfg = Universal Release|Win32
{40DB525F-1EFF-56A4-8301-3AAD661135F3}.Universal Release.Build.0 = Universal Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Debug.ActiveCfg = Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Debug.Build.0 = Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Debug.ActiveCfg = DLL Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Debug.Build.0 = DLL Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Release.ActiveCfg = DLL Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Release.Build.0 = DLL Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Release.ActiveCfg = Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Release.Build.0 = Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Universal Debug.ActiveCfg = Universal Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Universal Debug.Build.0 = Universal Debug|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Universal Release.ActiveCfg = Universal Release|Win32
{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Universal Release.Build.0 = Universal Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Debug.ActiveCfg = Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Debug.Build.0 = Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Debug.ActiveCfg = DLL Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Debug.Build.0 = DLL Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Release.ActiveCfg = DLL Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Release.Build.0 = DLL Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Release.ActiveCfg = Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Release.Build.0 = Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Universal Debug.ActiveCfg = Universal Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Universal Debug.Build.0 = Universal Debug|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Universal Release.ActiveCfg = Universal Release|Win32
{52F16F53-E13D-55CA-AD64-ACB0274B0704}.Universal Release.Build.0 = Universal Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Debug.ActiveCfg = Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Debug.Build.0 = Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Debug.ActiveCfg = DLL Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Debug.Build.0 = DLL Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Release.ActiveCfg = DLL Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Release.Build.0 = DLL Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Release.ActiveCfg = Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Release.Build.0 = Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Universal Debug.ActiveCfg = Universal Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Universal Debug.Build.0 = Universal Debug|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Universal Release.ActiveCfg = Universal Release|Win32
{4B498696-42F2-5547-B159-87E4CAF436C1}.Universal Release.Build.0 = Universal Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Debug.ActiveCfg = Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Debug.Build.0 = Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Debug.ActiveCfg = DLL Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Debug.Build.0 = DLL Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Release.ActiveCfg = DLL Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Release.Build.0 = DLL Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Universal Debug.ActiveCfg = DLL Universal Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Universal Debug.Build.0 = DLL Universal Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Universal Release.ActiveCfg = DLL Universal Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.DLL Universal Release.Build.0 = DLL Universal Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Release.ActiveCfg = Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Release.Build.0 = Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Universal Debug.ActiveCfg = Universal Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Universal Debug.Build.0 = Universal Debug|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Universal Release.ActiveCfg = Universal Release|Win32
{407F0D6F-2B2D-5774-B9D3-FA972A663072}.Universal Release.Build.0 = Universal Release|Win32
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
DLL Universal Release|Win32 = DLL Universal Release|Win32 DLL Universal Release|Win32 = DLL Universal Release|Win32
DLL Universal Debug|Win32 = DLL Universal Debug|Win32 DLL Universal Debug|Win32 = DLL Universal Debug|Win32
@@ -753,3 +379,4 @@ Global
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@@ -1534,7 +1534,7 @@
/> />
</File> </File>
<File <File
RelativePath="..\..\src\msw\gauge95.cpp" RelativePath="..\..\src\msw\gauge.cpp"
> >
<FileConfiguration <FileConfiguration
Name="DLL Universal Release|Win32" Name="DLL Universal Release|Win32"
@@ -1766,6 +1766,26 @@
ExcludedFromBuild="true" ExcludedFromBuild="true"
/> />
</File> </File>
<File
RelativePath="..\..\src\msw\nativewin.cpp"
>
<FileConfiguration
Name="DLL Universal Release|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="DLL Universal Debug|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="Universal Release|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="Universal Debug|Win32"
ExcludedFromBuild="true"
/>
</File>
<File <File
RelativePath="..\..\src\msw\notebook.cpp" RelativePath="..\..\src\msw\notebook.cpp"
> >
@@ -1894,7 +1914,7 @@
RelativePath="..\..\src\msw\settings.cpp" RelativePath="..\..\src\msw\settings.cpp"
/> />
<File <File
RelativePath="..\..\src\msw\slider95.cpp" RelativePath="..\..\src\msw\slider.cpp"
> >
<FileConfiguration <FileConfiguration
Name="DLL Universal Release|Win32" Name="DLL Universal Release|Win32"
@@ -1993,26 +2013,6 @@
ExcludedFromBuild="true" ExcludedFromBuild="true"
/> />
</File> </File>
<File
RelativePath="..\..\src\msw\statbr95.cpp"
>
<FileConfiguration
Name="DLL Universal Release|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="DLL Universal Debug|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="Universal Release|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="Universal Debug|Win32"
ExcludedFromBuild="true"
/>
</File>
<File <File
RelativePath="..\..\src\msw\statline.cpp" RelativePath="..\..\src\msw\statline.cpp"
> >
@@ -2054,7 +2054,7 @@
/> />
</File> </File>
<File <File
RelativePath="..\..\src\msw\tabctrl.cpp" RelativePath="..\..\src\msw\statusbar.cpp"
> >
<FileConfiguration <FileConfiguration
Name="DLL Universal Release|Win32" Name="DLL Universal Release|Win32"
@@ -2074,7 +2074,7 @@
/> />
</File> </File>
<File <File
RelativePath="..\..\src\msw\tbar95.cpp" RelativePath="..\..\src\msw\tabctrl.cpp"
> >
<FileConfiguration <FileConfiguration
Name="DLL Universal Release|Win32" Name="DLL Universal Release|Win32"
@@ -2153,6 +2153,26 @@
ExcludedFromBuild="true" ExcludedFromBuild="true"
/> />
</File> </File>
<File
RelativePath="..\..\src\msw\toolbar.cpp"
>
<FileConfiguration
Name="DLL Universal Release|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="DLL Universal Debug|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="Universal Release|Win32"
ExcludedFromBuild="true"
/>
<FileConfiguration
Name="Universal Debug|Win32"
ExcludedFromBuild="true"
/>
</File>
<File <File
RelativePath="..\..\src\msw\tooltip.cpp" RelativePath="..\..\src\msw\tooltip.cpp"
/> />
@@ -3603,7 +3623,7 @@
RelativePath="..\..\include\wx\msw\frame.h" RelativePath="..\..\include\wx\msw\frame.h"
/> />
<File <File
RelativePath="..\..\include\wx\msw\gauge95.h" RelativePath="..\..\include\wx\msw\gauge.h"
/> />
<File <File
RelativePath="..\..\include\wx\msw\gdiimage.h" RelativePath="..\..\include\wx\msw\gdiimage.h"
@@ -3800,7 +3820,7 @@
RelativePath="..\..\include\wx\msw\setup0.h" RelativePath="..\..\include\wx\msw\setup0.h"
/> />
<File <File
RelativePath="..\..\include\wx\msw\slider95.h" RelativePath="..\..\include\wx\msw\slider.h"
/> />
<File <File
RelativePath="..\..\include\wx\msw\sound.h" RelativePath="..\..\include\wx\msw\sound.h"
@@ -3817,24 +3837,21 @@
<File <File
RelativePath="..\..\include\wx\msw\statbox.h" RelativePath="..\..\include\wx\msw\statbox.h"
/> />
<File
RelativePath="..\..\include\wx\msw\statbr95.h"
/>
<File <File
RelativePath="..\..\include\wx\msw\statline.h" RelativePath="..\..\include\wx\msw\statline.h"
/> />
<File <File
RelativePath="..\..\include\wx\msw\stattext.h" RelativePath="..\..\include\wx\msw\stattext.h"
/> />
<File
RelativePath="..\..\include\wx\msw\statusbar.h"
/>
<File <File
RelativePath="..\..\include\wx\msw\tabctrl.h" RelativePath="..\..\include\wx\msw\tabctrl.h"
/> />
<File <File
RelativePath="..\..\include\wx\msw\taskbar.h" RelativePath="..\..\include\wx\msw\taskbar.h"
/> />
<File
RelativePath="..\..\include\wx\msw\tbar95.h"
/>
<File <File
RelativePath="..\..\include\wx\msw\textctrl.h" RelativePath="..\..\include\wx\msw\textctrl.h"
/> />
@@ -3844,6 +3861,9 @@
<File <File
RelativePath="..\..\include\wx\msw\tglbtn.h" RelativePath="..\..\include\wx\msw\tglbtn.h"
/> />
<File
RelativePath="..\..\include\wx\msw\toolbar.h"
/>
<File <File
RelativePath="..\..\include\wx\msw\tooltip.h" RelativePath="..\..\include\wx\msw\tooltip.h"
/> />
@@ -4584,6 +4604,9 @@
<File <File
RelativePath="..\..\include\wx\msgdlg.h" RelativePath="..\..\include\wx\msgdlg.h"
/> />
<File
RelativePath="..\..\include\wx\nativewin.h"
/>
<File <File
RelativePath="..\..\include\wx\nonownedwnd.h" RelativePath="..\..\include\wx\nonownedwnd.h"
/> />

View File

@@ -12,6 +12,7 @@
#ifndef _WX_UNIX_APPTBASE_H_ #ifndef _WX_UNIX_APPTBASE_H_
#define _WX_UNIX_APPTBASE_H_ #define _WX_UNIX_APPTBASE_H_
struct wxEndProcessData;
struct wxExecuteData; struct wxExecuteData;
class wxPipe; class wxPipe;
@@ -41,7 +42,20 @@ public:
// wait for the process termination, return whatever wxExecute() must // wait for the process termination, return whatever wxExecute() must
// return // return
virtual int WaitForChild(wxExecuteData& execData) = 0; //
// base class implementation handles all cases except wxEXEC_SYNC without
// wxEXEC_NOEVENTS one which is implemented at the GUI level
virtual int WaitForChild(wxExecuteData& execData);
// integrate the monitoring of the given fd with the port-specific event
// loop: when this fd, which corresponds to a dummy pipe opened between the
// parent and child processes, is closed by the child, the parent is
// notified about this via a call to wxHandleProcessTermination() function
//
// the default implementation uses wxFDIODispatcher and so is suitable for
// the console applications or ports which don't have any specific event
// loop
virtual int AddProcessCallback(wxEndProcessData *data, int fd);
// wxThread helpers // wxThread helpers

View File

@@ -22,7 +22,6 @@ public:
#if wxUSE_CONSOLE_EVENTLOOP #if wxUSE_CONSOLE_EVENTLOOP
virtual wxEventLoopBase *CreateEventLoop(); virtual wxEventLoopBase *CreateEventLoop();
#endif // wxUSE_CONSOLE_EVENTLOOP #endif // wxUSE_CONSOLE_EVENTLOOP
virtual int WaitForChild(wxExecuteData& execData);
#if wxUSE_TIMER #if wxUSE_TIMER
virtual wxTimerImpl *CreateTimerImpl(wxTimer *timer); virtual wxTimerImpl *CreateTimerImpl(wxTimer *timer);
#endif #endif
@@ -35,6 +34,9 @@ class WXDLLEXPORT wxGUIAppTraits : public wxGUIAppTraitsBase
public: public:
virtual wxEventLoopBase *CreateEventLoop(); virtual wxEventLoopBase *CreateEventLoop();
virtual int WaitForChild(wxExecuteData& execData); virtual int WaitForChild(wxExecuteData& execData);
#if defined(__WXGTK__) || defined(__WXMOTIF__)
virtual int AddProcessCallback(wxEndProcessData *data, int fd);
#endif
#if wxUSE_TIMER #if wxUSE_TIMER
virtual wxTimerImpl *CreateTimerImpl(wxTimer *timer); virtual wxTimerImpl *CreateTimerImpl(wxTimer *timer);
#endif #endif

View File

@@ -15,17 +15,6 @@
class WXDLLIMPEXP_FWD_BASE wxProcess; class WXDLLIMPEXP_FWD_BASE wxProcess;
class wxStreamTempInputBuffer; class wxStreamTempInputBuffer;
// some ports have toolkit-specific implementations of wxAddProcessCallback()
// but by default we use a generic wxFDIOHandler-based mechanism under Unix
#if defined(__UNIX__) && \
!(defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMGL__))
#define wxHAS_GENERIC_PROCESS_CALLBACK 1
#endif
#ifdef wxHAS_GENERIC_PROCESS_CALLBACK
struct wxEndProcessFDIOHandler;
#endif
// if pid > 0, the execution is async and the data is freed in the callback // if pid > 0, the execution is async and the data is freed in the callback
// executed when the process terminates, if pid < 0, the execution is // executed when the process terminates, if pid < 0, the execution is
// synchronous and the caller (wxExecute) frees the data // synchronous and the caller (wxExecute) frees the data
@@ -35,10 +24,6 @@ struct wxEndProcessData
int tag; // port dependent value int tag; // port dependent value
wxProcess *process; // if !NULL: notified on process termination wxProcess *process; // if !NULL: notified on process termination
int exitcode; // the exit code int exitcode; // the exit code
#ifdef wxHAS_GENERIC_PROCESS_CALLBACK
wxEndProcessFDIOHandler *fdioHandler;
#endif
}; };
// struct in which information is passed from wxExecute() to wxAppTraits // struct in which information is passed from wxExecute() to wxAppTraits
@@ -82,24 +67,4 @@ struct wxExecuteData
// callback function and is common to all ports (src/unix/utilsunx.cpp) // callback function and is common to all ports (src/unix/utilsunx.cpp)
extern WXDLLIMPEXP_BASE void wxHandleProcessTermination(wxEndProcessData *proc_data); extern WXDLLIMPEXP_BASE void wxHandleProcessTermination(wxEndProcessData *proc_data);
// This function is called to associate the port-specific callback with the
// child process. The return valus is port-specific.
//
// The file descriptor 'fd' is descriptor of a dummy pipe opened between the
// parent and the child. No data are written to or read from this pipe, its
// sole purpose is that the child process will close it when it terminates and
// the parent will be notified about it if it looks at 'fd' (e.g. using
// select()).
//
// wxAddProcessCallback() does whatever is necessary to ensure that 'fd' is
// periodically (typically every event loop iteration) checked for its status
// and that wxHandleProcessTermination() is called once 'fd' indicates the
// child terminated.
extern WXDLLIMPEXP_CORE int wxAddProcessCallback(wxEndProcessData *proc_data, int fd);
#if defined(__WXMAC__) || defined(__WXCOCOA__)
// For ports (e.g. DARWIN) which can add callbacks based on the pid
extern int wxAddProcessCallbackForPid(wxEndProcessData *proc_data, int pid);
#endif
#endif // _WX_UNIX_EXECUTE_H #endif // _WX_UNIX_EXECUTE_H

View File

@@ -256,7 +256,7 @@ void GTK_EndProcessDetector(gpointer data, gint source,
} }
} }
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) int wxGUIAppTraits::AddProcessCallback(wxEndProcessData *proc_data, int fd)
{ {
int tag = gdk_input_add(fd, int tag = gdk_input_add(fd,
GDK_INPUT_READ, GDK_INPUT_READ,

View File

@@ -163,7 +163,7 @@ void GTK_EndProcessDetector(gpointer data, gint source,
} }
} }
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) int wxGUIAppTraits::AddProcessCallback(wxEndProcessData *proc_data, int fd)
{ {
int tag = gdk_input_add(fd, int tag = gdk_input_add(fd,
GDK_INPUT_READ, GDK_INPUT_READ,
@@ -173,11 +173,15 @@ int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
return tag; return tag;
} }
#if wxUSE_TIMER
wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer) wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
{ {
return new wxGTKTimerImpl(timer); return new wxGTKTimerImpl(timer);
} }
#endif // wxUSE_TIMER
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxPlatformInfo-related // wxPlatformInfo-related
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -24,216 +24,6 @@
#include <sys/wait.h> #include <sys/wait.h>
// Use polling instead of Mach ports, which doesn't work on Intel
// due to task_for_pid security issues.
// http://developer.apple.com/technotes/tn/tn2050.html
// What's a better test for Intel vs PPC?
#ifdef WORDS_BIGENDIAN
#define USE_POLLING 0
#else
#define USE_POLLING 1
#endif
#if USE_POLLING
#if wxUSE_THREADS
class wxProcessTerminationEventHandler: public wxEvtHandler
{
public:
wxProcessTerminationEventHandler(wxEndProcessData* data)
{
m_data = data;
Connect(-1, wxEVT_END_PROCESS, wxProcessEventHandler(wxProcessTerminationEventHandler::OnTerminate));
}
void OnTerminate(wxProcessEvent& event)
{
Disconnect(-1, wxEVT_END_PROCESS, wxProcessEventHandler(wxProcessTerminationEventHandler::OnTerminate));
wxHandleProcessTermination(m_data);
// NOTE: We don't use this to delay destruction until the next idle run but rather to
// avoid killing ourselves while our caller (which is our wxEvtHandler superclass
// ProcessPendingEvents) still needs our m_eventsLocker to be valid.
// Since we're in the GUI library we can guarantee that ScheduleForDestroy is using
// the GUI implementation which delays destruction and not the base implementation
// which does it immediately.
wxTheApp->GetTraits()->ScheduleForDestroy(this);
}
wxEndProcessData* m_data;
};
class wxProcessTerminationThread: public wxThread
{
public:
wxProcessTerminationThread(wxEndProcessData* data, wxProcessTerminationEventHandler* handler): wxThread(wxTHREAD_DETACHED)
{
m_data = data;
m_handler = handler;
}
virtual void* Entry();
wxProcessTerminationEventHandler* m_handler;
wxEndProcessData* m_data;
};
// The problem with this is that we may be examining the
// process e.g. in OnIdle at the point this cleans up the process,
// so we need to delay until it's safe.
void* wxProcessTerminationThread::Entry()
{
while (true)
{
usleep(100);
int status = 0;
int rc = waitpid(abs(m_data->pid), & status, 0);
if (rc != 0)
{
if ((rc != -1) && WIFEXITED(status))
m_data->exitcode = WEXITSTATUS(status);
else
m_data->exitcode = -1;
wxProcessEvent event;
wxPostEvent(m_handler, event);
break;
}
}
return NULL;
}
int wxAddProcessCallbackForPid(wxEndProcessData *proc_data, int pid)
{
if (pid < 1)
return -1;
wxProcessTerminationEventHandler* handler = new wxProcessTerminationEventHandler(proc_data);
wxProcessTerminationThread* thread = new wxProcessTerminationThread(proc_data, handler);
if (thread->Create() != wxTHREAD_NO_ERROR)
{
wxLogDebug(wxT("Could not create termination detection thread."));
delete thread;
delete handler;
return -1;
}
thread->Run();
return 0;
}
#else // !wxUSE_THREADS
int wxAddProcessCallbackForPid(wxEndProcessData*, int)
{
wxLogDebug(wxT("Could not create termination detection thread."));
return -1;
}
#endif // wxUSE_THREADS/!wxUSE_THREADS
#else // !USE_POLLING
#include <CoreFoundation/CFMachPort.h>
extern "C" {
#include <mach/mach.h>
}
void wxMAC_MachPortEndProcessDetect(CFMachPortRef WXUNUSED(port), void *data)
{
wxEndProcessData *proc_data = (wxEndProcessData*)data;
wxLogDebug(wxT("Process ended"));
int status = 0;
int rc = waitpid(abs(proc_data->pid), &status, WNOHANG);
if(!rc)
{
wxLogDebug(wxT("Mach port was invalidated, but process hasn't terminated!"));
return;
}
if((rc != -1) && WIFEXITED(status))
proc_data->exitcode = WEXITSTATUS(status);
else
proc_data->exitcode = -1;
wxHandleProcessTermination(proc_data);
}
int wxAddProcessCallbackForPid(wxEndProcessData *proc_data, int pid)
{
if(pid < 1)
return -1;
kern_return_t kernResult;
mach_port_t taskOfOurProcess;
mach_port_t machPortForProcess;
taskOfOurProcess = mach_task_self();
if(taskOfOurProcess == MACH_PORT_NULL)
{
wxLogDebug(wxT("No mach_task_self()"));
return -1;
}
wxLogDebug(wxT("pid=%d"),pid);
kernResult = task_for_pid(taskOfOurProcess,pid, &machPortForProcess);
if(kernResult != KERN_SUCCESS)
{
wxLogDebug(wxT("no task_for_pid()"));
// try seeing if it is already dead or something
// FIXME: a better method would be to call the callback function
// from idle time until the process terminates. Of course, how
// likely is it that it will take more than 0.1 seconds for the
// mach terminate event to make its way to the BSD subsystem?
usleep(100); // sleep for 0.1 seconds
wxMAC_MachPortEndProcessDetect(NULL, (void*)proc_data);
return -1;
}
CFMachPortContext termcb_contextinfo;
termcb_contextinfo.version = 0;
termcb_contextinfo.info = (void*)proc_data;
termcb_contextinfo.retain = NULL;
termcb_contextinfo.release = NULL;
termcb_contextinfo.copyDescription = NULL;
CFMachPortRef CFMachPortForProcess;
Boolean ShouldFreePort;
CFMachPortForProcess = CFMachPortCreateWithPort(NULL, machPortForProcess, NULL, &termcb_contextinfo, &ShouldFreePort);
if(!CFMachPortForProcess)
{
wxLogDebug(wxT("No CFMachPortForProcess"));
mach_port_deallocate(taskOfOurProcess, machPortForProcess);
return -1;
}
if(ShouldFreePort)
{
kernResult = mach_port_deallocate(taskOfOurProcess, machPortForProcess);
if(kernResult!=KERN_SUCCESS)
{
wxLogDebug(wxT("Couldn't deallocate mach port"));
return -1;
}
}
CFMachPortSetInvalidationCallBack(CFMachPortForProcess, &wxMAC_MachPortEndProcessDetect);
CFRunLoopSourceRef runloopsource;
runloopsource = CFMachPortCreateRunLoopSource(NULL,CFMachPortForProcess, (CFIndex)0);
if(!runloopsource)
{
wxLogDebug(wxT("Couldn't create runloopsource"));
return -1;
}
CFRelease(CFMachPortForProcess);
CFRunLoopAddSource(CFRunLoopGetCurrent(),runloopsource,kCFRunLoopDefaultMode);
CFRelease(runloopsource);
wxLogDebug(wxT("Successfully added notification to the runloop"));
return 0;
}
#endif // USE_POLLING/!USE_POLLING
/////////////////////////////////////////////////////////////////////////////
// New implementation avoiding mach ports entirely.
#include <CoreFoundation/CFSocket.h> #include <CoreFoundation/CFSocket.h>
/*! /*!
@@ -301,14 +91,14 @@ extern "C" void WXCF_EndProcessDetector(CFSocketRef s,
} }
/*! /*!
Implements the GUI-specific wxAddProcessCallback for both wxMac and Implements the GUI-specific AddProcessCallback() for both wxMac and
wxCocoa using the CFSocket/CFRunLoop API which is available to both. wxCocoa using the CFSocket/CFRunLoop API which is available to both.
Takes advantage of the fact that sockets on UNIX are just regular Takes advantage of the fact that sockets on UNIX are just regular
file descriptors and thus even a non-socket file descriptor can file descriptors and thus even a non-socket file descriptor can
apparently be used with CFSocket so long as you only tell CFSocket apparently be used with CFSocket so long as you only tell CFSocket
to do things with it that would be valid for a non-socket fd. to do things with it that would be valid for a non-socket fd.
*/ */
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) int wxGUIAppTraits::AddProcessCallback(wxEndProcessData *proc_data, int fd)
{ {
static int s_last_tag = 0; static int s_last_tag = 0;
CFSocketContext context = CFSocketContext context =
@@ -354,8 +144,6 @@ int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
// NOTE: This doesn't really belong here but this was a handy file to // NOTE: This doesn't really belong here but this was a handy file to
// put it in because it's already compiled for wxCocoa and wxMac GUI lib. // put it in because it's already compiled for wxCocoa and wxMac GUI lib.
#if wxUSE_GUI
#if wxUSE_STDPATHS #if wxUSE_STDPATHS
static wxStandardPathsCF gs_stdPaths; static wxStandardPathsCF gs_stdPaths;
wxStandardPathsBase& wxGUIAppTraits::GetStandardPaths() wxStandardPathsBase& wxGUIAppTraits::GetStandardPaths()
@@ -364,5 +152,3 @@ wxStandardPathsBase& wxGUIAppTraits::GetStandardPaths()
} }
#endif #endif
#endif // wxUSE_GUI

View File

@@ -164,21 +164,3 @@ wxMouseState wxGetMouseState()
return ms; return ms;
} }
#ifdef __UNIX__
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
{
wxFAIL_MSG(wxT("wxAddProcessCallback not implemented in wxMGL!"));
return 0;
#if 0 // FIXME_MGL -do we need it at all?
int tag = gdk_input_add(fd,
GDK_INPUT_READ,
GTK_EndProcessDetector,
(gpointer)proc_data);
return tag;
#endif
}
#endif

View File

@@ -96,7 +96,7 @@ static void xt_notify_end_process(XtPointer data, int *WXUNUSED(fid),
XtRemoveInput(*id); XtRemoveInput(*id);
} }
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) int wxGUIAppTraits::AddProcessCallback(wxEndProcessData *proc_data, int fd)
{ {
XtInputId id = XtAppAddInput((XtAppContext) wxTheApp->GetAppContext(), XtInputId id = XtAppAddInput((XtAppContext) wxTheApp->GetAppContext(),
fd, fd,

View File

@@ -30,7 +30,6 @@
#include "wx/utils.h" #include "wx/utils.h"
#endif //WX_PRECOMP #endif //WX_PRECOMP
#include "wx/apptrait.h"
#include "wx/unix/execute.h" #include "wx/unix/execute.h"
#include "wx/evtloop.h" #include "wx/evtloop.h"
#include "wx/gsocket.h" #include "wx/gsocket.h"
@@ -45,45 +44,8 @@
// wxConsoleAppTraits implementation // wxConsoleAppTraits implementation
// ============================================================================ // ============================================================================
int
wxConsoleAppTraits::WaitForChild(wxExecuteData& execData)
{
int exitcode = 0;
if ( execData.flags & wxEXEC_SYNC )
{
if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) )
{
wxLogSysError(_("Waiting for subprocess termination failed"));
}
}
else // asynchronous execution
{
wxEndProcessData *endProcData = new wxEndProcessData;
endProcData->process = execData.process;
endProcData->pid = execData.pid;
endProcData->tag = wxAddProcessCallback
(
endProcData,
execData.pipeEndProcDetect.Detach(wxPipe::Read)
);
execData.pipeEndProcDetect.Close();
exitcode = execData.pid;
}
return exitcode;
}
#if wxUSE_TIMER #if wxUSE_TIMER
wxTimerImpl *wxConsoleAppTraits::CreateTimerImpl(wxTimer *timer)
{
// this doesn't work yet as there is no main loop in console applications
// (but it will be added later)
return new wxUnixTimerImpl(timer);
}
#endif // wxUSE_TIMER #endif // wxUSE_TIMER
// Note: wxConsoleAppTraits::CreateEventLoop() is defined in evtloopunix.cpp! // Note: wxConsoleAppTraits::CreateEventLoop() is defined in evtloopunix.cpp!

View File

@@ -29,6 +29,7 @@
#include "wx/event.h" #include "wx/event.h"
#endif #endif
#include "wx/apptrait.h"
#include "wx/longlong.h" #include "wx/longlong.h"
#include <sys/time.h> #include <sys/time.h>
@@ -256,5 +257,10 @@ wxUsecClock_t wxGetLocalTimeUsec()
return wxGetLocalTimeMillis() * 1000L; return wxGetLocalTimeMillis() * 1000L;
} }
wxTimerImpl *wxConsoleAppTraits::CreateTimerImpl(wxTimer *timer)
{
return new wxUnixTimerImpl(timer);
}
#endif // wxUSE_TIMER #endif // wxUSE_TIMER

View File

@@ -41,6 +41,7 @@
#include "wx/wfstream.h" #include "wx/wfstream.h"
#include "wx/private/fdiodispatcher.h"
#include "wx/unix/execute.h" #include "wx/unix/execute.h"
#include "wx/unix/private.h" #include "wx/unix/private.h"
@@ -1220,30 +1221,10 @@ bool wxHandleFatalExceptions(bool doit)
#endif // wxUSE_ON_FATAL_EXCEPTION #endif // wxUSE_ON_FATAL_EXCEPTION
#endif // wxUSE_BASE
#ifdef __DARWIN__
#include <sys/errno.h>
#endif
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxExecute support // wxExecute support
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
/*
NOTE: If this proves not to work well for wxMac then move back to the old
behavior. If, however, it proves to work just fine, nuke all of the code
for the old behavior. I strongly suggest backporting this to 2.8 as well.
However, beware that while you can nuke the old code here, you cannot
nuke the wxAddProcessCallbackForPid from the 2.8 branch (found in
utilsexc_cf since it's an exported symbol).
*/
// #define USE_OLD_DARWIN_END_PROCESS_DETECT (defined(__DARWIN__) && defined(__WXMAC__))
#define USE_OLD_DARWIN_END_PROCESS_DETECT 0
// wxMac/wxCocoa don't use the same process end detection mechanisms so we don't
// need wxExecute-related helpers for them
#if !USE_OLD_DARWIN_END_PROCESS_DETECT
bool wxAppTraits::CreateEndProcessPipe(wxExecuteData& execData) bool wxAppTraits::CreateEndProcessPipe(wxExecuteData& execData)
{ {
return execData.pipeEndProcDetect.Create(); return execData.pipeEndProcDetect.Create();
@@ -1260,83 +1241,78 @@ void wxAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& execData)
execData.pipeEndProcDetect.Close(); execData.pipeEndProcDetect.Close();
} }
#else // !Darwin int wxAppTraits::AddProcessCallback(wxEndProcessData *data, int fd)
bool wxAppTraits::CreateEndProcessPipe(wxExecuteData& WXUNUSED(execData))
{ {
return true; // define a custom handler processing only the closure of the descriptor
struct wxEndProcessFDIOHandler : public wxFDIOHandler
{
wxEndProcessFDIOHandler(wxEndProcessData *data, int fd)
: m_data(data), m_fd(fd)
{}
virtual void OnReadWaiting()
{ wxFAIL_MSG("this isn't supposed to happen"); }
virtual void OnWriteWaiting()
{ wxFAIL_MSG("this isn't supposed to happen"); }
virtual void OnExceptionWaiting()
{
const int pid = m_data->pid > 0 ? m_data->pid : -(m_data->pid);
int status = 0;
// has the process really terminated?
int rc = waitpid(pid, &status, WNOHANG);
if ( rc == 0 )
{
// This can only happen if the child application closes our
// dummy pipe that is used to monitor its lifetime; in that
// case, our best bet is to pretend the process did terminate,
// because otherwise wxExecute() would hang indefinitely
// (OnExceptionWaiting() won't be called again, the descriptor
// is closed now).
wxLogDebug("Child process (PID %d) still alive, "
"even though pipe was closed.", pid);
}
else if ( rc == -1 )
{
// As above, if waitpid() fails, the best we can do is to log the
// error and pretend the child terminated:
wxLogSysError(_("Failed to check child process' status"));
} }
bool // set exit code to -1 if something bad happened
wxAppTraits::IsWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(execData), m_data->exitcode = rc > 0 && WIFEXITED(status) ? WEXITSTATUS(status)
int WXUNUSED(fd)) : -1;
{
return false; wxLogTrace("exec",
"Child process (PID %d) terminated with exit code %d",
pid, m_data->exitcode);
// child exited, end waiting
wxFDIODispatcher::Get()->UnregisterFD(m_fd);
close(m_fd);
wxHandleProcessTermination(m_data);
delete this;
} }
void wxEndProcessData * const m_data;
wxAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(execData)) const int m_fd;
{ };
// nothing to do here, we don't use the pipe
}
#endif // !Darwin/Darwin wxFDIODispatcher::Get()->RegisterFD
#if wxUSE_GUI
int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
{
wxEndProcessData *endProcData = new wxEndProcessData;
const int flags = execData.flags;
// wxAddProcessCallback is now (with DARWIN) allowed to call the
// callback function directly if the process terminates before
// the callback can be added to the run loop. Set up the endProcData.
if ( flags & wxEXEC_SYNC )
{
// we may have process for capturing the program output, but it's
// not used in wxEndProcessData in the case of sync execution
endProcData->process = NULL;
// sync execution: indicate it by negating the pid
endProcData->pid = -execData.pid;
}
else
{
// async execution, nothing special to do -- caller will be
// notified about the process termination if process != NULL, endProcData
// will be deleted in GTK_EndProcessDetector
endProcData->process = execData.process;
endProcData->pid = execData.pid;
}
if ( !(flags & wxEXEC_NOEVENTS) )
{
#if USE_OLD_DARWIN_END_PROCESS_DETECT
endProcData->tag = wxAddProcessCallbackForPid(endProcData, execData.pid);
#else
endProcData->tag = wxAddProcessCallback
( (
endProcData, fd,
execData.pipeEndProcDetect.Detach(wxPipe::Read) new wxEndProcessFDIOHandler(data, fd),
wxFDIO_EXCEPTION
); );
return fd; // unused, but return something unique for the tag
execData.pipeEndProcDetect.Close();
#endif // USE_OLD_DARWIN_END_PROCESS_DETECT
} }
if ( flags & wxEXEC_SYNC ) int wxAppTraits::WaitForChild(wxExecuteData& execData)
{ {
wxBusyCursor bc; if ( execData.flags & wxEXEC_SYNC )
int exitcode = 0;
wxWindowDisabler *wd = flags & (wxEXEC_NODISABLE | wxEXEC_NOEVENTS)
? NULL
: new wxWindowDisabler;
if ( flags & wxEXEC_NOEVENTS )
{ {
// just block waiting for the child to exit // just block waiting for the child to exit
int status = 0; int status = 0;
@@ -1369,152 +1345,48 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
{ {
result = waitpid(execData.pid, &status, 0); result = waitpid(execData.pid, &status, 0);
} }
#endif // __DARWIN__
#endif
if ( result == -1 ) if ( result == -1 )
{ {
wxLogLastError(_T("waitpid")); wxLogLastError("waitpid");
exitcode = -1;
} }
else else // child terminated
{ {
wxASSERT_MSG( result == execData.pid, wxASSERT_MSG( result == execData.pid,
_T("unexpected waitpid() return value") ); "unexpected waitpid() return value" );
if ( WIFEXITED(status) ) if ( WIFEXITED(status) )
{ {
exitcode = WEXITSTATUS(status); return WEXITSTATUS(status);
} }
else // abnormal termination? else // abnormal termination?
{ {
wxASSERT_MSG( WIFSIGNALED(status), wxASSERT_MSG( WIFSIGNALED(status),
_T("unexpected child wait status") ); "unexpected child wait status" );
exitcode = -1;
} }
} }
wxLogSysError(_("Waiting for subprocess termination failed"));
return -1;
} }
else // !wxEXEC_NOEVENTS else // asynchronous execution
{ {
// endProcData->pid will be set to 0 from wxEndProcessData *endProcData = new wxEndProcessData;
// wxHandleProcessTermination when the process terminates endProcData->process = execData.process;
while ( endProcData->pid != 0 ) endProcData->pid = execData.pid;
{ endProcData->tag = AddProcessCallback
bool idle = true;
#if HAS_PIPE_INPUT_STREAM
if ( execData.bufOut )
{
execData.bufOut->Update();
idle = false;
}
if ( execData.bufErr )
{
execData.bufErr->Update();
idle = false;
}
#endif // HAS_PIPE_INPUT_STREAM
// don't consume 100% of the CPU while we're sitting in this
// loop
if ( idle )
wxMilliSleep(1);
// give GTK+ a chance to call GTK_EndProcessDetector here and
// also repaint the GUI
wxYield();
}
exitcode = endProcData->exitcode;
}
delete wd;
delete endProcData;
return exitcode;
}
else // async execution
{
return execData.pid;
}
}
#endif //wxUSE_GUI
#if wxUSE_BASE
#ifdef wxHAS_GENERIC_PROCESS_CALLBACK
struct wxEndProcessFDIOHandler : public wxFDIOHandler
{
wxEndProcessFDIOHandler(wxEndProcessData *data, int fd)
: m_data(data), m_fd(fd)
{}
virtual void OnReadWaiting()
{ wxFAIL_MSG("this isn't supposed to happen"); }
virtual void OnWriteWaiting()
{ wxFAIL_MSG("this isn't supposed to happen"); }
virtual void OnExceptionWaiting()
{
int pid = (m_data->pid > 0) ? m_data->pid : -(m_data->pid);
int status = 0;
// has the process really terminated?
int rc = waitpid(pid, &status, WNOHANG);
if ( rc == 0 )
{
// This can only happen if the child application closes our dummy
// pipe that is used to monitor its lifetime; in that case, our
// best bet is to pretend the process did terminate, because
// otherwise wxExecute() would hang indefinitely
// (OnExceptionWaiting() won't be called again, the descriptor
// is closed now).
wxLogDebug("Child process (PID %i) still alive, even though notification was received that it terminated.", pid);
}
else if ( rc == -1 )
{
// As above, if waitpid() fails, the best we can do is to log the
// error and pretend the child terminated:
wxLogSysError(_("Failed to check child process' status"));
}
// set exit code to -1 if something bad happened
m_data->exitcode = (rc > 0 && WIFEXITED(status))
? WEXITSTATUS(status)
: -1;
wxLogTrace("exec",
"Child process (PID %i) terminated with exit code %i",
pid, m_data->exitcode);
// child exited, end waiting
wxFDIODispatcher::Get()->UnregisterFD(m_fd);
close(m_fd);
m_data->fdioHandler = NULL;
wxHandleProcessTermination(m_data);
delete this;
}
wxEndProcessData *m_data;
int m_fd;
};
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
{
proc_data->fdioHandler = new wxEndProcessFDIOHandler(proc_data, fd);
wxFDIODispatcher::Get()->RegisterFD
( (
fd, endProcData,
proc_data->fdioHandler, execData.pipeEndProcDetect.Detach(wxPipe::Read)
wxFDIO_EXCEPTION
); );
return fd; // unused, but return something unique for the tag
execData.pipeEndProcDetect.Close();
return execData.pid;
}
} }
#endif // wxHAS_GENERIC_PROCESS_CALLBACK
void wxHandleProcessTermination(wxEndProcessData *proc_data) void wxHandleProcessTermination(wxEndProcessData *proc_data)
{ {
@@ -1527,9 +1399,10 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data)
// clean up // clean up
if ( proc_data->pid > 0 ) if ( proc_data->pid > 0 )
{ {
// async execution
delete proc_data; delete proc_data;
} }
else else // sync execution
{ {
// let wxExecute() know that the process has terminated // let wxExecute() know that the process has terminated
proc_data->pid = 0; proc_data->pid = 0;
@@ -1537,3 +1410,80 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data)
} }
#endif // wxUSE_BASE #endif // wxUSE_BASE
#if wxUSE_GUI
int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
{
const int flags = execData.flags;
if ( !(flags & wxEXEC_SYNC) || (flags & wxEXEC_NOEVENTS) )
{
// async or blocking sync cases are already handled by the base class
// just fine, no need to duplicate its code here
return wxAppTraits::WaitForChild(execData);
}
// here we're dealing with the case of synchronous execution when we want
// to process the GUI events while waiting for the child termination
wxEndProcessData endProcData;
// we may have process for capturing the program output, but it's
// not used in wxEndProcessData in the case of sync execution
endProcData.process = NULL;
// sync execution: indicate it by negating the pid
endProcData.pid = -execData.pid;
endProcData.tag = AddProcessCallback
(
&endProcData,
execData.pipeEndProcDetect.Detach(wxPipe::Read)
);
execData.pipeEndProcDetect.Close();
// prepare to wait for the child termination: show to the user that we're
// busy and refuse all input unless explicitly told otherwise
wxBusyCursor bc;
wxWindowDisabler *wd = flags & wxEXEC_NODISABLE ? NULL
: new wxWindowDisabler;
// endProcData.pid will be set to 0 from wxHandleProcessTermination() when
// the process terminates
while ( endProcData.pid != 0 )
{
#if HAS_PIPE_INPUT_STREAM
bool idle = true;
if ( execData.bufOut )
{
execData.bufOut->Update();
idle = false;
}
if ( execData.bufErr )
{
execData.bufErr->Update();
idle = false;
}
// don't consume 100% of the CPU while we're sitting in this
// loop
if ( idle )
#endif // HAS_PIPE_INPUT_STREAM
wxMilliSleep(1);
// give the toolkit a chance to call wxHandleProcessTermination() here
// and also repaint the GUI and handle other accumulated events
wxYield();
}
delete wd;
return endProcData.exitcode;
}
#endif //wxUSE_GUI