From: Vadim Zeitlin Date: Sat, 22 Mar 2008 00:07:13 +0000 (+0000) Subject: replace wxAddProcessCallback() with wxAppTraits::AddProcessCallback() to fix linking... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1d043598b7e6baae2e0a472a4133b8d60f0f45ec 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 --- diff --git a/Makefile.in b/Makefile.in index f63eaa3370..fc40a65d8d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -729,7 +729,6 @@ ALL_BASE_SOURCES = \ src/common/selectdispatcher.cpp \ src/unix/epolldispatcher.cpp \ src/unix/appunix.cpp \ - src/unix/baseunix.cpp \ src/unix/evtloopunix.cpp \ src/unix/dlunix.cpp \ src/unix/snglinst.cpp \ @@ -3550,7 +3549,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS = \ monodll_selectdispatcher.o \ monodll_epolldispatcher.o \ monodll_appunix.o \ - monodll_baseunix.o \ monodll_evtloopunix.o \ monodll_dlunix.o \ monodll_snglinst.o \ @@ -3588,7 +3586,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS = \ monodll_selectdispatcher.o \ monodll_epolldispatcher.o \ monodll_appunix.o \ - monodll_baseunix.o \ monodll_evtloopunix.o \ monodll_dlunix.o \ monodll_snglinst.o \ @@ -3609,7 +3606,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS = \ monodll_selectdispatcher.o \ monodll_epolldispatcher.o \ monodll_appunix.o \ - monodll_baseunix.o \ monodll_evtloopunix.o \ monodll_dlunix.o \ monodll_snglinst.o \ @@ -3630,7 +3626,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS = \ monodll_selectdispatcher.o \ monodll_epolldispatcher.o \ monodll_appunix.o \ - monodll_baseunix.o \ monodll_evtloopunix.o \ monodll_dlunix.o \ monodll_snglinst.o \ @@ -3660,7 +3655,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS = \ monodll_selectdispatcher.o \ monodll_epolldispatcher.o \ monodll_appunix.o \ - monodll_baseunix.o \ monodll_evtloopunix.o \ monodll_dlunix.o \ monodll_snglinst.o \ @@ -3673,7 +3667,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS = \ monodll_selectdispatcher.o \ monodll_epolldispatcher.o \ monodll_appunix.o \ - monodll_baseunix.o \ monodll_evtloopunix.o \ monodll_dlunix.o \ monodll_snglinst.o \ @@ -3694,7 +3687,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS = \ monodll_selectdispatcher.o \ monodll_epolldispatcher.o \ monodll_appunix.o \ - monodll_baseunix.o \ monodll_evtloopunix.o \ monodll_dlunix.o \ monodll_snglinst.o \ @@ -5456,7 +5448,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_1 = \ monolib_selectdispatcher.o \ monolib_epolldispatcher.o \ monolib_appunix.o \ - monolib_baseunix.o \ monolib_evtloopunix.o \ monolib_dlunix.o \ monolib_snglinst.o \ @@ -5494,7 +5485,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS_1 = \ monolib_selectdispatcher.o \ monolib_epolldispatcher.o \ monolib_appunix.o \ - monolib_baseunix.o \ monolib_evtloopunix.o \ monolib_dlunix.o \ monolib_snglinst.o \ @@ -5515,7 +5505,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS_1 = \ monolib_selectdispatcher.o \ monolib_epolldispatcher.o \ monolib_appunix.o \ - monolib_baseunix.o \ monolib_evtloopunix.o \ monolib_dlunix.o \ monolib_snglinst.o \ @@ -5536,7 +5525,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS_1 = \ monolib_selectdispatcher.o \ monolib_epolldispatcher.o \ monolib_appunix.o \ - monolib_baseunix.o \ monolib_evtloopunix.o \ monolib_dlunix.o \ monolib_snglinst.o \ @@ -5566,7 +5554,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS_1 = \ monolib_selectdispatcher.o \ monolib_epolldispatcher.o \ monolib_appunix.o \ - monolib_baseunix.o \ monolib_evtloopunix.o \ monolib_dlunix.o \ monolib_snglinst.o \ @@ -5579,7 +5566,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS_1 = \ monolib_selectdispatcher.o \ monolib_epolldispatcher.o \ monolib_appunix.o \ - monolib_baseunix.o \ monolib_evtloopunix.o \ monolib_dlunix.o \ monolib_snglinst.o \ @@ -5600,7 +5586,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS_1 = \ monolib_selectdispatcher.o \ monolib_epolldispatcher.o \ monolib_appunix.o \ - monolib_baseunix.o \ monolib_evtloopunix.o \ monolib_dlunix.o \ monolib_snglinst.o \ @@ -7399,7 +7384,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_2 = \ basedll_selectdispatcher.o \ basedll_epolldispatcher.o \ basedll_appunix.o \ - basedll_baseunix.o \ basedll_evtloopunix.o \ basedll_dlunix.o \ basedll_snglinst.o \ @@ -7437,7 +7421,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS_2 = \ basedll_selectdispatcher.o \ basedll_epolldispatcher.o \ basedll_appunix.o \ - basedll_baseunix.o \ basedll_evtloopunix.o \ basedll_dlunix.o \ basedll_snglinst.o \ @@ -7458,7 +7441,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS_2 = \ basedll_selectdispatcher.o \ basedll_epolldispatcher.o \ basedll_appunix.o \ - basedll_baseunix.o \ basedll_evtloopunix.o \ basedll_dlunix.o \ basedll_snglinst.o \ @@ -7479,7 +7461,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS_2 = \ basedll_selectdispatcher.o \ basedll_epolldispatcher.o \ basedll_appunix.o \ - basedll_baseunix.o \ basedll_evtloopunix.o \ basedll_dlunix.o \ basedll_snglinst.o \ @@ -7509,7 +7490,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS_2 = \ basedll_selectdispatcher.o \ basedll_epolldispatcher.o \ basedll_appunix.o \ - basedll_baseunix.o \ basedll_evtloopunix.o \ basedll_dlunix.o \ basedll_snglinst.o \ @@ -7522,7 +7502,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS_2 = \ basedll_selectdispatcher.o \ basedll_epolldispatcher.o \ basedll_appunix.o \ - basedll_baseunix.o \ basedll_evtloopunix.o \ basedll_dlunix.o \ basedll_snglinst.o \ @@ -7543,7 +7522,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS_2 = \ basedll_selectdispatcher.o \ basedll_epolldispatcher.o \ basedll_appunix.o \ - basedll_baseunix.o \ basedll_evtloopunix.o \ basedll_dlunix.o \ basedll_snglinst.o \ @@ -7625,7 +7603,6 @@ COND_PLATFORM_UNIX_1___BASE_PLATFORM_SRC_OBJECTS_3 = \ baselib_selectdispatcher.o \ baselib_epolldispatcher.o \ baselib_appunix.o \ - baselib_baseunix.o \ baselib_evtloopunix.o \ baselib_dlunix.o \ baselib_snglinst.o \ @@ -7663,7 +7640,6 @@ COND_TOOLKIT____BASE_MACOSX_SRC_OBJECTS_3 = \ baselib_selectdispatcher.o \ baselib_epolldispatcher.o \ baselib_appunix.o \ - baselib_baseunix.o \ baselib_evtloopunix.o \ baselib_dlunix.o \ baselib_snglinst.o \ @@ -7684,7 +7660,6 @@ COND_TOOLKIT_COCOA___BASE_MACOSX_SRC_OBJECTS_3 = \ baselib_selectdispatcher.o \ baselib_epolldispatcher.o \ baselib_appunix.o \ - baselib_baseunix.o \ baselib_evtloopunix.o \ baselib_dlunix.o \ baselib_snglinst.o \ @@ -7705,7 +7680,6 @@ COND_TOOLKIT_GTK___BASE_MACOSX_SRC_OBJECTS_3 = \ baselib_selectdispatcher.o \ baselib_epolldispatcher.o \ baselib_appunix.o \ - baselib_baseunix.o \ baselib_evtloopunix.o \ baselib_dlunix.o \ baselib_snglinst.o \ @@ -7735,7 +7709,6 @@ COND_TOOLKIT_MAC___BASE_MACOSX_SRC_OBJECTS_3 = \ baselib_selectdispatcher.o \ baselib_epolldispatcher.o \ baselib_appunix.o \ - baselib_baseunix.o \ baselib_evtloopunix.o \ baselib_dlunix.o \ baselib_snglinst.o \ @@ -7748,7 +7721,6 @@ COND_TOOLKIT_MOTIF___BASE_MACOSX_SRC_OBJECTS_3 = \ baselib_selectdispatcher.o \ baselib_epolldispatcher.o \ baselib_appunix.o \ - baselib_baseunix.o \ baselib_evtloopunix.o \ baselib_dlunix.o \ baselib_snglinst.o \ @@ -7769,7 +7741,6 @@ COND_TOOLKIT_X11___BASE_MACOSX_SRC_OBJECTS_3 = \ baselib_selectdispatcher.o \ baselib_epolldispatcher.o \ baselib_appunix.o \ - baselib_baseunix.o \ baselib_evtloopunix.o \ baselib_dlunix.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@ $(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@ $(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@ $(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@ $(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@ $(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@ $(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@ $(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@ $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/unix/evtloopunix.cpp diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index ca98e7d094..71e91e9820 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -60,7 +60,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/common/selectdispatcher.cpp src/unix/epolldispatcher.cpp src/unix/appunix.cpp - src/unix/baseunix.cpp src/unix/evtloopunix.cpp src/unix/dlunix.cpp src/unix/snglinst.cpp diff --git a/build/msw/wx_vc7.sln b/build/msw/wx_vc7.sln index 465b7b109a..5151fa3f91 100644 --- a/build/msw/wx_vc7.sln +++ b/build/msw/wx_vc7.sln @@ -1,75 +1,39 @@ 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}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxzlib", "wx_vc7_wxzlib.vcproj", "{DDD86D36-A4F6-5A54-AE2C-144B3594E1CE}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxpng", "wx_vc7_wxpng.vcproj", "{EE6AD15D-E891-5E03-AB6C-6F98ACE69A3C}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxjpeg", "wx_vc7_wxjpeg.vcproj", "{3CA6563C-F480-52D4-AF05-D641E25A5DF2}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxtiff", "wx_vc7_wxtiff.vcproj", "{456F9EAD-4A96-59BD-A39A-75DAA25D517B}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxexpat", "wx_vc7_wxexpat.vcproj", "{AF27ABC5-1AB2-55D0-8E7D-239C0176530E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxscintilla", "wx_vc7_wxscintilla.vcproj", "{A00328D4-6B01-5DF5-828E-AC2CB8B83CF6}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "wx_vc7_base.vcproj", "{79F1691B-08C4-55BB-985E-FDDB0BC8753C}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net", "wx_vc7_net.vcproj", "{48EEE04D-6B25-5A11-8A4A-B84C3C1146EC}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "wx_vc7_core.vcproj", "{552E2EB7-F6EA-548D-A6CC-FCB0B246EE7F}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adv", "wx_vc7_adv.vcproj", "{35F2F245-4EF0-5FFB-AD23-E1D7DAC39F0E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "media", "wx_vc7_media.vcproj", "{CD68AE51-BA90-5367-BB7D-F013E8E42AAF}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "html", "wx_vc7_html.vcproj", "{C4CBFDA4-B78E-5C7D-A5EC-B20CF69DB256}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qa", "wx_vc7_qa.vcproj", "{5ADF90A8-DA5C-55B3-88F1-94C0A0E9C76D}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "wx_vc7_xml.vcproj", "{B036100A-CEA0-5466-BE27-7E5B3687CAB8}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "wx_vc7_xrc.vcproj", "{40DB525F-1EFF-56A4-8301-3AAD661135F3}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "wx_vc7_aui.vcproj", "{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "wx_vc7_richtext.vcproj", "{52F16F53-E13D-55CA-AD64-ACB0274B0704}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc7_stc.vcproj", "{4B498696-42F2-5547-B159-87E4CAF436C1}" ProjectSection(ProjectDependencies) = postProject @@ -77,346 +41,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc7_stc.vcproj", EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl", "wx_vc7_gl.vcproj", "{407F0D6F-2B2D-5774-B9D3-FA972A663072}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject 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 DLL Universal Release|Win32 = DLL Universal Release|Win32 DLL Universal Debug|Win32 = DLL Universal Debug|Win32 @@ -753,3 +379,4 @@ Global HideSolutionNode = FALSE EndGlobalSection EndGlobal + diff --git a/build/msw/wx_vc8_core.vcproj b/build/msw/wx_vc8_core.vcproj index b8af84bb65..1b6fc57d83 100644 --- a/build/msw/wx_vc8_core.vcproj +++ b/build/msw/wx_vc8_core.vcproj @@ -1534,7 +1534,7 @@ /> + + + + + + @@ -1894,7 +1914,7 @@ RelativePath="..\..\src\msw\settings.cpp" /> - @@ -3827,13 +3844,13 @@ RelativePath="..\..\include\wx\msw\stattext.h" /> + @@ -4584,6 +4604,9 @@ + diff --git a/include/wx/unix/apptbase.h b/include/wx/unix/apptbase.h index afb6663643..db5604279b 100644 --- a/include/wx/unix/apptbase.h +++ b/include/wx/unix/apptbase.h @@ -12,6 +12,7 @@ #ifndef _WX_UNIX_APPTBASE_H_ #define _WX_UNIX_APPTBASE_H_ +struct wxEndProcessData; struct wxExecuteData; class wxPipe; @@ -41,7 +42,20 @@ public: // wait for the process termination, return whatever wxExecute() must // 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 diff --git a/include/wx/unix/apptrait.h b/include/wx/unix/apptrait.h index ab34f3ada9..73b0649755 100644 --- a/include/wx/unix/apptrait.h +++ b/include/wx/unix/apptrait.h @@ -22,7 +22,6 @@ public: #if wxUSE_CONSOLE_EVENTLOOP virtual wxEventLoopBase *CreateEventLoop(); #endif // wxUSE_CONSOLE_EVENTLOOP - virtual int WaitForChild(wxExecuteData& execData); #if wxUSE_TIMER virtual wxTimerImpl *CreateTimerImpl(wxTimer *timer); #endif @@ -35,6 +34,9 @@ class WXDLLEXPORT wxGUIAppTraits : public wxGUIAppTraitsBase public: virtual wxEventLoopBase *CreateEventLoop(); virtual int WaitForChild(wxExecuteData& execData); +#if defined(__WXGTK__) || defined(__WXMOTIF__) + virtual int AddProcessCallback(wxEndProcessData *data, int fd); +#endif #if wxUSE_TIMER virtual wxTimerImpl *CreateTimerImpl(wxTimer *timer); #endif diff --git a/include/wx/unix/execute.h b/include/wx/unix/execute.h index 9c9ea40953..095435d525 100644 --- a/include/wx/unix/execute.h +++ b/include/wx/unix/execute.h @@ -15,17 +15,6 @@ class WXDLLIMPEXP_FWD_BASE wxProcess; 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 // executed when the process terminates, if pid < 0, the execution is // synchronous and the caller (wxExecute) frees the data @@ -35,10 +24,6 @@ struct wxEndProcessData int tag; // port dependent value wxProcess *process; // if !NULL: notified on process termination int exitcode; // the exit code - -#ifdef wxHAS_GENERIC_PROCESS_CALLBACK - wxEndProcessFDIOHandler *fdioHandler; -#endif }; // 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) 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 diff --git a/src/gtk/utilsgtk.cpp b/src/gtk/utilsgtk.cpp index e7b6208cec..f557d87d97 100644 --- a/src/gtk/utilsgtk.cpp +++ b/src/gtk/utilsgtk.cpp @@ -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, GDK_INPUT_READ, diff --git a/src/gtk1/utilsgtk.cpp b/src/gtk1/utilsgtk.cpp index 2612f63f77..a0d3f1a54b 100644 --- a/src/gtk1/utilsgtk.cpp +++ b/src/gtk1/utilsgtk.cpp @@ -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, GDK_INPUT_READ, @@ -173,11 +173,15 @@ int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) return tag; } +#if wxUSE_TIMER + wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer) { return new wxGTKTimerImpl(timer); } +#endif // wxUSE_TIMER + // ---------------------------------------------------------------------------- // wxPlatformInfo-related // ---------------------------------------------------------------------------- diff --git a/src/mac/corefoundation/utilsexc_cf.cpp b/src/mac/corefoundation/utilsexc_cf.cpp index 93dc45dd5d..2ab2dbd059 100644 --- a/src/mac/corefoundation/utilsexc_cf.cpp +++ b/src/mac/corefoundation/utilsexc_cf.cpp @@ -24,216 +24,6 @@ #include -// 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 -extern "C" { -#include -} - -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 /*! @@ -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. Takes advantage of the fact that sockets on UNIX are just regular file descriptors and thus even a non-socket file descriptor can 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. */ -int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) +int wxGUIAppTraits::AddProcessCallback(wxEndProcessData *proc_data, int fd) { static int s_last_tag = 0; 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 // put it in because it's already compiled for wxCocoa and wxMac GUI lib. -#if wxUSE_GUI - #if wxUSE_STDPATHS static wxStandardPathsCF gs_stdPaths; wxStandardPathsBase& wxGUIAppTraits::GetStandardPaths() @@ -364,5 +152,3 @@ wxStandardPathsBase& wxGUIAppTraits::GetStandardPaths() } #endif -#endif // wxUSE_GUI - diff --git a/src/mgl/utils.cpp b/src/mgl/utils.cpp index 114277e970..25618fdb3c 100644 --- a/src/mgl/utils.cpp +++ b/src/mgl/utils.cpp @@ -164,21 +164,3 @@ wxMouseState wxGetMouseState() 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 diff --git a/src/motif/utils.cpp b/src/motif/utils.cpp index 2453e7bd0d..e5ba829b5d 100644 --- a/src/motif/utils.cpp +++ b/src/motif/utils.cpp @@ -96,7 +96,7 @@ static void xt_notify_end_process(XtPointer data, int *WXUNUSED(fid), XtRemoveInput(*id); } -int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) +int wxGUIAppTraits::AddProcessCallback(wxEndProcessData *proc_data, int fd) { XtInputId id = XtAppAddInput((XtAppContext) wxTheApp->GetAppContext(), fd, diff --git a/src/unix/baseunix.cpp b/src/unix/baseunix.cpp index c5e3ddcee1..cce400bf20 100644 --- a/src/unix/baseunix.cpp +++ b/src/unix/baseunix.cpp @@ -30,7 +30,6 @@ #include "wx/utils.h" #endif //WX_PRECOMP -#include "wx/apptrait.h" #include "wx/unix/execute.h" #include "wx/evtloop.h" #include "wx/gsocket.h" @@ -45,45 +44,8 @@ // 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 -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 // Note: wxConsoleAppTraits::CreateEventLoop() is defined in evtloopunix.cpp! diff --git a/src/unix/timerunx.cpp b/src/unix/timerunx.cpp index e742b79486..158736fcb3 100644 --- a/src/unix/timerunx.cpp +++ b/src/unix/timerunx.cpp @@ -29,6 +29,7 @@ #include "wx/event.h" #endif +#include "wx/apptrait.h" #include "wx/longlong.h" #include @@ -256,5 +257,10 @@ wxUsecClock_t wxGetLocalTimeUsec() return wxGetLocalTimeMillis() * 1000L; } +wxTimerImpl *wxConsoleAppTraits::CreateTimerImpl(wxTimer *timer) +{ + return new wxUnixTimerImpl(timer); +} + #endif // wxUSE_TIMER diff --git a/src/unix/utilsunx.cpp b/src/unix/utilsunx.cpp index 2b5056af5f..e47af5bf55 100644 --- a/src/unix/utilsunx.cpp +++ b/src/unix/utilsunx.cpp @@ -41,6 +41,7 @@ #include "wx/wfstream.h" +#include "wx/private/fdiodispatcher.h" #include "wx/unix/execute.h" #include "wx/unix/private.h" @@ -1220,30 +1221,10 @@ bool wxHandleFatalExceptions(bool doit) #endif // wxUSE_ON_FATAL_EXCEPTION -#endif // wxUSE_BASE - -#ifdef __DARWIN__ - #include -#endif // ---------------------------------------------------------------------------- // 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) { return execData.pipeEndProcDetect.Create(); @@ -1260,261 +1241,152 @@ void wxAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& execData) execData.pipeEndProcDetect.Close(); } -#else // !Darwin - -bool wxAppTraits::CreateEndProcessPipe(wxExecuteData& WXUNUSED(execData)) -{ - return true; -} - -bool -wxAppTraits::IsWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(execData), - int WXUNUSED(fd)) -{ - return false; -} - -void -wxAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(execData)) -{ - // nothing to do here, we don't use the pipe -} - -#endif // !Darwin/Darwin - -#if wxUSE_GUI - -int wxGUIAppTraits::WaitForChild(wxExecuteData& execData) +int wxAppTraits::AddProcessCallback(wxEndProcessData *data, int fd) { - 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 ) + // define a custom handler processing only the closure of the descriptor + struct wxEndProcessFDIOHandler : public wxFDIOHandler { - // 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; - } + 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"); } - if ( !(flags & wxEXEC_NOEVENTS) ) - { -#if USE_OLD_DARWIN_END_PROCESS_DETECT - endProcData->tag = wxAddProcessCallbackForPid(endProcData, execData.pid); -#else - endProcData->tag = wxAddProcessCallback - ( - endProcData, - execData.pipeEndProcDetect.Detach(wxPipe::Read) - ); - - execData.pipeEndProcDetect.Close(); -#endif // USE_OLD_DARWIN_END_PROCESS_DETECT - } - - if ( flags & wxEXEC_SYNC ) - { - wxBusyCursor bc; - int exitcode = 0; - - wxWindowDisabler *wd = flags & (wxEXEC_NODISABLE | wxEXEC_NOEVENTS) - ? NULL - : new wxWindowDisabler; - - if ( flags & wxEXEC_NOEVENTS ) + virtual void OnExceptionWaiting() { - // just block waiting for the child to exit + const int pid = m_data->pid > 0 ? m_data->pid : -(m_data->pid); int status = 0; - int result = waitpid(execData.pid, &status, 0); -#ifdef __DARWIN__ - /* DE: waitpid manpage states that waitpid can fail with EINTR - if the call is interrupted by a caught signal. I suppose - that means that this ought to be a while loop. - - The odd thing is that it seems to fail EVERY time. It fails - with a quickly exiting process (e.g. echo), and fails with a - slowly exiting process (e.g. sleep 2) but clearly after - having waited for the child to exit. Maybe it's a bug in - my particular version. - - It works, however, from the CFSocket callback without this - trick but in that case it's used only after CFSocket calls - the callback and with the WNOHANG flag which would seem to - preclude it from being interrupted or at least make it much - less likely since it would not then be waiting. - - If Darwin's man page is to be believed then this is definitely - necessary. It's just weird that I've never seen it before - and apparently no one else has either or you'd think they'd - have reported it by now. Perhaps blocking the GUI while - waiting for a child process to exit is simply not that common. - */ - if(result == -1 && errno == EINTR) + // has the process really terminated? + int rc = waitpid(pid, &status, WNOHANG); + if ( rc == 0 ) { - result = waitpid(execData.pid, &status, 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); } - -#endif - - if ( result == -1 ) + else if ( rc == -1 ) { - wxLogLastError(_T("waitpid")); - exitcode = -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")); } - else - { - wxASSERT_MSG( result == execData.pid, - _T("unexpected waitpid() return value") ); - if ( WIFEXITED(status) ) - { - exitcode = WEXITSTATUS(status); - } - else // abnormal termination? - { - wxASSERT_MSG( WIFSIGNALED(status), - _T("unexpected child wait status") ); - exitcode = -1; - } - } - } - else // !wxEXEC_NOEVENTS - { - // endProcData->pid will be set to 0 from - // wxHandleProcessTermination when the process terminates - while ( endProcData->pid != 0 ) - { - bool idle = true; + // set exit code to -1 if something bad happened + m_data->exitcode = rc > 0 && WIFEXITED(status) ? WEXITSTATUS(status) + : -1; -#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 + wxLogTrace("exec", + "Child process (PID %d) terminated with exit code %d", + pid, m_data->exitcode); - // don't consume 100% of the CPU while we're sitting in this - // loop - if ( idle ) - wxMilliSleep(1); + // child exited, end waiting + wxFDIODispatcher::Get()->UnregisterFD(m_fd); + close(m_fd); - // give GTK+ a chance to call GTK_EndProcessDetector here and - // also repaint the GUI - wxYield(); - } + wxHandleProcessTermination(m_data); - exitcode = endProcData->exitcode; + delete this; } - delete wd; - delete endProcData; + wxEndProcessData * const m_data; + const int m_fd; + }; - return exitcode; - } - else // async execution - { - return execData.pid; - } + wxFDIODispatcher::Get()->RegisterFD + ( + fd, + new wxEndProcessFDIOHandler(data, fd), + wxFDIO_EXCEPTION + ); + return fd; // unused, but return something unique for the tag } -#endif //wxUSE_GUI - -#if wxUSE_BASE - -#ifdef wxHAS_GENERIC_PROCESS_CALLBACK -struct wxEndProcessFDIOHandler : public wxFDIOHandler +int wxAppTraits::WaitForChild(wxExecuteData& execData) { - 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() + if ( execData.flags & wxEXEC_SYNC ) { - int pid = (m_data->pid > 0) ? m_data->pid : -(m_data->pid); + // just block waiting for the child to exit int status = 0; - // has the process really terminated? - int rc = waitpid(pid, &status, WNOHANG); - if ( rc == 0 ) + int result = waitpid(execData.pid, &status, 0); +#ifdef __DARWIN__ + /* DE: waitpid manpage states that waitpid can fail with EINTR + if the call is interrupted by a caught signal. I suppose + that means that this ought to be a while loop. + + The odd thing is that it seems to fail EVERY time. It fails + with a quickly exiting process (e.g. echo), and fails with a + slowly exiting process (e.g. sleep 2) but clearly after + having waited for the child to exit. Maybe it's a bug in + my particular version. + + It works, however, from the CFSocket callback without this + trick but in that case it's used only after CFSocket calls + the callback and with the WNOHANG flag which would seem to + preclude it from being interrupted or at least make it much + less likely since it would not then be waiting. + + If Darwin's man page is to be believed then this is definitely + necessary. It's just weird that I've never seen it before + and apparently no one else has either or you'd think they'd + have reported it by now. Perhaps blocking the GUI while + waiting for a child process to exit is simply not that common. + */ + if ( result == -1 && errno == EINTR ) { - // 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); + result = waitpid(execData.pid, &status, 0); } - else if ( rc == -1 ) +#endif // __DARWIN__ + + if ( result == -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")); + wxLogLastError("waitpid"); } + else // child terminated + { + wxASSERT_MSG( result == execData.pid, + "unexpected waitpid() return value" ); - // 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); + if ( WIFEXITED(status) ) + { + return WEXITSTATUS(status); + } + else // abnormal termination? + { + wxASSERT_MSG( WIFSIGNALED(status), + "unexpected child wait status" ); + } + } - m_data->fdioHandler = NULL; - wxHandleProcessTermination(m_data); + wxLogSysError(_("Waiting for subprocess termination failed")); - delete this; + return -1; } + else // asynchronous execution + { + wxEndProcessData *endProcData = new wxEndProcessData; + endProcData->process = execData.process; + endProcData->pid = execData.pid; + endProcData->tag = AddProcessCallback + ( + endProcData, + execData.pipeEndProcDetect.Detach(wxPipe::Read) + ); - wxEndProcessData *m_data; - int m_fd; -}; + execData.pipeEndProcDetect.Close(); + return execData.pid; -int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) -{ - proc_data->fdioHandler = new wxEndProcessFDIOHandler(proc_data, fd); - wxFDIODispatcher::Get()->RegisterFD - ( - fd, - proc_data->fdioHandler, - wxFDIO_EXCEPTION - ); - return fd; // unused, but return something unique for the tag + } } -#endif // wxHAS_GENERIC_PROCESS_CALLBACK void wxHandleProcessTermination(wxEndProcessData *proc_data) { @@ -1527,13 +1399,91 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data) // clean up if ( proc_data->pid > 0 ) { - delete proc_data; + // async execution + delete proc_data; } - else + else // sync execution { - // let wxExecute() know that the process has terminated - proc_data->pid = 0; + // let wxExecute() know that the process has terminated + proc_data->pid = 0; } } #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 +