From 02b0520b55bdfb9c526af5d32a35cdc51a70dbac Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Mon, 7 Mar 2016 11:10:30 +0100 Subject: [PATCH 001/145] Rename our .doap file. --- libsigc++2.doap => libsigcplusplus.doap | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename libsigc++2.doap => libsigcplusplus.doap (100%) diff --git a/libsigc++2.doap b/libsigcplusplus.doap similarity index 100% rename from libsigc++2.doap rename to libsigcplusplus.doap From db55e7be952ed78bc4e94b2a2a4980bc7b9ed74a Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Mon, 7 Mar 2016 11:14:24 +0100 Subject: [PATCH 002/145] .doap: Correct the web site URL. Though we really must stop using sourceforge even for the web site. --- libsigcplusplus.doap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsigcplusplus.doap b/libsigcplusplus.doap index ac695d2c..5240e732 100644 --- a/libsigcplusplus.doap +++ b/libsigcplusplus.doap @@ -11,8 +11,8 @@ It allows you to define signals and to connect those signals to any callback function, either global or a member function, regardless of whether it is static or virtual. -libsigc++ is used by glibmm and gtkmm to wrap Glib and GTK+ signals. - +libsigc++ is also used by glibmm and gtkmm to wrap Glib and GTK+ signals. + From b11cf2b9d758fa4e8ac301d8b82d0dfd708b5ded Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Tue, 8 Mar 2016 11:13:28 +0100 Subject: [PATCH 003/145] Deprecate sigc::ref() in favor of std::ref(). --- sigc++/adaptors/macros/bind.h.m4 | 6 +++--- sigc++/reference_wrapper.h | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/sigc++/adaptors/macros/bind.h.m4 b/sigc++/adaptors/macros/bind.h.m4 index 495f7fb3..1284d91f 100644 --- a/sigc++/adaptors/macros/bind.h.m4 +++ b/sigc++/adaptors/macros/bind.h.m4 @@ -320,14 +320,14 @@ struct count_void * @endcode * * You can bind references to functors by passing the objects through - * the sigc::ref() helper function. + * the std::ref() or std::cref() functions. * * @par Example: * @code * int some_int; * sigc::signal some_signal; * void foo(int&); - * some_signal.connect(sigc::bind(&foo,sigc::ref(some_int))); + * some_signal.connect(sigc::bind(&foo, std::ref(some_int))); * @endcode * * If you bind an object of a sigc::trackable derived type to a functor @@ -339,7 +339,7 @@ struct count_void * struct bar : public sigc::trackable {} some_bar; * sigc::signal some_signal; * void foo(bar&); - * some_signal.connect(sigc::bind(&foo,sigc::ref(some_bar))); + * some_signal.connect(sigc::bind(&foo, std::ref(some_bar))); * // disconnected automatically if some_bar goes out of scope * @endcode * diff --git a/sigc++/reference_wrapper.h b/sigc++/reference_wrapper.h index 5a57e916..35b2ab6b 100644 --- a/sigc++/reference_wrapper.h +++ b/sigc++/reference_wrapper.h @@ -21,8 +21,12 @@ namespace sigc { +#ifndef SIGCXX_DISABLE_DEPRECATED + /** Reference wrapper. * Use sigc::ref() to create a reference wrapper. + * + * @deprecated Use std::ref() or std::cref() instead to create a std::reference_wrapper(). */ template struct reference_wrapper @@ -38,6 +42,8 @@ struct reference_wrapper /** Const reference wrapper. * Use sigc::ref() to create a const reference wrapper. + * + * @deprecated Use std::ref() or std::cref() instead to create a std::reference_wrapper(). */ template struct const_reference_wrapper @@ -60,6 +66,8 @@ struct const_reference_wrapper * * @param v Reference to store. * @return A reference wrapper. + * + * @deprecated Use std::ref() or std::cref() instead. */ template reference_wrapper ref(T_type& v) @@ -74,17 +82,27 @@ reference_wrapper ref(T_type& v) * * @param v Reference to store. * @return A reference wrapper. + * + * @deprecated Use std::ref() or std::cref() instead. */ template const_reference_wrapper ref(const T_type& v) { return const_reference_wrapper(v); } +#endif // SIGCXX_DISABLE_DEPRECATED + + template struct unwrap_reference { typedef T_type type; }; + +#ifndef SIGCXX_DISABLE_DEPRECATED + +// Specializations for std::reference_wrapper and std::const_reference_wrapper: + template struct unwrap_reference > { @@ -105,6 +123,20 @@ template const T_type& unwrap(const const_reference_wrapper& v) { return v; } +#endif // SIGCXX_DISABLE_DEPRECATED + +//Specializations for std::reference_wrapper: + +template +struct unwrap_reference > +{ + typedef T_type& type; +}; + +template +T_type& unwrap(const std::reference_wrapper& v) +{ return v; } + } /* namespace sigc */ #endif /* _SIGC_REFERENCE_WRAPPER_H_ */ From c21aba8a028f0b9b33bc0f0254f80e897738e911 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Tue, 8 Mar 2016 11:17:47 +0100 Subject: [PATCH 004/145] reference_wrapper: Include . --- sigc++/reference_wrapper.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sigc++/reference_wrapper.h b/sigc++/reference_wrapper.h index 35b2ab6b..c04fa4d7 100644 --- a/sigc++/reference_wrapper.h +++ b/sigc++/reference_wrapper.h @@ -19,6 +19,8 @@ #ifndef _SIGC_REFERENCE_WRAPPER_H_ #define _SIGC_REFERENCE_WRAPPER_H_ +#include // For std::reference_wrapper. + namespace sigc { #ifndef SIGCXX_DISABLE_DEPRECATED From 993aabc7b8afdd1ac06d97a3147452f820181ef5 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Tue, 8 Mar 2016 11:24:32 +0100 Subject: [PATCH 005/145] Also ifdef out bound_argument. And add a specialization for bound_argument. --- sigc++/adaptors/bound_argument.h | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/sigc++/adaptors/bound_argument.h b/sigc++/adaptors/bound_argument.h index 05796827..272a6c31 100644 --- a/sigc++/adaptors/bound_argument.h +++ b/sigc++/adaptors/bound_argument.h @@ -75,6 +75,8 @@ class bound_argument T_type visited_; }; +#ifndef SIGCXX_DISABLE_DEPRECATED + //Template specialization: /** bound_argument object for a bound argument that is passed by bind() or * returned by bind_return() by reference, specialized for reference_wrapper<> types. @@ -142,6 +144,44 @@ class bound_argument< const_reference_wrapper > const_limit_reference visited_; }; +#endif // SIGCXX_DISABLE_DEPRECATED + +//Template specialization: +/** bound_argument object for a bound argument that is passed by bind() or + * returned by bind_return() by reference, specialized for std::reference_wrapper<> types. + * @e T_wrapped The type of the bound argument. + */ +template +class bound_argument< std::reference_wrapper > +{ +public: + /** Constructor. + * @param _A_argument The argument to bind. + */ + bound_argument(const std::reference_wrapper& _A_argument) + : visited_(unwrap(_A_argument)) + {} + + /** Retrieve the entity to visit in visit_each(). + * @return The limited_reference to the bound argument. + */ + inline const limit_reference& visit() const + { return visited_; } + + /** Retrieve the entity to pass to the bound functor or return. + * @return The bound argument. + */ + inline T_wrapped& invoke() + { return visited_.invoke(); } + +private: + /** The limited_reference to the bound argument. + */ + limit_reference visited_; +}; + + + #ifndef DOXYGEN_SHOULD_SKIP_THIS /** Implementation of visitor<>::do_visit_each<>() specialized for the bound_argument class. * Call visit_each() on the entity returned by the bound_argument's visit() From c97f598ac21cc494b8fc2598c6958136ccc84a29 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Thu, 10 Mar 2016 15:36:43 +0800 Subject: [PATCH 006/145] MSVC builds: Update sigc++ project Add the new source files and headers from adaptors/lambda, and re-order the source files list into alphabetical order. --- MSVC_Net2013/libsigc++2.vcxproj | 39 +++++++++++++------------ MSVC_Net2013/libsigc++2.vcxproj.filters | 39 +++++++++++++------------ MSVC_Net2013/sigc-install.props | 4 ++- 3 files changed, 45 insertions(+), 37 deletions(-) diff --git a/MSVC_Net2013/libsigc++2.vcxproj b/MSVC_Net2013/libsigc++2.vcxproj index a3d03e18..15762b93 100644 --- a/MSVC_Net2013/libsigc++2.vcxproj +++ b/MSVC_Net2013/libsigc++2.vcxproj @@ -128,47 +128,50 @@ + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/MSVC_Net2013/libsigc++2.vcxproj.filters b/MSVC_Net2013/libsigc++2.vcxproj.filters index 7ce0335e..d7a58cd1 100644 --- a/MSVC_Net2013/libsigc++2.vcxproj.filters +++ b/MSVC_Net2013/libsigc++2.vcxproj.filters @@ -18,48 +18,51 @@ Source Files Source Files Source Files + Source Files + Source Files Source Files Source Files - Source Files - Header Files - Header Files Header Files - Header Files - Header Files Header Files Header Files - Header Files Header Files - Header Files - Header Files - Header Files - Header Files Header Files - Header Files - Header Files + Header Files Header Files Header Files Header Files - Header Files Header Files - Header Files Header Files Header Files - Header Files Header Files Header Files Header Files - Header Files Header Files - Header Files Header Files Header Files Header Files - Header Files + Header Files + Header Files + Header Files + Header Files Header Files + Header Files + Header Files + Header Files + Header Files + Header Files + Header Files Header Files + Header Files + Header Files + Header Files + Header Files + Header Files + Header Files + Header Files + Header Files Resource Files diff --git a/MSVC_Net2013/sigc-install.props b/MSVC_Net2013/sigc-install.props index c3aa67c9..8e740bc3 100644 --- a/MSVC_Net2013/sigc-install.props +++ b/MSVC_Net2013/sigc-install.props @@ -21,7 +21,7 @@ copy ".\sigc++config.h" "$(CopyDir)\lib\sigc++-$(ApiMajorVersion).$(ApiMinorVers if "$(Configuration)" == "Release" copy "$(BinDir)\sigc$(ReleaseDllSuffix).lib" "$(CopyDir)\lib" if "$(Configuration)" == "Debug" copy "$(BinDir)\sigc$(DebugDllSuffix).lib" "$(CopyDir)\lib" -mkdir "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors" +mkdir "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\lambda" mkdir "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors" copy "..\sigc++\sigc++.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" @@ -50,6 +50,8 @@ copy "..\sigc++\adaptors\hide.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$ copy "..\sigc++\adaptors\retype.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" copy "..\sigc++\adaptors\retype_return.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" copy "..\sigc++\adaptors\track_obj.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" +copy "..\sigc++\adaptors\lambda\base.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\lambda" +copy "..\sigc++\adaptors\lambda\select.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\lambda" copy "..\sigc++\functors\functors.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" copy "..\sigc++\functors\functor_trait.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" copy "..\sigc++\functors\mem_fun.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" From 4d69aebe974dc634deca56d89c35beb2a9f98f5e Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Thu, 10 Mar 2016 14:14:41 +0100 Subject: [PATCH 007/145] mem_fun(): Deprecate mem_fun(pointer, func). Leaving just mem_fun(reference, func). See bug #763215 The deprecated mem_fun() has been removed from libsigc+--3.0, so this is a chance to adapt code before switching to libsigc++-3.0. --- sigc++/functors/macros/mem_fun.h.m4 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sigc++/functors/macros/mem_fun.h.m4 b/sigc++/functors/macros/mem_fun.h.m4 index 90d1889d..5e9b8595 100644 --- a/sigc++/functors/macros/mem_fun.h.m4 +++ b/sigc++/functors/macros/mem_fun.h.m4 @@ -45,7 +45,12 @@ public: */ explicit [$2]mem_functor$1(function_type _A_func) : func_ptr_(_A_func) {} +#ifndef SIGCXX_DISABLE_DEPRECATED /** Execute the wrapped method operating on the passed instance. + * + * @deprecated Please use the constructor that takes the object by reference + * instead. + * * @param _A_obj Pointer to instance the method should operate on.dnl FOR(1, $1,[ * @param _A_a%1 Argument to be passed on to the method.]) @@ -53,6 +58,7 @@ FOR(1, $1,[ */ T_return operator()(LIST($3 T_obj* _A_obj, LOOP(type_trait_take_t _A_a%1, $1))) const { return (_A_obj->*(this->func_ptr_))(LOOP(_A_a%1, $1)); } +#endif //SIGCXX_DISABLE_DEPRECATED /** Execute the wrapped method operating on the passed instance. * @param _A_obj Reference to instance the method should operate on.dnl @@ -89,7 +95,12 @@ class bound_[$2]mem_functor$1 public: typedef typename base_type_::function_type function_type; +#ifndef SIGCXX_DISABLE_DEPRECATED /** Constructs a bound_[$2]mem_functor$1 object that wraps the passed method. + * + * @deprecated Please use the constructor that takes the object by reference + * instead. + * * @param _A_obj Pointer to instance the method will operate on. * @param _A_func Pointer to method will be invoked from operator()(). */ @@ -97,6 +108,7 @@ public: : base_type_(_A_func), obj_(*_A_obj) {} +#endif // SIGCXX_DISABLE_DEPRECATED /** Constructs a bound_[$2]mem_functor$1 object that wraps the passed method. * @param _A_obj Reference to instance the method will operate on. @@ -156,7 +168,11 @@ mem_fun[]ifelse($2,, $1)(T_return (T_obj::*_A_func)(LOOP(T_arg%1,$1)) $5) ]) define([BOUND_MEM_FUN],[dnl +#ifndef SIGCXX_DISABLE_DEPRECATED /** Creates a functor of type sigc::bound_[$3]mem_functor$1 which encapsulates a method and an object instance. + * + * @deprecated Please use the version that takes the object by reference instead. + * * @param _A_obj Pointer to object instance the functor should operate on. * @param _A_func Pointer to method that should be wrapped. * @return Functor that executes @e _A_func on invokation. @@ -167,6 +183,7 @@ template mem_fun[]ifelse($2,, $1)(/*$4*/ T_obj* _A_obj, T_return (T_obj2::*_A_func)(LOOP(T_arg%1,$1)) $5) { return bound_[$3]mem_functor$1(_A_obj, _A_func); } +#endif //SIGCXX_DISABLE_DEPRECATED /** Creates a functor of type sigc::bound_[$3]mem_functor$1 which encapsulates a method and an object instance. * @param _A_obj Reference to object instance the functor should operate on. From d3247383b73882f21a1496722eed5fe19a9baa8f Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Thu, 10 Mar 2016 17:17:16 +0100 Subject: [PATCH 008/145] examples build: Disable deprecated API. --- examples/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/Makefile.am b/examples/Makefile.am index b77cc24c..121f547f 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -16,7 +16,7 @@ ## along with this library. If not, see . AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -AM_CXXFLAGS = $(SIGC_WXXFLAGS) +AM_CXXFLAGS = $(SIGC_WXXFLAGS) -DSIGCXX_DISABLE_DEPRECATED LDADD = $(top_builddir)/sigc++/libsigc-$(SIGCXX_API_VERSION).la noinst_PROGRAMS = hello_world member_method From ee10e818ea7de842b7c7276caf841232d795a74c Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Thu, 10 Mar 2016 17:17:32 +0100 Subject: [PATCH 009/145] examples: Don't use deprecated mem_fun(pointer, func). --- examples/member_method.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/member_method.cc b/examples/member_method.cc index 574b1fc8..2b4d732c 100644 --- a/examples/member_method.cc +++ b/examples/member_method.cc @@ -25,7 +25,7 @@ class Something : public sigc::trackable Something::Something() { - auto iter = signal_print.connect( sigc::mem_fun(this, &Something::on_print) ); + auto iter = signal_print.connect( sigc::mem_fun(*this, &Something::on_print) ); signal_print.emit(2); From 7dbe9c3c825c6892a96557a09ddec199ab4c4019 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Thu, 10 Mar 2016 17:32:55 +0100 Subject: [PATCH 010/145] tests: Use std::ref() instead of deprecated sigc::ref(). --- sigc++/visit_each.h | 4 ++-- tests/test_bind.cc | 6 +++--- tests/test_bind_ref.cc | 8 ++++---- tests/test_bind_return.cc | 6 +++--- tests/test_copy_invalid_slot.cc | 2 +- tests/test_cpp11_lambda.cc | 28 ++++++++++++++-------------- tests/test_functor_trait.cc | 6 +++--- tests/test_limit_reference.cc | 4 ++-- tests/test_track_obj.cc | 4 ++-- 9 files changed, 34 insertions(+), 34 deletions(-) diff --git a/sigc++/visit_each.h b/sigc++/visit_each.h index 82f4236b..ab681cbb 100644 --- a/sigc++/visit_each.h +++ b/sigc++/visit_each.h @@ -181,12 +181,12 @@ void visit_each_type(const T_action& _A_action, const T_functor& _A_functor) type_limited_action limited_action(_A_action); - //specifying the types of the template specialization prevents disconnection of bound trackable references (such as with sigc::ref()), + //specifying the types of the template specialization prevents disconnection of bound trackable references (such as with std::ref()), //probably because the visit_each<> specializations take various different template types, //in various sequences, and we are probably specifying only a subset of them with this. // //But this is required by the AIX (and maybe IRIX MipsPro and Tru64) compilers. - //I guess that sigc::ref() therefore does not work on those platforms. murrayc + //I guess that std::ref() therefore does not work on those platforms. murrayc // sigc::visit_each(limited_action, _A_functor); //g++ (even slightly old ones) is our primary platform, so we could use the non-crashing version. diff --git a/tests/test_bind.cc b/tests/test_bind.cc index 845d54c0..2d3862b2 100644 --- a/tests/test_bind.cc +++ b/tests/test_bind.cc @@ -130,7 +130,7 @@ int main(int argc, char* argv[]) // method pointer instead of functor book test_book("otto"); - result_stream << sigc::bind<0>(&book::get_name, sigc::ref(test_book))(); + result_stream << sigc::bind<0>(&book::get_name, std::ref(test_book))(); util->check_result(result_stream, "otto"); // test return type of bind_functor::operator() overload with no arguments @@ -142,14 +142,14 @@ int main(int argc, char* argv[]) // test references std::string str("guest book"); - sigc::bind(&egon, sigc::ref(str))(); // Tell bind that it shall store a reference. + sigc::bind(&egon, std::ref(str))(); // Tell bind that it shall store a reference. result_stream << " " << str; // (This cannot be the default behaviour: just think about what happens if str dies!) util->check_result(result_stream, "egon(string 'guest book') egon was here"); sigc::slot sl; { book guest_book("karl"); - sl = sigc::bind(&egon, sigc::ref(guest_book)); + sl = sigc::bind(&egon, std::ref(guest_book)); sl(); result_stream << " " << static_cast(guest_book); util->check_result(result_stream, "egon(string 'karl') egon was here"); diff --git a/tests/test_bind_ref.cc b/tests/test_bind_ref.cc index 58bd55da..abac4cb2 100644 --- a/tests/test_bind_ref.cc +++ b/tests/test_bind_ref.cc @@ -16,7 +16,7 @@ class Param : public sigc::trackable {} //non-copyable, - //so it can only be used with sigc::bind() via sigc::ref() + //so it can only be used with sigc::bind() via std::ref() Param(const Param&) = delete; Param& operator=(const Param&) = delete; @@ -48,12 +48,12 @@ int main(int argc, char* argv[]) util->check_result(result_stream, ""); { - //Because Param derives from sigc::trackable(), sigc::ref() should disconnect + //Because Param derives from sigc::trackable(), std::ref() should disconnect // the signal handler when param is destroyed. Param param("murrayc"); // A convoluted way to do - // slot_bound = sigc::bind(slot_full, sigc::ref(param)); - slot_bound = sigc::bind< -1, sigc::reference_wrapper >(slot_full, sigc::ref(param)); + // slot_bound = sigc::bind(slot_full, std::ref(param)); + slot_bound = sigc::bind< -1, std::reference_wrapper >(slot_full, std::ref(param)); result_stream << "Calling slot when param exists:"; slot_bound(); diff --git a/tests/test_bind_return.cc b/tests/test_bind_return.cc index 88c85ae5..96e67a80 100644 --- a/tests/test_bind_return.cc +++ b/tests/test_bind_return.cc @@ -52,8 +52,8 @@ int main(int argc, char* argv[]) // references. std::string str("guest book"); // A convoluted way to do - // sigc::bind_return(foo(), sigc::ref(str))(6) = "main"; - sigc::bind_return >(foo(), sigc::ref(str))(6) = "main"; + // sigc::bind_return(foo(), std::ref(str))(6) = "main"; + sigc::bind_return >(foo(), std::ref(str))(6) = "main"; result_stream << str; util->check_result(result_stream, "foo(int 6) main"); @@ -67,7 +67,7 @@ int main(int argc, char* argv[]) sigc::slot sl; { bar choco(-1); - sl = sigc::bind_return(foo(),sigc::ref(choco)); + sl = sigc::bind_return(foo(),std::ref(choco)); result_stream << sl(7); util->check_result(result_stream, "foo(int 7) -1"); } // auto-disconnect diff --git a/tests/test_copy_invalid_slot.cc b/tests/test_copy_invalid_slot.cc index b480a154..b67c83e0 100644 --- a/tests/test_copy_invalid_slot.cc +++ b/tests/test_copy_invalid_slot.cc @@ -30,7 +30,7 @@ int main(int argc, char* argv[]) util->check_result(result_stream, "sigc::trackable instance at " + pointer_stream.str()); pointer_stream.str(""); - sigc::slot foo = sigc::bind(sigc::ptr_fun(Foo), sigc::ref(*t)); + sigc::slot foo = sigc::bind(sigc::ptr_fun(Foo), std::ref(*t)); foo(); util->check_result(result_stream, "Foo(x)"); diff --git a/tests/test_cpp11_lambda.cc b/tests/test_cpp11_lambda.cc index e97b80e8..2e4acf83 100644 --- a/tests/test_cpp11_lambda.cc +++ b/tests/test_cpp11_lambda.cc @@ -182,9 +182,9 @@ int main(int argc, char* argv[]) result_stream << ([] (int x) -> int { return ++x * 2; }(a_outer)) << " " << a_outer; util->check_result(result_stream, "4 1"); - // gcc can't compile libsigc++ lambda expressions with sigc::ref() parameters. + // gcc can't compile libsigc++ lambda expressions with std::ref() parameters. // See https://bugzilla.gnome.org/show_bug.cgi?id=669128 - // std::cout << "((++_1)*2)(ref(a)): " << ((++_1)*2)(sigc::ref(a)); + // std::cout << "((++_1)*2)(ref(a)): " << ((++_1)*2)(std::ref(a)); // std::cout << "; a: " << a << std::endl; result_stream << ([] (std::reference_wrapper x) -> int { return ++x * 2; }(std::ref(a_outer))); result_stream << " " << a_outer; @@ -199,7 +199,7 @@ int main(int argc, char* argv[]) result_stream << " " << a_outer; util->check_result(result_stream, "8 4"); - // std::cout << "((--(*(&_1)))*2)(ref(a)): " << ((--(*(&_1)))*2)(sigc::ref(a)); + // std::cout << "((--(*(&_1)))*2)(ref(a)): " << ((--(*(&_1)))*2)(std::ref(a)); // std::cout << "; a: " << a << std::endl; result_stream << ([] (std::reference_wrapper x) -> int { return --(*(&x)) * 2; }(std::ref(a_outer))); result_stream << " " << a_outer; @@ -241,15 +241,15 @@ int main(int argc, char* argv[]) // - var() is used to create a lambda that holds a reference and is interchangable with ref() in lambda operator expressions // - cannot use std::endl without much hackery because it is defined as a template function // - cannot use "\n" without var() because arrays cannot be copied - // (sigc::ref(std::cout) << sigc::constant(1) << sigc::var("\n"))(); + // (std::ref(std::cout) << sigc::constant(1) << sigc::var("\n"))(); [](){ result_stream << 1 << "\n"; }(); util->check_result(result_stream, "1\n"); - //(sigc::ref(std::cout) << _1 << std::string("\n"))("hello world"); + //(std::ref(std::cout) << _1 << std::string("\n"))("hello world"); [](const char* a){ result_stream << a << std::string("\n"); }("hello world"); util->check_result(result_stream, "hello world\n"); - //(sigc::ref(std::cout) << sigc::static_cast_(_1) << std::string("\n"))(1.234); + //(std::ref(std::cout) << sigc::static_cast_(_1) << std::string("\n"))(1.234); [](double a){ result_stream << static_cast(a) << std::string("\n"); }(1.234); util->check_result(result_stream, "1\n"); @@ -269,7 +269,7 @@ int main(int argc, char* argv[]) sigc::slot sl1; { book guest_book("karl"); - //sl1 = (sigc::var(std::cout) << sigc::ref(guest_book) << sigc::var("\n")); + //sl1 = (sigc::var(std::cout) << std::ref(guest_book) << sigc::var("\n")); // sl1 = [&guest_book](std::ostringstream& stream){ stream << guest_book << "\n"; }; // no auto-disconnect sl1 = sigc::track_obj([&guest_book](std::ostringstream& stream){ stream << guest_book << "\n"; }, guest_book); sl1(result_stream); @@ -290,7 +290,7 @@ int main(int argc, char* argv[]) result_stream << std::bind(&foo, std::placeholders::_2, std::placeholders::_1)(1, 2); util->check_result(result_stream, "foo(int 2, int 1) 9"); - //std::cout << (sigc::group(sigc::mem_fun(&bar::test), _1, _2, _3)) (sigc::ref(the_bar), 1, 2) << std::endl; + //std::cout << (sigc::group(sigc::mem_fun(&bar::test), _1, _2, _3)) (std::ref(the_bar), 1, 2) << std::endl; // std::ref(the_bar) is not necessary. It can make the call ambiguous. // Even without std::ref() the_bar is not copied. result_stream << std::bind(std::mem_fn(&bar::test), std::placeholders::_1, @@ -320,7 +320,7 @@ int main(int argc, char* argv[]) sigc::slot sl2; { book guest_book("karl"); - //sl2 = sigc::group(&egon, sigc::ref(guest_book)); + //sl2 = sigc::group(&egon, std::ref(guest_book)); // sl2 = [&guest_book] () { egon(guest_book); }; // no auto-disconnect // sl2 = std::bind(&egon, std::ref(guest_book)); // does not compile (gcc 4.6.3) sl2 = sigc::track_obj([&guest_book] () { egon(guest_book); }, guest_book); @@ -339,7 +339,7 @@ int main(int argc, char* argv[]) // More auto-disconnect { book guest_book("charlie"); - //sl2 = sigc::group(&egon, sigc::ref(guest_book)); + //sl2 = sigc::group(&egon, std::ref(guest_book)); // sl2 = std::bind(&egon, std::ref(guest_book)); // does not compile (gcc 4.6.3) auto fn2 = std::bind(&egon, std::ref(guest_book)); //sl2 = fn2; // no auto-disconnect @@ -469,9 +469,9 @@ int main(int argc, char* argv[]) { int some_int = 0; sigc::signal some_signal; - //some_signal.connect(sigc::group(&foo,sigc::ref(some_int))); + //some_signal.connect(sigc::group(&foo,std::ref(some_int))); //some_signal.connect(std::bind(&foo_group3, std::ref(some_int))); // does not compile (gcc 4.6.3) - //some_signal.connect(sigc::bind(&foo_group3, sigc::ref(some_int))); // compiles, but we prefer std::bind() or C++11 lambda + //some_signal.connect(sigc::bind(&foo_group3, std::ref(some_int))); // compiles, but we prefer std::bind() or C++11 lambda some_signal.connect([&some_int](){ foo_group3(some_int); }); some_signal.emit(); result_stream << " " << some_int; @@ -483,10 +483,10 @@ int main(int argc, char* argv[]) sigc::signal some_signal; { bar_group4 some_bar; - //some_signal.connect(sigc::group(&foo,sigc::ref(some_bar))); + //some_signal.connect(sigc::group(&foo,std::ref(some_bar))); // disconnected automatically if some_bar goes out of scope //some_signal.connect([&some_bar](){ foo_group4(some_bar); }); // no auto-disconnect - //some_signal.connect(sigc::bind(&foo_group4, sigc::ref(some_bar))); // auto-disconnects, but we prefer C++11 lambda + //some_signal.connect(sigc::bind(&foo_group4, std::ref(some_bar))); // auto-disconnects, but we prefer C++11 lambda some_signal.connect(sigc::track_obj([&some_bar](){ foo_group4(some_bar); }, some_bar)); some_signal.emit(); util->check_result(result_stream, "foo_group4(bar_group4&)"); diff --git a/tests/test_functor_trait.cc b/tests/test_functor_trait.cc index bf3b26e4..2eb2eaa1 100644 --- a/tests/test_functor_trait.cc +++ b/tests/test_functor_trait.cc @@ -83,15 +83,15 @@ int main(int argc, char* argv[]) int k = 3; A a; result_stream << "hit all targets: "; - sigc::visit_each(print(), sigc::compose(sigc::bind(sigc::ptr_fun3(&foo), sigc::ref(a), i), sigc::ptr_fun1(&bar))); + sigc::visit_each(print(), sigc::compose(sigc::bind(sigc::ptr_fun3(&foo), std::ref(a), i), sigc::ptr_fun1(&bar))); util->check_result(result_stream, "hit all targets: other trackable int: 1 other "); result_stream << "hit all ints: "; - sigc::visit_each_type(print(), sigc::compose(sigc::bind(sigc::ptr_fun3(&foo), sigc::ref(a), j),sigc::ptr_fun1(&bar))); + sigc::visit_each_type(print(), sigc::compose(sigc::bind(sigc::ptr_fun3(&foo), std::ref(a), j),sigc::ptr_fun1(&bar))); util->check_result(result_stream, "hit all ints: int: 2 "); result_stream << "hit all trackable: "; - sigc::visit_each_type(print(), sigc::compose(sigc::bind(sigc::ptr_fun3(&foo), sigc::ref(a), k),sigc::ptr_fun1(&bar))); + sigc::visit_each_type(print(), sigc::compose(sigc::bind(sigc::ptr_fun3(&foo), std::ref(a), k),sigc::ptr_fun1(&bar))); util->check_result(result_stream, "hit all trackable: trackable "); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; diff --git a/tests/test_limit_reference.cc b/tests/test_limit_reference.cc index d72efd18..d8f35390 100644 --- a/tests/test_limit_reference.cc +++ b/tests/test_limit_reference.cc @@ -45,12 +45,12 @@ int main(int argc, char* argv[]) util->check_result(result_stream, "method()"); auto param = - sigc::bind(sigc::slot(), sigc::ref(*instance)); + sigc::bind(sigc::slot(), std::ref(*instance)); param(); util->check_result(result_stream, ""); auto ret = - sigc::bind_return(sigc::slot(), sigc::ref(*instance)); + sigc::bind_return(sigc::slot(), std::ref(*instance)); ret(); util->check_result(result_stream, ""); diff --git a/tests/test_track_obj.cc b/tests/test_track_obj.cc index a6ce6edf..b0f6e9ec 100644 --- a/tests/test_track_obj.cc +++ b/tests/test_track_obj.cc @@ -202,10 +202,10 @@ int main(int argc, char* argv[]) sigc::signal some_signal; { bar_group4 some_bar; - //some_signal.connect(sigc::group(&foo,sigc::ref(some_bar))); + //some_signal.connect(sigc::group(&foo,std::ref(some_bar))); // disconnected automatically if some_bar goes out of scope //some_signal.connect([&some_bar](){ foo_group4(some_bar); }); // no auto-disconnect - //some_signal.connect(sigc::bind(&foo_group4, sigc::ref(some_bar))); // auto-disconnects, but we prefer C++11 lambda + //some_signal.connect(sigc::bind(&foo_group4, std::ref(some_bar))); // auto-disconnects, but we prefer C++11 lambda some_signal.connect(sigc::track_obj([&some_bar](){ foo_group4(some_bar); }, some_bar)); some_signal.emit(); util->check_result(result_stream, "foo_group4(bar_group4&)"); From 5ff7fed96a83bf3e6436834bfd56d4f75d9e6290 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Thu, 10 Mar 2016 19:43:07 +0100 Subject: [PATCH 011/145] tests: Prefer the non-deprecated mem_fun(reference, func) form. --- tests/test_accumulated.cc | 4 ++-- tests/test_bind_refptr.cc | 4 ++-- tests/test_disconnect.cc | 14 +++++++------- tests/test_limit_reference.cc | 2 +- tests/test_signal.cc | 4 ++-- tests/test_trackable.cc | 2 +- tests/test_trackable_move.cc | 4 ++-- tests/test_visit_each.cc | 6 +++--- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/test_accumulated.cc b/tests/test_accumulated.cc index adbc2956..6fad26cc 100644 --- a/tests/test_accumulated.cc +++ b/tests/test_accumulated.cc @@ -89,11 +89,11 @@ int main(int argc, char* argv[]) A a; sig.connect(sigc::ptr_fun1(&foo)); - sig.connect(sigc::mem_fun1(&a, &A::foo)); + sig.connect(sigc::mem_fun1(a, &A::foo)); sig.connect(sigc::ptr_fun1(&bar)); sig_vec.connect(sigc::ptr_fun1(&foo)); - sig_vec.connect(sigc::mem_fun1(&a, &A::foo)); + sig_vec.connect(sigc::mem_fun1(a, &A::foo)); sig_vec.connect(sigc::ptr_fun1(&bar)); double dres = sig(1); diff --git a/tests/test_bind_refptr.cc b/tests/test_bind_refptr.cc index f8fe446a..a8909afe 100644 --- a/tests/test_bind_refptr.cc +++ b/tests/test_bind_refptr.cc @@ -441,10 +441,10 @@ class Test : public sigc::trackable { result_stream << "new Test; "; #ifdef ACTIVATE_BUG //See https://bugzilla.gnome.org/show_bug.cgi?id=564005#c14 - action->signal_sig1().connect(sigc::bind(sigc::mem_fun(this, &Test::on_sig1), action)); + action->signal_sig1().connect(sigc::bind(sigc::mem_fun(*this, &Test::on_sig1), action)); #else Glib::RefPtr action2(new Action); - action->signal_sig1().connect(sigc::bind(sigc::mem_fun(this, &Test::on_sig1), action2)); + action->signal_sig1().connect(sigc::bind(sigc::mem_fun(*this, &Test::on_sig1), action2)); #endif } diff --git a/tests/test_disconnect.cc b/tests/test_disconnect.cc index 048acbd0..85b16809 100644 --- a/tests/test_disconnect.cc +++ b/tests/test_disconnect.cc @@ -50,8 +50,8 @@ struct B : public sigc::trackable { B() { - sig.connect(sigc::mem_fun(this, &B::destroy)); - sig.connect(sigc::mem_fun(this, &B::boom)); + sig.connect(sigc::mem_fun(*this, &B::destroy)); + sig.connect(sigc::mem_fun(*this, &B::boom)); sig.connect(sigc::ptr_fun(&good_bye_world)); } @@ -89,7 +89,7 @@ int main(int argc, char* argv[]) { A a; - sig.connect(sigc::mem_fun1(&a, &A::foo)); + sig.connect(sigc::mem_fun1(a, &A::foo)); confoo = sig.connect(sigc::ptr_fun1(&foo)); conbar = sig.connect(sigc::ptr_fun1(&bar)); result_stream << "sig is connected to A::foo, foo, bar (size=" << sig.size() << "): "; @@ -103,7 +103,7 @@ int main(int argc, char* argv[]) util->check_result(result_stream, "sig is connected to foo, bar (size=2): foo(2) bar(2) "); A a; // iterators stay valid after further connections. - cona = sig.slots().insert(conbar, sigc::mem_fun1(&a, &A::foo)); + cona = sig.slots().insert(conbar, sigc::mem_fun1(a, &A::foo)); result_stream << "sig is connected to foo, A::foo, bar (size=" << sig.size() << "): "; sig(3); util->check_result(result_stream, @@ -128,7 +128,7 @@ int main(int argc, char* argv[]) { A a2; - sig.connect(sigc::compose(sigc::mem_fun(&a2, &A::foo), &foo)); + sig.connect(sigc::compose(sigc::mem_fun(a2, &A::foo), &foo)); result_stream << "sig is connected to compose(A::foo, foo) (size=" << sig.size() << "): "; sig(7); util->check_result(result_stream, "sig is connected to compose(A::foo, foo) (size=1): foo(7) A::foo(1) "); @@ -139,7 +139,7 @@ int main(int argc, char* argv[]) { // A slot# within a slot A a2; - sigc::slot1 setter = sigc::mem_fun(&a2, &A::foo); + sigc::slot1 setter = sigc::mem_fun(a2, &A::foo); sig.connect(sigc::compose(setter, &foo)); result_stream << "sig is connected to compose(slot1(A::foo), foo) (size=" << sig.size() << "): "; sig(9); @@ -151,7 +151,7 @@ int main(int argc, char* argv[]) { // A slot within a slot A a2; - sigc::slot setter = sigc::mem_fun(&a2, &A::foo); + sigc::slot setter = sigc::mem_fun(a2, &A::foo); sig.connect(sigc::compose(setter, &foo)); result_stream << "sig is connected to compose(slot(A::foo), foo) (size=" << sig.size() << "): "; sig(11); diff --git a/tests/test_limit_reference.cc b/tests/test_limit_reference.cc index d8f35390..3f56ded5 100644 --- a/tests/test_limit_reference.cc +++ b/tests/test_limit_reference.cc @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; auto instance = new Derived(); - sigc::slot handler = sigc::mem_fun(instance, &Derived::method); + sigc::slot handler = sigc::mem_fun(*instance, &Derived::method); handler(); util->check_result(result_stream, "method()"); diff --git a/tests/test_signal.cc b/tests/test_signal.cc index 163eb113..9c6134ef 100644 --- a/tests/test_signal.cc +++ b/tests/test_signal.cc @@ -62,7 +62,7 @@ int main(int argc, char* argv[]) { A a; sig.connect(sigc::ptr_fun1(&foo)); - sig.connect(sigc::mem_fun1(&a, &A::foo)); + sig.connect(sigc::mem_fun1(a, &A::foo)); sig.connect(sigc::ptr_fun1(&bar)); sig(1); result_stream << sig.size(); @@ -78,7 +78,7 @@ int main(int argc, char* argv[]) A a; std::string str("guest book"); sigc::signal sigstr; - sigstr.connect(sigc::mem_fun(&a, &A::bar)); + sigstr.connect(sigc::mem_fun(a, &A::bar)); sigstr(str); result_stream << str; util->check_result(result_stream, "A::foo(string 'guest book') foo was here"); diff --git a/tests/test_trackable.cc b/tests/test_trackable.cc index 159aeeb2..46302608 100644 --- a/tests/test_trackable.cc +++ b/tests/test_trackable.cc @@ -38,7 +38,7 @@ int main(int argc, char* argv[]) { my_class t; t.i = 10; - sl = sigc::mem_fun0(&t, &my_class::foo); + sl = sigc::mem_fun0(t, &my_class::foo); sl(); util->check_result(result_stream, "10"); } diff --git a/tests/test_trackable_move.cc b/tests/test_trackable_move.cc index 2d16273e..c4a25e2e 100644 --- a/tests/test_trackable_move.cc +++ b/tests/test_trackable_move.cc @@ -61,7 +61,7 @@ int main(int argc, char* argv[]) { my_class t; t.i = 10; - sl = sigc::mem_fun0(&t, &my_class::foo); + sl = sigc::mem_fun0(t, &my_class::foo); sl(); util->check_result(result_stream, "10"); @@ -70,7 +70,7 @@ int main(int argc, char* argv[]) t2.i = 15; result_stream.clear(); - sl = sigc::mem_fun0(&t2, &my_class::foo); + sl = sigc::mem_fun0(t2, &my_class::foo); sl(); util->check_result(result_stream, "15"); diff --git a/tests/test_visit_each.cc b/tests/test_visit_each.cc index a63fa435..a4a9cb9c 100644 --- a/tests/test_visit_each.cc +++ b/tests/test_visit_each.cc @@ -167,7 +167,7 @@ int main(int argc, char* argv[]) { MyClass1 my_class1("x="); - sl1 = sigc::mem_fun(&my_class1, &MyClass1::execute); + sl1 = sigc::mem_fun(my_class1, &MyClass1::execute); sl1(-2); util->check_result(result_stream, "x=-2"); @@ -179,7 +179,7 @@ int main(int argc, char* argv[]) #if SIGCTEST_CASE >= 2 { MyClass2 my_class2("y="); - sl1 = sigc::mem_fun(&my_class2, &MyClass2::execute); + sl1 = sigc::mem_fun(my_class2, &MyClass2::execute); sl1(2); util->check_result(result_stream, "y=2"); @@ -191,7 +191,7 @@ int main(int argc, char* argv[]) { MyClass1 my_class3("a="); - sl1 = ns1::my_adaptor1(sigc::mem_fun(&my_class3, &MyClass1::execute)); + sl1 = ns1::my_adaptor1(sigc::mem_fun(my_class3, &MyClass1::execute)); sl1(42); util->check_result(result_stream, "MyAdaptor1()(_A_arg1) a=42"); From 470c3b779f76bcceac9a78cf97e465622f3e7838 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Thu, 10 Mar 2016 19:47:33 +0100 Subject: [PATCH 012/145] signal: make_slot(): Use non-deprecated constructor. --- sigc++/macros/signal.h.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index b9e2a2bb..157128a0 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -379,7 +379,7 @@ FOR(1, $1,[ * @return A functor that calls emit() on this signal. */ bound_const_mem_functor$1, $1))> make_slot() const - { return bound_const_mem_functor$1, $1))>(this, &signal$1::emit); } + { return bound_const_mem_functor$1, $1))>(*this, &signal$1::emit); } /** Creates an STL-style interface for the signal's list of slots. * This interface supports iteration, insertion and removal of slots. From 0d64fd36d31ed33ef198227e1c6a6d51d8f68763 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 11 Mar 2016 10:13:06 +0100 Subject: [PATCH 013/145] test_slot(): Restructure this. To make it clearer and to keep the small tests more self-contained and separate. --- tests/test_slot.cc | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/tests/test_slot.cc b/tests/test_slot.cc index 07b35806..49c0226d 100644 --- a/tests/test_slot.cc +++ b/tests/test_slot.cc @@ -14,6 +14,8 @@ namespace { + +TestUtilities* util = nullptr; std::ostringstream result_stream; class foo @@ -36,15 +38,8 @@ class foo } }; -} // end anonymous namespace - -int main(int argc, char* argv[]) +void test_simple() { - auto util = TestUtilities::get_instance(); - - if (!util->check_command_args(argc, argv)) - return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; - // simple test sigc::slot s1 = foo(); s1(1); @@ -53,32 +48,62 @@ int main(int argc, char* argv[]) s1 = foo(); s1(2); util->check_result(result_stream, "foo(int 2)"); +} +void test_implicit_conversion() +{ // test implicit conversion sigc::slot s2 = foo(); s2(3); util->check_result(result_stream, "foo(int 3)"); +} +void test_reference() +{ // test reference sigc::slot sl1 = foo(); std::string str("guest book"); sl1(str); result_stream << str; util->check_result(result_stream, "foo(string 'guest book') foo was here"); +} +void test_operator_equals() +{ // test operator= - str = "guest book"; + std::string str = "guest book"; + sigc::slot sl1 = foo(); sigc::slot sl2; sl2 = sl1; sl1 = sl2; sl1(str); result_stream << str; util->check_result(result_stream, "foo(string 'guest book') foo was here"); +} +void test_copy_ctor() +{ // test copy ctor + sigc::slot s1 = foo(); sigc::slot s1_clone(s1); s1_clone(4); util->check_result(result_stream, "foo(int 4)"); +} + +} // end anonymous namespace + +int main(int argc, char* argv[]) +{ + util = TestUtilities::get_instance(); + + if (!util->check_command_args(argc, argv)) + return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; + + test_simple(); + test_implicit_conversion(); + test_reference(); + test_operator_equals(); + test_copy_ctor(); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From 109409f3087ae6e2bd446554be53b1faea43bc40 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 11 Mar 2016 10:36:41 +0100 Subject: [PATCH 014/145] test_signal(): Restructure this. To make it clearer and to keep the small tests more self-contained and separate. --- tests/test_signal.cc | 54 ++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/tests/test_signal.cc b/tests/test_signal.cc index 9c6134ef..c407cf70 100644 --- a/tests/test_signal.cc +++ b/tests/test_signal.cc @@ -13,6 +13,8 @@ namespace { + +TestUtilities* util = nullptr; std::ostringstream result_stream; int foo(int i) @@ -21,12 +23,6 @@ int foo(int i) return 1; } -int bar(float i) -{ - result_stream << "bar(float " << i << ") "; - return 1; -} - struct A : public sigc::trackable { int foo(int i) @@ -42,21 +38,26 @@ struct A : public sigc::trackable } }; -} // end anonymous namespace - -int main(int argc, char* argv[]) +void test_empty_signal() { - auto util = TestUtilities::get_instance(); - - if (!util->check_command_args(argc, argv)) - return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; - // signal sigc::signal sig; // emit empty signal sig(0); util->check_result(result_stream, ""); +} + +int bar(float i) +{ + result_stream << "bar(float " << i << ") "; + return 1; +} + +void test_auto_disconnection() +{ + // signal + sigc::signal sig; // connect some slots before emitting & test auto-disconnection { @@ -73,7 +74,10 @@ int main(int argc, char* argv[]) sig(2); result_stream << sig.size(); util->check_result(result_stream, "foo(int 2) bar(float 2) 2"); +} +void test_reference() +{ // test reference A a; std::string str("guest book"); @@ -82,13 +86,35 @@ int main(int argc, char* argv[]) sigstr(str); result_stream << str; util->check_result(result_stream, "A::foo(string 'guest book') foo was here"); +} +void test_make_slot() +{ // test make_slot() + sigc::signal sig; sig.connect(sigc::ptr_fun1(&foo)); + sig.connect(sigc::ptr_fun(&bar)); + sig.connect(sigc::ptr_fun(&foo)); + sigc::signal sig2; sig2.connect(sig.make_slot()); sig2(3); util->check_result(result_stream, "foo(int 3) bar(float 3) foo(int 3) "); +} + +} // end anonymous namespace + +int main(int argc, char* argv[]) +{ + util = TestUtilities::get_instance(); + + if (!util->check_command_args(argc, argv)) + return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; + + test_empty_signal(); + test_auto_disconnection(); + test_reference(); + test_make_slot(); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From 931d2265e85d808cc8a454184443b78726b1c83c Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 11 Mar 2016 10:55:03 +0100 Subject: [PATCH 015/145] test_signal: Add test_simple(). --- tests/test_signal.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_signal.cc b/tests/test_signal.cc index c407cf70..744acbe2 100644 --- a/tests/test_signal.cc +++ b/tests/test_signal.cc @@ -48,6 +48,15 @@ void test_empty_signal() util->check_result(result_stream, ""); } +void test_simple() +{ + sigc::signal sig; + sig.connect(sigc::ptr_fun(&foo)); + + sig(1); + util->check_result(result_stream, "foo(int 1) "); +} + int bar(float i) { result_stream << "bar(float " << i << ") "; @@ -112,6 +121,7 @@ int main(int argc, char* argv[]) return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; test_empty_signal(); + test_simple(); test_auto_disconnection(); test_reference(); test_make_slot(); From 2b8916b93c3d661b6b03c11557bcc1949067b8e5 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 11 Mar 2016 11:08:49 +0100 Subject: [PATCH 016/145] test_accumulated(): Restructure this. To make it clearer and to keep the small tests more self-contained and separate. --- tests/test_accumulated.cc | 48 +++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/tests/test_accumulated.cc b/tests/test_accumulated.cc index 6fad26cc..f5090ca8 100644 --- a/tests/test_accumulated.cc +++ b/tests/test_accumulated.cc @@ -15,6 +15,8 @@ namespace { + +TestUtilities* util = nullptr; std::ostringstream result_stream; struct arithmetic_mean_accumulator @@ -69,33 +71,27 @@ struct A : public sigc::trackable } }; -} // end anonymous namespace - -int main(int argc, char* argv[]) +void test_empty_signal() { - auto util = TestUtilities::get_instance(); - - if (!util->check_command_args(argc, argv)) - return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; - - sigc::signal::accumulated sig; - sigc::signal::accumulated > sig_vec; + sigc::signal::accumulated sig; + sigc::signal::accumulated > sig_vec; result_stream << "Result (empty slot list): " << sig(0); util->check_result(result_stream, "Result (empty slot list): -1"); result_stream << "Vector result (empty slot list): " << (sig_vec(0).empty() ? "empty" : "not empty"); util->check_result(result_stream, "Vector result (empty slot list): empty"); +} + +void test_mean() +{ + sigc::signal::accumulated sig; A a; sig.connect(sigc::ptr_fun1(&foo)); sig.connect(sigc::mem_fun1(a, &A::foo)); sig.connect(sigc::ptr_fun1(&bar)); - sig_vec.connect(sigc::ptr_fun1(&foo)); - sig_vec.connect(sigc::mem_fun1(a, &A::foo)); - sig_vec.connect(sigc::ptr_fun1(&bar)); - double dres = sig(1); result_stream << "Mean accumulator: Result (i=1): " << std::fixed << std::setprecision(3) << dres; @@ -107,7 +103,17 @@ int main(int argc, char* argv[]) << std::fixed << std::setprecision(3) << dres; util->check_result(result_stream, "foo: 34, A::foo: 206, bar: 52, Mean accumulator: Plain Result (i=11): 97.333"); +} +void test_vector_accumulator() +{ + sigc::signal::accumulated > sig_vec; + + A a; + sig_vec.connect(sigc::ptr_fun(&foo)); + sig_vec.connect(sigc::mem_fun(a, &A::foo)); + sig_vec.connect(sigc::ptr_fun(&bar)); + auto res1 = sig_vec(1); result_stream << "Vector accumulator: Result (i=1): "; for (auto num : res1) @@ -121,6 +127,20 @@ int main(int argc, char* argv[]) result_stream << num << " "; util->check_result(result_stream, "foo: 10, A::foo: 46, bar: 12, Vector accumulator: Result (i=3): 10 46 12 "); +} + +} // end anonymous namespace + +int main(int argc, char* argv[]) +{ + util = TestUtilities::get_instance(); + + if (!util->check_command_args(argc, argv)) + return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; + + test_empty_signal(); + test_mean(); + test_vector_accumulator(); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From dc006c7e3ecda56b926abd043a68726fafaf0a34 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 11 Mar 2016 14:29:51 +0100 Subject: [PATCH 017/145] 2.7.2 --- NEWS | 21 +++++++++++++++++++++ configure.ac | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 13518a8c..d807f070 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,24 @@ +2.7.2 (unstable): + +* Deprecate sigc::ref() and sigc::reference_wrapper(), + adding support instead for std::ref(), std::cref(), + and std::reference_wrapper(). + (Murray Cumming) +* mem_fun(): Deprecate mem_fun(pointer, func). + Leaving just mem_fun(reference, func). + Please let us know if you disagree strongly with this. + (Murray Cumming) Bug #763215 +* Make all operator bool() explicit. (A C++11 feature.) + (Murray Cumming) +* Build: Remove some now-unnecessary configure checks. + But please let us know if this causes problems for you. + (Murray Cumming) Bug #762065 (Kjell Ahlstedt) +* Build: Update MSVC project. + (Chun-wei Fan) +* Documentation: Improve the documentation of mem_fun(), making it clear that + mem_fun() does not return a slot. + (Kjell Ahlstedt) + 2.7.1 (unstable): * signal: Add a moving connect() method, taking an rvalue reference diff --git a/configure.ac b/configure.ac index d89b1398..68934842 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ ## You should have received a copy of the GNU Lesser General Public License ## along with this library. If not, see . -AC_INIT([libsigc++], [2.7.1], +AC_INIT([libsigc++], [2.7.2], [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B], [libsigc++], [http://libsigc.sourceforge.net/]) AC_PREREQ([2.59]) From 5573e97dd39e0f0c3f2ba6a3d5e56f21895b8796 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 12 Mar 2016 15:53:00 +0100 Subject: [PATCH 018/145] slot: Allow sigc::slot declaration, like std::function. By adding a template specialization that repeats each slot*<> declarartion, though it would be good to avoid the repetition. Bug 763393 --- sigc++/functors/macros/slot.h.m4 | 68 ++++++++++++++++++++++++++++++++ tests/test_slot.cc | 13 ++++++ 2 files changed, 81 insertions(+) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index 5c6436ca..891bf3d4 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -254,6 +254,74 @@ public: } }; + +/** Convenience wrapper for the numbered sigc::slot$1 template. + * See the base class for useful methods. + * This is the template specialization of the unnumbered sigc::slot + * template for $1 argument(s), specialized for different numbers of arguments + * This is possible because the template has default (nil) template types. +dnl * +dnl * @ingroup slot + * + * This specialization allow use of the sigc::slot syntax, + */ +template +class slot + : public slot$1 +{ +public: + typedef slot$1 parent_type; + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template + slot(const T_functor& _A_func) + : parent_type(_A_func) {} + + // Without static_cast parent_type(const T_functor& _A_func) + // is called instead of the copy constructor. + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + slot(const slot& src) + : parent_type(static_cast(src)) {} + + // Without static_cast parent_type(const T_functor& _A_func) + // is called instead of the move constructor. + /** Constructs a slot, moving an existing one. + * If @p src is connected to a parent (e.g. a signal), it is copied, not moved. + * @param src The existing slot to move or copy. + */ + slot(slot&& src) + : parent_type(std::move(static_cast(src))) {} + + /** Overrides this slot, making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot& operator=(const slot& src) + { + parent_type::operator=(src); + return *this; + } + + /** Overrides this slot, making a move from another slot. + * If @p src is connected to a parent (e.g. a signal), it is copied, not moved. + * @param src The slot from which to move or copy. + * @return @p this. + */ + slot& operator=(slot&& src) + { + parent_type::operator=(std::move(src)); + return *this; + } +}; + + + ifelse($1, $2,[dnl #ifndef DOXYGEN_SHOULD_SKIP_THIS //template specialization of visitor<>::do_visit_each<>(action, functor): diff --git a/tests/test_slot.cc b/tests/test_slot.cc index 49c0226d..40e55dc9 100644 --- a/tests/test_slot.cc +++ b/tests/test_slot.cc @@ -50,6 +50,18 @@ void test_simple() util->check_result(result_stream, "foo(int 2)"); } +void test_std_function_style_syntax() +{ + // simple test + sigc::slot s1 = foo(); + s1(1); + util->check_result(result_stream, "foo(int 1)"); + + s1 = foo(); + s1(2); + util->check_result(result_stream, "foo(int 2)"); +} + void test_implicit_conversion() { // test implicit conversion @@ -100,6 +112,7 @@ int main(int argc, char* argv[]) return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; test_simple(); + test_std_function_style_syntax(); test_implicit_conversion(); test_reference(); test_operator_equals(); From a625175a289339da59fee39c7b22e20432f152b7 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 12 Mar 2016 16:01:51 +0100 Subject: [PATCH 019/145] signal: Allow sigc::signal declaration, like std::function. By adding template specializations that repeats the signal* template declarations, though it would be good to avoid the repetition. Bug 763393 --- sigc++/macros/signal.h.m4 | 93 +++++++++++++++++++++++++++++++++++++++ tests/test_signal.cc | 10 +++++ 2 files changed, 103 insertions(+) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 157128a0..98a28d54 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -555,6 +555,99 @@ ifelse($1, $2,[dnl } }; +/** + * This specialization allow use of the sigc::signal syntax, + */ +template +class signal + : public signal$1 +{ +public: +ifelse($1, $2,[dnl + /** Convenience wrapper for the numbered sigc::signal# templates. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. + * + * An accumulator is a functor that uses a pair of special iterators + * to step through a list of slots and calculate a return value + * from the results of the slot invokations. The iterators' operator*() + * executes the slot. The return value is buffered, so that in an expression + * like @code a = (*i) * (*i); @endcode the slot is executed only once. + * The accumulator must define its return value as @p result_type. + * + * @par Example 1: + * This accumulator calculates the arithmetic mean value: + * @code + * struct arithmetic_mean_accumulator + * { + * typedef double result_type; + * template + * result_type operator()(T_iterator first, T_iterator last) const + * { + * result_type value_ = 0; + * int n_ = 0; + * for (; first != last; ++first, ++n_) + * value_ += *first; + * return value_ / n_; + * } + * }; + * @endcode + * + * @par Example 2: + * This accumulator stops signal emission when a slot returns zero: + * @code + * struct interruptable_accumulator + * { + * typedef bool result_type; + * template + * result_type operator()(T_iterator first, T_iterator last) const + * { + * for (; first != last; ++first, ++n_) + * if (!*first) return false; + * return true; + * } + * }; + * @endcode + * + * @ingroup signal +],[ + /** Convenience wrapper for the numbered sigc::signal$1 template. + * Like sigc::signal but the additional template parameter @e T_accumulator + * defines the accumulator type that should be used. +])dnl + */ + template + class accumulated + : public signal$1 + { + public: + accumulated() {} + accumulated(const accumulated& src) + : signal$1(src) {} + }; + + signal() {} + + signal(const signal& src) + : signal$1(src) {} + + signal(signal&& src) + : signal$1(std::move(src)) {} + + signal& operator=(const signal& src) + { + signal$1::operator=(src); + return *this; + } + + signal& operator=(signal&& src) + { + signal$1::operator=(std::move(src)); + return *this; + } +}; + + ]) divert(0) diff --git a/tests/test_signal.cc b/tests/test_signal.cc index 744acbe2..bdd50dc9 100644 --- a/tests/test_signal.cc +++ b/tests/test_signal.cc @@ -111,6 +111,15 @@ void test_make_slot() util->check_result(result_stream, "foo(int 3) bar(float 3) foo(int 3) "); } +void test_std_function_style_syntax() +{ + sigc::signal sig; + sig.connect(sigc::ptr_fun(&foo)); + + sig(1); + util->check_result(result_stream, "foo(int 1) "); +} + } // end anonymous namespace int main(int argc, char* argv[]) @@ -125,6 +134,7 @@ int main(int argc, char* argv[]) test_auto_disconnection(); test_reference(); test_make_slot(); + test_std_function_style_syntax(); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From 7df87c407ca9f465670c697bf0e0582e8646252a Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 12 Mar 2016 16:51:49 +0100 Subject: [PATCH 020/145] slot.h.m4: Slight reorganisation of m4 code. --- sigc++/functors/macros/slot.h.m4 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index 891bf3d4..e0cf8c6d 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -189,7 +189,8 @@ FOR(1,$1,[ * * @ingroup slot */ -template ],[dnl +template +class slot],[dnl /** Convenience wrapper for the numbered sigc::slot$1 template. * See the base class for useful methods. @@ -199,8 +200,8 @@ template ],[dnl dnl * dnl * @ingroup slot */ -template ]) -class slot ifelse($1, $2,,[]) +template +class slot ]) : public slot$1 { public: From a3d87bfacfdcc703369bbb865ffb5b48f5c9c37f Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 12 Mar 2016 17:09:49 +0100 Subject: [PATCH 021/145] signal.h.m4: Slight reorganization of m4 code. --- sigc++/macros/signal.h.m4 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 98a28d54..b765e23a 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -455,7 +455,8 @@ FOR(1,$1,[ * * @ingroup signal */ -template ],[dnl +template +class signal],[dnl /** Convenience wrapper for the numbered sigc::signal$1 template. * See the base class for useful methods. @@ -466,8 +467,8 @@ ifelse($1, $2,[dnl * @ingroup signal ])dnl */ -template ]) -class signal ifelse($1, $2,,[]) +template +class signal ifelse($1, $2,,[])]) : public signal$1 { public: From 88d6ef1ebf82ee00dcfc1d91a80425f97e353282 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 12 Mar 2016 17:06:19 +0100 Subject: [PATCH 022/145] signal: Use the slot syntax. --- sigc++/macros/signal.h.m4 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index b765e23a..bc76c0de 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -30,7 +30,7 @@ struct signal_emit$1 { typedef signal_emit$1 self_type; typedef typename T_accumulator::result_type result_type; - typedef slot slot_type; + typedef slot slot_type; typedef internal::slot_iterator_buf slot_iterator_buf_type; typedef internal::slot_reverse_iterator_buf slot_reverse_iterator_buf_type; typedef signal_impl::const_iterator_type iterator_type; @@ -112,7 +112,7 @@ struct signal_emit$1 { typedef signal_emit$1 self_type; typedef T_return result_type; - typedef slot slot_type; + typedef slot slot_type; typedef signal_impl::const_iterator_type iterator_type; typedef typename slot_type::call_type call_type; @@ -216,7 +216,7 @@ struct signal_emit$1 { typedef signal_emit$1 self_type; typedef void result_type; - typedef slot slot_type; + typedef slot slot_type; typedef signal_impl::const_iterator_type iterator_type; typedef ifelse($1,0,void (*call_type)(slot_rep*),typename slot_type::call_type call_type); @@ -310,7 +310,7 @@ class signal$1 public: typedef internal::signal_emit$1 emitter_type; typedef typename emitter_type::result_type result_type; - typedef slot slot_type; + typedef slot slot_type; typedef slot_list slot_list_type; typedef typename slot_list_type::iterator iterator; typedef typename slot_list_type::const_iterator const_iterator; From 2afeab2c25b5224beb65fb84b519414971a6c9e6 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 12 Mar 2016 17:40:47 +0100 Subject: [PATCH 023/145] signal: Document older syntax as deprecated. --- sigc++/macros/signal.h.m4 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index bc76c0de..99f66f08 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -453,6 +453,11 @@ FOR(1,$1,[ * sig.emit(19); * @endcode * + * @deprecated Please use the syntax similar to that used by std::function<>: + * @code + * sigc::slot some_slot; + * @endcode + * * @ingroup signal */ template @@ -462,6 +467,11 @@ class signal],[dnl * See the base class for useful methods. * This is the template specialization of the unnumbered sigc::signal * template for $1 argument(s). + * + * @deprecated Please use the syntax similar to that used by std::function<>: + * @code + * sigc::slot some_slot; + * @endcode ifelse($1, $2,[dnl * * @ingroup signal From d29b0ef0db248e180a00f62b3c0d458ce5992b2e Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 12 Mar 2016 17:45:47 +0100 Subject: [PATCH 024/145] slot: Document older syntax as deprecated --- sigc++/functors/macros/slot.h.m4 | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index e0cf8c6d..f57083f5 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -185,7 +185,12 @@ FOR(1,$1,[ * * sigc::slot<> is similar to std::function<>. If you're going to assign the * resulting functor to a sigc::slot or connect it to a sigc::signal, it's better - * not to use std::function. It would become un unnecessary extra wrapper. + * not to use std::function. It would become an unnecessary extra wrapper. + * + * @deprecated Please use the syntax similar to that used by std::function<>: + * @code + * sigc::slot some_slot; + * @endcode * * @ingroup slot */ @@ -197,6 +202,12 @@ class slot],[dnl * This is the template specialization of the unnumbered sigc::slot * template for $1 argument(s), specialized for different numbers of arguments * This is possible because the template has default (nil) template types. + * + * @deprecated Please use the syntax similar to that used by std::function<>: + * @code + * sigc::slot some_slot; + * @endcode + * dnl * dnl * @ingroup slot */ From 6e5eee0c4d6b73babecb03089bdb6a4c3e80d811 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Tue, 15 Mar 2016 16:32:50 +0100 Subject: [PATCH 025/145] Implement slot with variadic template * sigc++/functors/macros/slot.h.m4: Implement the function-style slot with variadic template, as in libsigc++-3.0. The primary slot_call and the slot specialization are copied from libsigc++-3.0. A slot_call specialization is added. Bug #763393 --- sigc++/functors/macros/slot.h.m4 | 240 ++++++++++++++++++++++--------- 1 file changed, 171 insertions(+), 69 deletions(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index f57083f5..e0632e45 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -266,74 +266,6 @@ public: } }; - -/** Convenience wrapper for the numbered sigc::slot$1 template. - * See the base class for useful methods. - * This is the template specialization of the unnumbered sigc::slot - * template for $1 argument(s), specialized for different numbers of arguments - * This is possible because the template has default (nil) template types. -dnl * -dnl * @ingroup slot - * - * This specialization allow use of the sigc::slot syntax, - */ -template -class slot - : public slot$1 -{ -public: - typedef slot$1 parent_type; - - inline slot() {} - - /** Constructs a slot from an arbitrary functor. - * @param _A_func The desired functor the new slot should be assigned to. - */ - template - slot(const T_functor& _A_func) - : parent_type(_A_func) {} - - // Without static_cast parent_type(const T_functor& _A_func) - // is called instead of the copy constructor. - /** Constructs a slot, copying an existing one. - * @param src The existing slot to copy. - */ - slot(const slot& src) - : parent_type(static_cast(src)) {} - - // Without static_cast parent_type(const T_functor& _A_func) - // is called instead of the move constructor. - /** Constructs a slot, moving an existing one. - * If @p src is connected to a parent (e.g. a signal), it is copied, not moved. - * @param src The existing slot to move or copy. - */ - slot(slot&& src) - : parent_type(std::move(static_cast(src))) {} - - /** Overrides this slot, making a copy from another slot. - * @param src The slot from which to make a copy. - * @return @p this. - */ - slot& operator=(const slot& src) - { - parent_type::operator=(src); - return *this; - } - - /** Overrides this slot, making a move from another slot. - * If @p src is connected to a parent (e.g. a signal), it is copied, not moved. - * @param src The slot from which to move or copy. - * @return @p this. - */ - slot& operator=(slot&& src) - { - parent_type::operator=(std::move(src)); - return *this; - } -}; - - - ifelse($1, $2,[dnl #ifndef DOXYGEN_SHOULD_SKIP_THIS //template specialization of visitor<>::do_visit_each<>(action, functor): @@ -518,8 +450,74 @@ struct typed_slot_rep : public slot_rep } }; - FOR(0,CALL_SIZE,[[SLOT_CALL(%1)]])dnl + +/** Abstracts functor execution. + * call_it() invokes a functor of type @e T_functor with a list of + * parameters whose types are given by the template arguments. + * address() forms a function pointer from call_it(). + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * - @e T_arg Argument types used in the definition of call_it(). + * + */ +template +struct slot_call +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @param _A_a Arguments to be passed on to the functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep, type_trait_take_t... a_) + { + using typed_slot = typed_slot_rep; + typed_slot *typed_rep = static_cast(rep); + return (typed_rep->functor_).template operator()...> + (a_...); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast(&call_it); } +}; + +/** Abstracts functor execution. + * call_it() invokes a functor without parameters of type @e T_functor. + * address() forms a function pointer from call_it(). + * + * This is a specialization for functors without parameters. + * + * The following template arguments are used: + * - @e T_functor The functor type. + * - @e T_return The return type of call_it(). + * + */ +template +struct slot_call +{ + /** Invokes a functor of type @p T_functor. + * @param rep slot_rep object that holds a functor of type @p T_functor. + * @return The return values of the functor invocation. + */ + static T_return call_it(slot_rep* rep) + { + using typed_slot = typed_slot_rep; + typed_slot *typed_rep = static_cast(rep); + return (typed_rep->functor_)(); + } + + /** Forms a function pointer from call_it(). + * @return A function pointer formed from call_it(). + */ + static hook address() + { return reinterpret_cast(&call_it); } +}; + } /* namespace internal */ @@ -527,6 +525,110 @@ FOR(0,CALL_SIZE,[[SLOT_N(%1,CALL_SIZE)]]) SLOT(CALL_SIZE,CALL_SIZE) FOR(0,eval(CALL_SIZE-1),[[SLOT(%1,CALL_SIZE)]]) +/** Converts an arbitrary functor to a unified type which is opaque. + * sigc::slot itself is a functor or, to be more precise, a closure. It contains + * a single, arbitrary functor (or closure) that is executed in operator()(). + * + * The template arguments determine the function signature of operator()(): + * - @e T_return The return type of operator()(). + * - @e T_arg Argument types used in the definition of operator()(). + * + * For instance, to declare a slot that returns void and takes two parameters + * of bool and int: + * @code + * sigc::slot some_slot; + * @endcode + * + * Alternatively, you may use this syntax: + * @code + * sigc::slot some_slot; + * @endcode + * + * To use, simply assign the desired functor to the slot. If the functor + * is not compatible with the parameter list defined with the template + * arguments then compiler errors are triggered. When called, the slot + * will invoke the functor with minimal copies. + * block() and unblock() can be used to block the functor's invocation + * from operator()() temporarily. + * + * @ingroup slot + */ +template +class slot + : public slot_base +{ +public: + using result_type = T_return; + //TODO: using arg_type_ = type_trait_take_t; + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +private: + using rep_type = internal::slot_rep; +public: + using call_type = T_return (*)(rep_type*, type_trait_take_t...); +#endif + + /** Invoke the contained functor unless slot is in blocking state. + * @param _A_a Arguments to be passed on to the functor. + * @return The return value of the functor invocation. + */ + inline T_return operator()(type_trait_take_t... _A_a) const + { + if (!empty() && !blocked()) + return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); + return T_return(); + } + + inline slot() {} + + /** Constructs a slot from an arbitrary functor. + * @param _A_func The desired functor the new slot should be assigned to. + */ + template + slot(const T_functor& _A_func) + : slot_base(new internal::typed_slot_rep(_A_func)) + { + //The slot_base:: is necessary to stop the HP-UX aCC compiler from being confused. murrayc. + slot_base::rep_->call_ = internal::slot_call::address(); + } + + /** Constructs a slot, copying an existing one. + * @param src The existing slot to copy. + */ + slot(const slot& src) + : slot_base(src) + {} + + /** Constructs a slot, moving an existing one. + * If @p src is connected to a parent (e.g. a signal), it is copied, not moved. + * @param src The existing slot to move or copy. + */ + slot(slot&& src) + : slot_base(std::move(src)) + {} + + /** Overrides this slot, making a copy from another slot. + * @param src The slot from which to make a copy. + * @return @p this. + */ + slot& operator=(const slot& src) + { + slot_base::operator=(src); + return *this; + } + + /** Overrides this slot, making a move from another slot. + * If @p src is connected to a parent (e.g. a signal), it is copied, not moved. + * @param src The slot from which to move or copy. + * @return @p this. + */ + slot& operator=(slot&& src) + { + slot_base::operator=(std::move(src)); + return *this; + } +}; + } /* namespace sigc */ #ifdef SIGC_NIL_HAS_BEEN_PUSHED From 60154aa1c5f1d4eddc2bffb84799628756dfb0b5 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Tue, 15 Mar 2016 12:46:10 +0100 Subject: [PATCH 026/145] Reference docs: Main page: Mention CMake. And generally make this like the version in master for libsigc++-3.0. --- sigc++/sigc++.h | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/sigc++/sigc++.h b/sigc++/sigc++.h index 24d34242..b37a8893 100644 --- a/sigc++/sigc++.h +++ b/sigc++/sigc++.h @@ -65,17 +65,35 @@ * g++ program.cc -o program `pkg-config --cflags --libs sigc++-2.0` * @endcode * + * @subsection autotools Using Autotools + * * Alternatively, if using autoconf, use the following in @c configure.ac: * @code - * PKG_CHECK_MODULES([LIBSIGC], [sigc++-2.0]) + * PKG_CHECK_MODULES([DEPS], [sigc++-2.0]) * @endcode - * Then use the generated @c LIBSIGC_CFLAGS and @c LIBSIGC_LIBS variables + * Then use the generated @c DEPS_CFLAGS and @c DEPS_LIBS variables * in the project @c Makefile.am files. For example: * @code - * program_CPPFLAGS = $(LIBSIGC_CFLAGS) - * program_LDADD = $(LIBSIGC_LIBS) + * yourprogram_CPPFLAGS = $(DEPS_CFLAGS) + * yourprogram_LDADD = $(DEPS_LIBS) * @endcode * + * Your @c PKG_CHECK_MODULES() call should also mention any other libraries that + * you need to use via pkg-config. + * + * @subsection cmake Using CMake + * + * If using CMake, use the following in @c CMakeList.txt: + * @code + * include(FindPkgConfig) + * pkg_check_modules(DEPS REQUIRED sigc++-2.0) + * include_directories(${DEPS_INCLUDE_DIRS}) + * target_link_libraries(yourprogram ${DEPS_LIBRARIES}) + * @endcode + * + * Your @c pkg_check_modules() call should also mention any other libraries that + * you need to use via pkg-config. + * * @section scope Scope of Documentation * * libsigc++ contains many template functions and template classes/structs, From 9f6ecb3c5f9da42a3f19872705342b28f094687b Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 16 Mar 2016 12:32:07 +0100 Subject: [PATCH 027/145] test_retype: Break into smaller tests. --- tests/test_retype.cc | 60 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/tests/test_retype.cc b/tests/test_retype.cc index 848731f5..647afe0e 100644 --- a/tests/test_retype.cc +++ b/tests/test_retype.cc @@ -10,6 +10,8 @@ namespace { + +TestUtilities* util = nullptr; std::ostringstream result_stream; struct foo : public sigc::trackable @@ -32,40 +34,76 @@ void bar(short s) result_stream << "bar(short " << s << ")"; } -} // end anonymous namespace - -int main(int argc, char* argv[]) +void test_member_int() { - auto util = TestUtilities::get_instance(); - - if (!util->check_command_args(argc, argv)) - return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; - foo foo_; result_stream << sigc::retype(sigc::mem_fun(foo_, &foo::test_int))(1.234f); util->check_result(result_stream, "foo::test_int(int 1) 1.5"); +} +void test_member_float() +{ + foo foo_; result_stream << sigc::retype(sigc::mem_fun(foo_, &foo::test_float))(5); util->check_result(result_stream, "foo::test_float(float 5) 25"); +} +void test_ptr_fun() +{ sigc::retype(sigc::ptr_fun(&bar))(6.789f); util->check_result(result_stream, "bar(short 6)"); +} +void test_member_int_with_slot() +{ + foo foo_; sigc::slot s1 = sigc::retype(sigc::mem_fun(foo_, &foo::test_int)); - sigc::slot s2 = sigc::retype(sigc::mem_fun(foo_, &foo::test_float)); - sigc::slot s3 = sigc::retype(sigc::ptr_fun(&bar)); result_stream << s1(1.234f); util->check_result(result_stream, "foo::test_int(int 1) 1.5"); +} +void test_member_float_with_slot() +{ + foo foo_; + sigc::slot s2 = sigc::retype(sigc::mem_fun(foo_, &foo::test_float)); result_stream << s2(5); util->check_result(result_stream, "foo::test_float(float 5) 25"); +} +void test_ptr_fun_with_slot() +{ + sigc::slot s3 = sigc::retype(sigc::ptr_fun(&bar)); s3(6.789); util->check_result(result_stream, "bar(short 6)"); +} - s2 = sigc::retype(s1); +void test_retype_slot() +{ + foo foo_; + sigc::slot s1 = sigc::retype(sigc::mem_fun(foo_, &foo::test_int)); + sigc::slot s2 = sigc::retype(s1); result_stream << s2(5); util->check_result(result_stream, "foo::test_int(int 5) 7.5"); +} + +} // end anonymous namespace + +int main(int argc, char* argv[]) +{ + util = TestUtilities::get_instance(); + + if (!util->check_command_args(argc, argv)) + return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; + + test_member_int(); + test_member_float(); + test_ptr_fun(); + + test_member_int_with_slot(); + test_member_float_with_slot(); + test_ptr_fun_with_slot(); + + test_retype_slot(); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From 9e5e38c40636be148e1dd60eb3b167d05d84f4be Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 16 Mar 2016 12:35:55 +0100 Subject: [PATCH 028/145] test_retype: Add test of R(Args...) syntax. --- tests/test_retype.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_retype.cc b/tests/test_retype.cc index 647afe0e..95de57c2 100644 --- a/tests/test_retype.cc +++ b/tests/test_retype.cc @@ -86,6 +86,14 @@ void test_retype_slot() util->check_result(result_stream, "foo::test_int(int 5) 7.5"); } +void test_std_function_style_syntax() +{ + foo foo_; + sigc::slot s1 = sigc::retype(sigc::mem_fun(foo_, &foo::test_int)); + result_stream << s1(1.234f); + util->check_result(result_stream, "foo::test_int(int 1) 1.5"); +} + } // end anonymous namespace int main(int argc, char* argv[]) @@ -105,5 +113,7 @@ int main(int argc, char* argv[]) test_retype_slot(); + test_std_function_style_syntax(); + return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From 351f29b8828384ef0bd61e5fcb346d6e3d76eff4 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 16 Mar 2016 13:32:41 +0100 Subject: [PATCH 029/145] Update NEWS from 2.8.0 --- NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index d807f070..987541b8 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ + +2.8.0 (stable) + +* Documentation: Mention use with CMake. + 2.7.2 (unstable): * Deprecate sigc::ref() and sigc::reference_wrapper(), diff --git a/configure.ac b/configure.ac index 68934842..4ca1da9e 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ ## You should have received a copy of the GNU Lesser General Public License ## along with this library. If not, see . -AC_INIT([libsigc++], [2.7.2], +AC_INIT([libsigc++], [2.8.0], [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B], [libsigc++], [http://libsigc.sourceforge.net/]) AC_PREREQ([2.59]) From 030488b6cac7dd3d0b37b8173e0370aa8496a7c3 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 16 Mar 2016 13:53:20 +0100 Subject: [PATCH 030/145] 2.9.1 --- NEWS | 11 ++++++++++- configure.ac | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 987541b8..e5da7cff 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,14 @@ +2.9.1 (unstable): -2.8.0 (stable) +* slot: Allow sigc::slot syntax, like std::function, + deprecating the sigc::slot syntax. + (Murray Cumming, Kjell Ahlstedt) Bug #763393 +* signal: Allow sigc::signal syntax, like std::function, + deprecating the sigc::signal syntax. + (Murray Cumming, Kjell Ahlstedt) Bug #763393 + + +2.8.0 (stable): * Documentation: Mention use with CMake. diff --git a/configure.ac b/configure.ac index 4ca1da9e..15a6c329 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ ## You should have received a copy of the GNU Lesser General Public License ## along with this library. If not, see . -AC_INIT([libsigc++], [2.8.0], +AC_INIT([libsigc++], [2.9.1], [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B], [libsigc++], [http://libsigc.sourceforge.net/]) AC_PREREQ([2.59]) From 0093540d87e8a58976c7d3c7710d7ce40edd3399 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 11:08:45 +0200 Subject: [PATCH 031/145] docs: Slots: Add section titles to break it up. --- sigc++/functors/slot_base.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sigc++/functors/slot_base.h b/sigc++/functors/slot_base.h index d9697519..41d3ebb0 100644 --- a/sigc++/functors/slot_base.h +++ b/sigc++/functors/slot_base.h @@ -182,7 +182,9 @@ struct SIGC_API slot_do_unbind * A slot can be constructed from any function object or function, regardless of * whether it is a global function, a member method, static, or virtual. * - * Use the sigc::mem_fun() and sigc::ptr_fun() template functions to get a sigc::slot, like so: + * @section slots-creating Creating Slots + * + * Use the sigc::mem_fun() or sigc::ptr_fun() template functions to get a sigc::slot, like so: * @code * sigc::slot sl = sigc::mem_fun(someobj, &SomeClass::somemethod); * @endcode @@ -199,6 +201,8 @@ struct SIGC_API slot_do_unbind * * You can also pass slots as method parameters where you might normally pass a function pointer. * + * @section slots-auto auto + * * sigc::mem_fun() and sigc::ptr_fun() return functors, but those functors are * not slots. * @code @@ -209,6 +213,8 @@ struct SIGC_API slot_do_unbind * auto sl = sigc::mem_fun(someobj, &SomeClass::somemethod); // Not a slot! * @endcode * + * @section slots-with-lambdas C++ Lambdas + * * A C++11 lambda expression is a functor (function object). It is automatically * wrapped in a slot, if it is connected to a signal. * @code From 1675c09064e1ba2505b676effe6065ee2db3fb62 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 11:24:21 +0200 Subject: [PATCH 032/145] test_mem_fun: Rearrange into individual test functions. --- tests/test_mem_fun.cc | 187 ++++++++++++++++++++++-------------------- 1 file changed, 96 insertions(+), 91 deletions(-) diff --git a/tests/test_mem_fun.cc b/tests/test_mem_fun.cc index 32e568bf..1b32ae6e 100644 --- a/tests/test_mem_fun.cc +++ b/tests/test_mem_fun.cc @@ -8,24 +8,21 @@ #include #include -//TODO: put something like #ifndef FORTE (some older version, I think) or AIX xlC... #else ... #endif around: +// TODO: put something like #ifndef FORTE (some older version, I think) or AIX xlC... #else ... +// #endif around: #define ENABLE_TEST_OF_OVERLOADED_FUNCTIONS 0 namespace { + +TestUtilities* util = nullptr; std::ostringstream result_stream; struct test { - void foo(short i1) - { - result_stream << "test::foo(short " << i1 << ')'; - } + void foo(short i1) { result_stream << "test::foo(short " << i1 << ')'; } - void foo_const(int i1) const - { - result_stream << "test::foo_const(int " << i1 << ')'; - } + void foo_const(int i1) const { result_stream << "test::foo_const(int " << i1 << ')'; } void foo_volatile(float i1) volatile { @@ -37,10 +34,7 @@ struct test result_stream << "test::foo_const_volatile(double " << i1 << ')'; } - void foo_overloaded(char i1) - { - result_stream << "test::foo_overloaded(char " << int(i1) << ')'; - } + void foo_overloaded(char i1) { result_stream << "test::foo_overloaded(char " << int(i1) << ')'; } #if ENABLE_TEST_OF_OVERLOADED_FUNCTIONS void foo_overloaded(short i1) @@ -58,105 +52,116 @@ struct test } // end anonymous namespace -int main(int argc, char* argv[]) +void test_non_const() { - auto util = TestUtilities::get_instance(); - - if (!util->check_command_args(argc, argv)) - return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; - - { /* test non-const */ - test t; - sigc::mem_fun(&test::foo)(t, 1); // on reference - util->check_result(result_stream, "test::foo(short 1)"); + test t; + sigc::mem_fun (&test::foo)(t, 1); + util->check_result(result_stream, "test::foo(short 1)"); +} - sigc::mem_fun(&test::foo)(&t, 1); // on pointer - util->check_result(result_stream, "test::foo(short 1)"); - } - { /* test const */ - test t; - sigc::mem_fun(&test::foo_const)(t, 2); - util->check_result(result_stream, "test::foo_const(int 2)"); +void test_const() +{ + test t; + sigc::mem_fun (&test::foo_const)(t, 2); + util->check_result(result_stream, "test::foo_const(int 2)"); +} - sigc::mem_fun(&test::foo_const)(&t, 2); - util->check_result(result_stream, "test::foo_const(int 2)"); - } - { /* test const with const object */ - const auto t = test(); - sigc::mem_fun(&test::foo_const)(t, 3); - util->check_result(result_stream, "test::foo_const(int 3)"); +void test_const_with_const_object() +{ + const auto t = test(); + sigc::mem_fun (&test::foo_const)(t, 3); + util->check_result(result_stream, "test::foo_const(int 3)"); +} - sigc::mem_fun(&test::foo_const)(&t, 3); - util->check_result(result_stream, "test::foo_const(int 3)"); - } - { /* test non-const volatile */ - test t; - sigc::mem_fun(&test::foo_volatile)(t, 4); // on reference - util->check_result(result_stream, "test::foo_volatile(float 4)"); +void test_non_const_volatile() +{ + test t; + sigc::mem_fun (&test::foo_volatile)(t, 4); + util->check_result(result_stream, "test::foo_volatile(float 4)"); +} - sigc::mem_fun(&test::foo_volatile)(&t, 4); // on pointer - util->check_result(result_stream, "test::foo_volatile(float 4)"); - } - { /* test const volatile */ - test t; - sigc::mem_fun(&test::foo_const_volatile)(t, 5); // on reference - util->check_result(result_stream, "test::foo_const_volatile(double 5)"); +void test_const_volatile() +{ + test t; + sigc::mem_fun (&test::foo_const_volatile)(t, 5); + util->check_result(result_stream, "test::foo_const_volatile(double 5)"); +} - sigc::mem_fun(&test::foo_const_volatile)(&t, 5); // on pointer - util->check_result(result_stream, "test::foo_const_volatile(double 5)"); - } - { /* test const volatile with const object */ - const auto t = test(); - sigc::mem_fun(&test::foo_const_volatile)(t, 6); // on reference - util->check_result(result_stream, "test::foo_const_volatile(double 6)"); +void test_const_volatile_with_const_object() +{ + const auto t = test(); + sigc::mem_fun (&test::foo_const_volatile)(t, 6); + util->check_result(result_stream, "test::foo_const_volatile(double 6)"); +} - sigc::mem_fun(&test::foo_const_volatile)(&t, 6); // on pointer - util->check_result(result_stream, "test::foo_const_volatile(double 6)"); - } #if ENABLE_TEST_OF_OVERLOADED_FUNCTIONS - { /* test overloaded */ - test t; - sigc::mem_fun1(&test::foo_overloaded)(&t, 7); - util->check_result(result_stream, "test::foo_overloaded(char 7)"); +void test_overloaded() +{ + test t; + sigc::mem_fun (&test::foo_overloaded)(t, 7); + util->check_result(result_stream, "test::foo_overloaded(char 7)"); - sigc::mem_fun1(&test::foo_overloaded)(&t, 7); - util->check_result(result_stream, "test::foo_overloaded(short 7)"); + sigc::mem_fun (&test::foo_overloaded)(t, 7); + util->check_result(result_stream, "test::foo_overloaded(short 7)"); - //sigc::mem_fun1(&test::foo_overloaded)(&t, 7); - //util->check_result(result_stream, "test::foo_overloaded(short 7)"); + // sigc::mem_fun(&test::foo_overloaded)(t, 7); + // util->check_result(result_stream, "test::foo_overloaded(short 7)"); - sigc::mem_fun2(&test::foo_overloaded)(&t, 7, 8); - util->check_result(result_stream, "test::foo_overloaded(int 7, int 8)"); - } + sigc::mem_fun (&test::foo_overloaded)(t, 7, 8); + util->check_result(result_stream, "test::foo_overloaded(int 7, int 8)"); +} #endif - { /* test bound */ - test t; - sigc::mem_fun(t, &test::foo)(9); - util->check_result(result_stream, "test::foo(short 9)"); - sigc::mem_fun(&t, &test::foo)(9); - util->check_result(result_stream, "test::foo(short 9)"); +void test_bound() +{ + test t; + sigc::mem_fun(t, &test::foo)(9); + util->check_result(result_stream, "test::foo(short 9)"); - sigc::mem_fun(t, &test::foo_const)(9); - util->check_result(result_stream, "test::foo_const(int 9)"); + sigc::mem_fun(t, &test::foo)(9); + util->check_result(result_stream, "test::foo(short 9)"); - sigc::mem_fun(&t, &test::foo_const)(9); - util->check_result(result_stream, "test::foo_const(int 9)"); + sigc::mem_fun(t, &test::foo_const)(9); + util->check_result(result_stream, "test::foo_const(int 9)"); - sigc::mem_fun(t, &test::foo_volatile)(9); - util->check_result(result_stream, "test::foo_volatile(float 9)"); + sigc::mem_fun(t, &test::foo_const)(9); + util->check_result(result_stream, "test::foo_const(int 9)"); - sigc::mem_fun(&t, &test::foo_volatile)(9); - util->check_result(result_stream, "test::foo_volatile(float 9)"); + sigc::mem_fun(t, &test::foo_volatile)(9); + util->check_result(result_stream, "test::foo_volatile(float 9)"); + + sigc::mem_fun(t, &test::foo_volatile)(9); + util->check_result(result_stream, "test::foo_volatile(float 9)"); #if ENABLE_TEST_OF_OVERLOADED_FUNCTIONS - sigc::mem_fun2(t, &test::foo_overloaded)(9, 10); - util->check_result(result_stream, "test::foo_overloaded(int 9, int 10)"); + sigc::mem_fun(t, &test::foo_overloaded)(9, 10); + util->check_result(result_stream, "test::foo_overloaded(int 9, int 10)"); - sigc::mem_fun2(&t, &test::foo_overloaded)(9, 10); - util->check_result(result_stream, "test::foo_overloaded(int 9, int 10)"); + sigc::mem_fun(t, &test::foo_overloaded)(9, 10); + util->check_result(result_stream, "test::foo_overloaded(int 9, int 10)"); #endif - } +} + +int +main(int argc, char* argv[]) +{ + util = TestUtilities::get_instance(); + + if (!util->check_command_args(argc, argv)) + return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; + + test_non_const(); + test_const(); + test_const_with_const_object(); + test_non_const_volatile(); + test_const_volatile(); + test_const_volatile_with_const_object(); + +#if ENABLE_TEST_OF_OVERLOADED_FUNCTIONS + test_overload(); +#endif + + test_bound(); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From de51a87156a14c65fbd436b0c3ea0508fe9332e1 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 11:40:27 +0200 Subject: [PATCH 033/145] test_mem_fun: Test auto-disconnection with trackable. This is probably tested somewhere else already, but I like having it here too because it is an important reason for slot<> to exist, compared to a simple std::function. --- tests/test_mem_fun.cc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/test_mem_fun.cc b/tests/test_mem_fun.cc index 1b32ae6e..403abba9 100644 --- a/tests/test_mem_fun.cc +++ b/tests/test_mem_fun.cc @@ -142,6 +142,34 @@ void test_bound() #endif } +class TestAutoDisconnect : public sigc::trackable +{ +public: + void foo() + { + result_stream << "TestAutoDisconnect::foo() called."; + } +}; + +void test_auto_disconnect() +{ + //Check that slot doesn't try to call a method on a destroyed instance, + //when the instance's class derives from trackable. + sigc::slot slot_of_member_method; + { + TestAutoDisconnect t; + slot_of_member_method = sigc::mem_fun(t, &TestAutoDisconnect::foo); + + //The method should be called: + slot_of_member_method(); + util->check_result(result_stream, "TestAutoDisconnect::foo() called."); + } + + //The method should not be called: + slot_of_member_method(); + util->check_result(result_stream, ""); +} + int main(int argc, char* argv[]) { @@ -163,5 +191,7 @@ main(int argc, char* argv[]) test_bound(); + test_auto_disconnect(); + return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From 49a05a0fdfcc6fc98de21421e78eaad8400adc8c Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 11:47:03 +0200 Subject: [PATCH 034/145] docs: slots: auto: Mention why it is bad. --- sigc++/functors/slot_base.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sigc++/functors/slot_base.h b/sigc++/functors/slot_base.h index 41d3ebb0..bd15b2ef 100644 --- a/sigc++/functors/slot_base.h +++ b/sigc++/functors/slot_base.h @@ -213,6 +213,10 @@ struct SIGC_API slot_do_unbind * auto sl = sigc::mem_fun(someobj, &SomeClass::somemethod); // Not a slot! * @endcode * + * If you don't explicitly use a sigc::slot then the slot could call a method + * on an instance after it has been destroyed even if the method is in a class + * that derives from sigc::trackable. + * * @section slots-with-lambdas C++ Lambdas * * A C++11 lambda expression is a functor (function object). It is automatically From d3ad360bc5d0d3a64b98b5851f9509d7ef79c32c Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 11:56:06 +0200 Subject: [PATCH 035/145] docs: slots: Mention automatic disconnection. --- sigc++/functors/slot_base.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sigc++/functors/slot_base.h b/sigc++/functors/slot_base.h index bd15b2ef..511c4b36 100644 --- a/sigc++/functors/slot_base.h +++ b/sigc++/functors/slot_base.h @@ -201,6 +201,11 @@ struct SIGC_API slot_do_unbind * * You can also pass slots as method parameters where you might normally pass a function pointer. * + * @section slots-auto-disconnect Member Methods and Automatic Disconnection. + * + * See @ref mem_fun "sigc::mem_fun()" about deriving from sigc::trackable to prevent member + * methods from being called after the instance has been destroyed. + * * @section slots-auto auto * * sigc::mem_fun() and sigc::ptr_fun() return functors, but those functors are From 257acc28529f8dc693bfbd5784c1c86f4f19978a Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 12:00:16 +0200 Subject: [PATCH 036/145] docs: mem_fun: Improve the note about auto-disconnection. Because "cleared" doesn't really tell us how this benefits us. --- sigc++/functors/macros/mem_fun.h.m4 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sigc++/functors/macros/mem_fun.h.m4 b/sigc++/functors/macros/mem_fun.h.m4 index 5e9b8595..597496b8 100644 --- a/sigc++/functors/macros/mem_fun.h.m4 +++ b/sigc++/functors/macros/mem_fun.h.m4 @@ -217,9 +217,11 @@ namespace sigc { * * Optionally, a reference or pointer to an object can be bound to the functor. * - * @note Only if the object type inherits from sigc::trackable, and the - * functor returned from mem_fun() is assigned to a sigc::slot, is the functor - * automatically cleared when the object goes out of scope! + * @note If the object type inherits from sigc::trackable, and the + * functor returned from mem_fun() is assigned to a sigc::slot, the functor + * will be automatically cleared when the object goes out of scope. Invoking + * that slot will then have no effect and will not try to use the destroyed + * instance. * * If the member function pointer is to an overloaded type, you must specify * the types using template arguments starting with the first argument. From e3bc525533c90c1cf88f86530eea92683419390f Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 12:01:31 +0200 Subject: [PATCH 037/145] docs: mem_fun: Improve the simple description. --- sigc++/functors/macros/mem_fun.h.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sigc++/functors/macros/mem_fun.h.m4 b/sigc++/functors/macros/mem_fun.h.m4 index 597496b8..2824c353 100644 --- a/sigc++/functors/macros/mem_fun.h.m4 +++ b/sigc++/functors/macros/mem_fun.h.m4 @@ -213,7 +213,7 @@ _FIREWALL([FUNCTORS_MEM_FUN]) namespace sigc { /** @defgroup mem_fun mem_fun() - * mem_fun() is used to convert a pointer to a method to a functor. + * mem_fun() Creates a functor from a pointer to a method. * * Optionally, a reference or pointer to an object can be bound to the functor. * From 78af0ab5c827ad99b64ef18438898e479b053b65 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 12:07:06 +0200 Subject: [PATCH 038/145] docs: slots: Fix tiny typo. --- sigc++/functors/slot_base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sigc++/functors/slot_base.h b/sigc++/functors/slot_base.h index 511c4b36..4a0f5ff6 100644 --- a/sigc++/functors/slot_base.h +++ b/sigc++/functors/slot_base.h @@ -201,7 +201,7 @@ struct SIGC_API slot_do_unbind * * You can also pass slots as method parameters where you might normally pass a function pointer. * - * @section slots-auto-disconnect Member Methods and Automatic Disconnection. + * @section slots-auto-disconnect Member Methods and Automatic Disconnection * * See @ref mem_fun "sigc::mem_fun()" about deriving from sigc::trackable to prevent member * methods from being called after the instance has been destroyed. From 801d33d014498a3698be69617effdefc4fcddb6c Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 14:34:25 +0200 Subject: [PATCH 039/145] Remove unnecessary slot.cc file. --- sigc++/Makefile.am | 1 - sigc++/functors/slot.cc | 25 ------------------------- 2 files changed, 26 deletions(-) delete mode 100644 sigc++/functors/slot.cc diff --git a/sigc++/Makefile.am b/sigc++/Makefile.am index caa9e154..2bd871ec 100644 --- a/sigc++/Makefile.am +++ b/sigc++/Makefile.am @@ -34,7 +34,6 @@ libsigc_@SIGCXX_API_VERSION@_la_SOURCES = \ signal_base.cc \ trackable.cc \ connection.cc \ - functors/slot.cc \ functors/slot_base.cc \ adaptors/lambda/lambda.cc diff --git a/sigc++/functors/slot.cc b/sigc++/functors/slot.cc deleted file mode 100644 index 5b9c92e2..00000000 --- a/sigc++/functors/slot.cc +++ /dev/null @@ -1,25 +0,0 @@ -// -*- c++ -*- -/* - * Copyright 2002, The libsigc++ Development Team - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -#include - -namespace sigc { - - -} /* namespace sigc */ From 67c84a3b0fb642ec043502e5bcc154210e9281be Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 1 Apr 2016 14:37:30 +0200 Subject: [PATCH 040/145] Remove unnecessary signal.cc file. --- sigc++/Makefile.am | 1 - sigc++/signal.cc | 25 ------------------------- 2 files changed, 26 deletions(-) delete mode 100644 sigc++/signal.cc diff --git a/sigc++/Makefile.am b/sigc++/Makefile.am index 2bd871ec..4fc2e064 100644 --- a/sigc++/Makefile.am +++ b/sigc++/Makefile.am @@ -30,7 +30,6 @@ nobase_library_include_HEADERS = sigc++.h $(sigc_public_h) $(sigc_built_h) lib_LTLIBRARIES = libsigc-@SIGCXX_API_VERSION@.la libsigc_@SIGCXX_API_VERSION@_la_SOURCES = \ - signal.cc \ signal_base.cc \ trackable.cc \ connection.cc \ diff --git a/sigc++/signal.cc b/sigc++/signal.cc deleted file mode 100644 index 993eee4a..00000000 --- a/sigc++/signal.cc +++ /dev/null @@ -1,25 +0,0 @@ -// -*- c++ -*- -/* - * Copyright 2002, The libsigc++ Development Team - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -#include - -namespace sigc { - - -} /* sigc */ From 05b5a81d788021ca4d8694ba39ce593b408fa84e Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 2 Apr 2016 09:01:47 +0200 Subject: [PATCH 041/145] C++11: signal: Use auto for iterators. --- sigc++/macros/signal.h.m4 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 99f66f08..73109e34 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -138,7 +138,7 @@ FOR(1, $1,[ //This avoids a leak on MSVC++ - see http://bugzilla.gnome.org/show_bug.cgi?id=306249 { temp_slot_list slots(impl->slots_); - iterator_type it = slots.begin(); + auto it = slots.begin(); for (; it != slots.end(); ++it) if (!it->empty() && !it->blocked()) break; @@ -234,7 +234,7 @@ FOR(1, $1,[ signal_exec exec(impl); temp_slot_list slots(impl->slots_); - for (iterator_type it = slots.begin(); it != slots.end(); ++it) + for (auto it = slots.begin(); it != slots.end(); ++it) { if (it->empty() || it->blocked()) continue; @@ -262,7 +262,7 @@ FOR(1, $1,[ typedef std::reverse_iterator reverse_iterator_type; #endif - for (reverse_iterator_type it = reverse_iterator_type(slots.end()); it != reverse_iterator_type(slots.begin()); ++it) + for (auto it = reverse_iterator_type(slots.end()); it != reverse_iterator_type(slots.begin()); ++it) { if (it->empty() || it->blocked()) continue; @@ -1126,7 +1126,7 @@ struct slot_reverse_iterator_buf result_type operator*() const { - iterator_type __tmp(i_); + auto __tmp(i_); --__tmp; if (!__tmp->empty() && !__tmp->blocked() && !invoked_) { @@ -1205,7 +1205,7 @@ struct slot_reverse_iterator_buf void operator*() const { - iterator_type __tmp(i_); + auto __tmp(i_); --__tmp; if (!__tmp->empty() && !__tmp->blocked() && !invoked_) { From 6e279a310d6b497378a3c9585ad98394f8a46840 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Sat, 2 Apr 2016 09:04:28 +0200 Subject: [PATCH 042/145] C++11: signal: Use a range-based for loop. --- sigc++/macros/signal.h.m4 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 73109e34..42a832d6 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -234,11 +234,11 @@ FOR(1, $1,[ signal_exec exec(impl); temp_slot_list slots(impl->slots_); - for (auto it = slots.begin(); it != slots.end(); ++it) + for (const auto& slot : slots) { - if (it->empty() || it->blocked()) + if (slot.empty() || slot.blocked()) continue; - (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + (reinterpret_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); } } From d54f13e6d04cf7d2875dfe62f23d3bf6df035941 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Fri, 8 Apr 2016 10:56:47 +0200 Subject: [PATCH 043/145] 2.9.2 --- NEWS | 8 ++++++++ configure.ac | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index e5da7cff..02001226 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +2.9.2 (unstable): + +* Minor documentation improvements. + (Murray Cumming) +* Some more minor uses of C++11 syntax. + (Murray Cumming) + + 2.9.1 (unstable): * slot: Allow sigc::slot syntax, like std::function, diff --git a/configure.ac b/configure.ac index 15a6c329..5f4d14ba 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ ## You should have received a copy of the GNU Lesser General Public License ## along with this library. If not, see . -AC_INIT([libsigc++], [2.9.1], +AC_INIT([libsigc++], [2.9.2], [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B], [libsigc++], [http://libsigc.sourceforge.net/]) AC_PREREQ([2.59]) From 6535a7ab155b372e770b90a2a0202fb869c01b85 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 09:31:51 +0200 Subject: [PATCH 044/145] benchmark: Update for the newer libsigc++ API. --- tests/benchmark.cc | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 tests/benchmark.cc diff --git a/tests/benchmark.cc b/tests/benchmark.cc new file mode 100644 index 00000000..f75b73c7 --- /dev/null +++ b/tests/benchmark.cc @@ -0,0 +1,107 @@ +#include +#include +#include +#include + +struct foo : public sigc::trackable +{ + int bar(int a); + int c; +}; + +int foo::bar(int a) +{ + int b = c; + c = a; + return b; +} + +int main() +{ + Glib::TimeVal t1, t2; + + foo foobar1, foobar2, foobar3, foobar4, foobar5; + sigc::slot slot; + sigc::signal emitter; + sigc::signal::iterator it; + + + // slot benchmark ... + + slot = sigc::mem_fun(&foobar1, &foo::bar); + + t1.assign_current_time(); + + for (int i=0; i < 5000; ++i) + slot(i); + + t2.assign_current_time(); + t2.subtract(t1); + + std::cout << "elapsed time for calling a slot 5000 times: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + + + // emission benchmark (zero slots) ... + + t1.assign_current_time(); + + for (int i=0; i < 1000; ++i) + emitter(i); + + t2.assign_current_time(); + t2.subtract(t1); + + std::cout << "elapsed time for 1000 emissions (0 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + + + // emission benchmark (one slot) ... + + emitter.connect(mem_fun(&foobar1, &foo::bar)); + + t1.assign_current_time(); + + for (int i=0; i < 1000; ++i) + emitter(i); + + t2.assign_current_time(); + t2.subtract(t1); + + std::cout << "elapsed time for 1000 emissions (1 slot): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + + + // emission benchmark (five slot) ... + + emitter.connect(mem_fun(&foobar2, &foo::bar)); + emitter.connect(mem_fun(&foobar3, &foo::bar)); + emitter.connect(mem_fun(&foobar4, &foo::bar)); + emitter.connect(mem_fun(&foobar5, &foo::bar)); + + t1.assign_current_time(); + + for (int i=0; i < 1000; ++i) + emitter(i); + + t2.assign_current_time(); + t2.subtract(t1); + + std::cout << "elapsed time for 1000 emissions (5 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + + + // connection / disconnection benchmark ... + + emitter.clear(); + + t1.assign_current_time(); + + for (int i=0; i < 1000; ++i) + { + it = emitter.connect(mem_fun(&foobar1, &foo::bar)); + it->disconnect(); + } + + t2.assign_current_time(); + t2.subtract(t1); + + std::cout << "elapsed time for 1000 connections/disconnections: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + +} From 6e34e4270a7b6390b1c04f1571bd7f77f81ea412 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 09:32:46 +0200 Subject: [PATCH 045/145] benchmark: Add copyright header. --- tests/benchmark.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/benchmark.cc b/tests/benchmark.cc index f75b73c7..e4adb3c6 100644 --- a/tests/benchmark.cc +++ b/tests/benchmark.cc @@ -1,3 +1,7 @@ +/* Copyright 2003 - 2016, The libsigc++ Development Team + * Assigned to public domain. Use as you wish without restriction. + */ + #include #include #include From 9476c08d447048054e9d2335b0d224c6d091268d Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 10:06:55 +0200 Subject: [PATCH 046/145] benchmark: Rearrange. --- tests/benchmark.cc | 64 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 19 deletions(-) diff --git a/tests/benchmark.cc b/tests/benchmark.cc index e4adb3c6..d9ef614b 100644 --- a/tests/benchmark.cc +++ b/tests/benchmark.cc @@ -20,20 +20,16 @@ int foo::bar(int a) return b; } -int main() +void test_slot_call() { - Glib::TimeVal t1, t2; - - foo foobar1, foobar2, foobar3, foobar4, foobar5; - sigc::slot slot; - sigc::signal emitter; + foo foobar1; sigc::signal::iterator it; - // slot benchmark ... - slot = sigc::mem_fun(&foobar1, &foo::bar); + sigc::slot slot = sigc::mem_fun(&foobar1, &foo::bar); + Glib::TimeVal t1, t2; t1.assign_current_time(); for (int i=0; i < 5000; ++i) @@ -43,10 +39,13 @@ int main() t2.subtract(t1); std::cout << "elapsed time for calling a slot 5000 times: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; +} +void test_signal_emit() +{ + sigc::signal emitter; - // emission benchmark (zero slots) ... - + Glib::TimeVal t1, t2; t1.assign_current_time(); for (int i=0; i < 1000; ++i) @@ -56,12 +55,15 @@ int main() t2.subtract(t1); std::cout << "elapsed time for 1000 emissions (0 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; +} - - // emission benchmark (one slot) ... - +void test_connected_signal_emit() +{ + foo foobar1; + sigc::signal emitter; emitter.connect(mem_fun(&foobar1, &foo::bar)); + Glib::TimeVal t1, t2; t1.assign_current_time(); for (int i=0; i < 1000; ++i) @@ -71,15 +73,19 @@ int main() t2.subtract(t1); std::cout << "elapsed time for 1000 emissions (1 slot): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; +} +void test_connected_multiple_signal_emit() +{ + foo foobar1, foobar2, foobar3, foobar4, foobar5; - // emission benchmark (five slot) ... - + sigc::signal emitter; emitter.connect(mem_fun(&foobar2, &foo::bar)); emitter.connect(mem_fun(&foobar3, &foo::bar)); emitter.connect(mem_fun(&foobar4, &foo::bar)); emitter.connect(mem_fun(&foobar5, &foo::bar)); + Glib::TimeVal t1, t2; t1.assign_current_time(); for (int i=0; i < 1000; ++i) @@ -89,12 +95,15 @@ int main() t2.subtract(t1); std::cout << "elapsed time for 1000 emissions (5 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; +} +void test_connect_disconnect() +{ + foo foobar1; + sigc::signal emitter; + sigc::signal::iterator it; - // connection / disconnection benchmark ... - - emitter.clear(); - + Glib::TimeVal t1, t2; t1.assign_current_time(); for (int i=0; i < 1000; ++i) @@ -107,5 +116,22 @@ int main() t2.subtract(t1); std::cout << "elapsed time for 1000 connections/disconnections: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; +} +int main() +{ + // slot benchmark ... + test_slot_call(); + + // emission benchmark (zero slots) ... + test_signal_emit(); + + // emission benchmark (one slot) ... + test_connected_signal_emit(); + + // emission benchmark (five slot) ... + test_connected_multiple_signal_emit(); + + // connection / disconnection benchmark ... + test_connect_disconnect(); } From 605019cb52c5d9390b053b940a395047c9af1436 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 10:12:06 +0200 Subject: [PATCH 047/145] benchmark: Make the 1000 a constant, so we can change it. --- tests/benchmark.cc | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/tests/benchmark.cc b/tests/benchmark.cc index d9ef614b..e7ec426f 100644 --- a/tests/benchmark.cc +++ b/tests/benchmark.cc @@ -7,6 +7,8 @@ #include #include +const int COUNT = 1000; + struct foo : public sigc::trackable { int bar(int a); @@ -29,16 +31,11 @@ void test_slot_call() sigc::slot slot = sigc::mem_fun(&foobar1, &foo::bar); - Glib::TimeVal t1, t2; - t1.assign_current_time(); + std::cout << "elapsed time for calling a slot " << COUNT << " times:" << std::endl;. + boost::timer::auto_cpu_timer timer; - for (int i=0; i < 5000; ++i) + for (int i=0; i < COUNT; ++i) slot(i); - - t2.assign_current_time(); - t2.subtract(t1); - - std::cout << "elapsed time for calling a slot 5000 times: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } void test_signal_emit() @@ -48,13 +45,13 @@ void test_signal_emit() Glib::TimeVal t1, t2; t1.assign_current_time(); - for (int i=0; i < 1000; ++i) + for (int i=0; i < COUNT; ++i) emitter(i); t2.assign_current_time(); t2.subtract(t1); - std::cout << "elapsed time for 1000 emissions (0 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + std::cout << "elapsed time for " << COUNT << " emissions (0 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } void test_connected_signal_emit() @@ -66,13 +63,13 @@ void test_connected_signal_emit() Glib::TimeVal t1, t2; t1.assign_current_time(); - for (int i=0; i < 1000; ++i) + for (int i=0; i < COUNT; ++i) emitter(i); t2.assign_current_time(); t2.subtract(t1); - std::cout << "elapsed time for 1000 emissions (1 slot): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + std::cout << "elapsed time for " << COUNT << " emissions (1 slot): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } void test_connected_multiple_signal_emit() @@ -88,13 +85,13 @@ void test_connected_multiple_signal_emit() Glib::TimeVal t1, t2; t1.assign_current_time(); - for (int i=0; i < 1000; ++i) + for (int i=0; i < COUNT; ++i) emitter(i); t2.assign_current_time(); t2.subtract(t1); - std::cout << "elapsed time for 1000 emissions (5 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + std::cout << "elapsed time for " << COUNT << " emissions (5 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } void test_connect_disconnect() @@ -106,7 +103,7 @@ void test_connect_disconnect() Glib::TimeVal t1, t2; t1.assign_current_time(); - for (int i=0; i < 1000; ++i) + for (int i=0; i < COUNT; ++i) { it = emitter.connect(mem_fun(&foobar1, &foo::bar)); it->disconnect(); @@ -115,7 +112,7 @@ void test_connect_disconnect() t2.assign_current_time(); t2.subtract(t1); - std::cout << "elapsed time for 1000 connections/disconnections: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; + std::cout << "elapsed time for " << COUNT << " connections/disconnections: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } int main() From 9e72b2f80e5b60c0001639474cdb466d04d76838 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 10:13:01 +0200 Subject: [PATCH 048/145] benchmark: Increase count. --- tests/benchmark.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/benchmark.cc b/tests/benchmark.cc index e7ec426f..9c80de32 100644 --- a/tests/benchmark.cc +++ b/tests/benchmark.cc @@ -7,7 +7,7 @@ #include #include -const int COUNT = 1000; +const int COUNT = 10000000; struct foo : public sigc::trackable { From 34aa8c86686691820835d91a2c6cb268a05ce364 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 10:44:35 +0200 Subject: [PATCH 049/145] benchmark: Use the newer syntax. --- tests/benchmark.cc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/benchmark.cc b/tests/benchmark.cc index 9c80de32..fe44210a 100644 --- a/tests/benchmark.cc +++ b/tests/benchmark.cc @@ -25,11 +25,11 @@ int foo::bar(int a) void test_slot_call() { foo foobar1; - sigc::signal::iterator it; + sigc::signal::iterator it; // slot benchmark ... - sigc::slot slot = sigc::mem_fun(&foobar1, &foo::bar); + sigc::slot slot = sigc::mem_fun(foobar1, &foo::bar); std::cout << "elapsed time for calling a slot " << COUNT << " times:" << std::endl;. boost::timer::auto_cpu_timer timer; @@ -40,7 +40,7 @@ void test_slot_call() void test_signal_emit() { - sigc::signal emitter; + sigc::signal emitter; Glib::TimeVal t1, t2; t1.assign_current_time(); @@ -57,8 +57,8 @@ void test_signal_emit() void test_connected_signal_emit() { foo foobar1; - sigc::signal emitter; - emitter.connect(mem_fun(&foobar1, &foo::bar)); + sigc::signal emitter; + emitter.connect(mem_fun(foobar1, &foo::bar)); Glib::TimeVal t1, t2; t1.assign_current_time(); @@ -76,11 +76,11 @@ void test_connected_multiple_signal_emit() { foo foobar1, foobar2, foobar3, foobar4, foobar5; - sigc::signal emitter; - emitter.connect(mem_fun(&foobar2, &foo::bar)); - emitter.connect(mem_fun(&foobar3, &foo::bar)); - emitter.connect(mem_fun(&foobar4, &foo::bar)); - emitter.connect(mem_fun(&foobar5, &foo::bar)); + sigc::signal emitter; + emitter.connect(mem_fun(foobar2, &foo::bar)); + emitter.connect(mem_fun(foobar3, &foo::bar)); + emitter.connect(mem_fun(foobar4, &foo::bar)); + emitter.connect(mem_fun(foobar5, &foo::bar)); Glib::TimeVal t1, t2; t1.assign_current_time(); @@ -97,15 +97,15 @@ void test_connected_multiple_signal_emit() void test_connect_disconnect() { foo foobar1; - sigc::signal emitter; - sigc::signal::iterator it; + sigc::signal emitter; + sigc::signal::iterator it; Glib::TimeVal t1, t2; t1.assign_current_time(); for (int i=0; i < COUNT; ++i) { - it = emitter.connect(mem_fun(&foobar1, &foo::bar)); + it = emitter.connect(mem_fun(foobar1, &foo::bar)); it->disconnect(); } From dfa1d3e9c95e62ce16abec648d88eb71b8462ce0 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 10:43:17 +0200 Subject: [PATCH 050/145] benchmark: Use boost::timer instead of Glib::Timer. And optionally build it, when --enable-benchmark is passed to configure. --- build/ax_boost_base.m4 | 285 +++++++++++++++++++++++++++++++++++++++ build/ax_boost_system.m4 | 121 +++++++++++++++++ build/ax_boost_timer.m4 | 119 ++++++++++++++++ configure.ac | 16 +++ tests/Makefile.am | 12 +- tests/benchmark.cc | 40 ++---- 6 files changed, 562 insertions(+), 31 deletions(-) create mode 100644 build/ax_boost_base.m4 create mode 100644 build/ax_boost_system.m4 create mode 100644 build/ax_boost_timer.m4 diff --git a/build/ax_boost_base.m4 b/build/ax_boost_base.m4 new file mode 100644 index 00000000..f3279f2b --- /dev/null +++ b/build/ax_boost_base.m4 @@ -0,0 +1,285 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# DESCRIPTION +# +# Test for the Boost C++ libraries of a particular version (or newer) +# +# If no path to the installed boost library is given the macro searchs +# under /usr, /usr/local, /opt and /opt/local and evaluates the +# $BOOST_ROOT environment variable. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) +# +# And sets: +# +# HAVE_BOOST +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2009 Peter Adolphs +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 26 + +AC_DEFUN([AX_BOOST_BASE], +[ +AC_ARG_WITH([boost], + [AS_HELP_STRING([--with-boost@<:@=ARG@:>@], + [use Boost library from a standard location (ARG=yes), + from the specified location (ARG=), + or disable it (ARG=no) + @<:@ARG=yes@:>@ ])], + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="yes"]) + + +AC_ARG_WITH([boost-libdir], + AS_HELP_STRING([--with-boost-libdir=LIB_DIR], + [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]), + [ + if test -d "$withval" + then + ac_boost_lib_path="$withval" + else + AC_MSG_ERROR(--with-boost-libdir expected directory name) + fi + ], + [ac_boost_lib_path=""] +) + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) + succeeded=no + + dnl On 64-bit systems check for system libraries in both lib64 and lib. + dnl The former is specified by FHS, but e.g. Debian does not adhere to + dnl this (as it rises problems for generic multi-arch support). + dnl The last entry in the list is chosen by default when no libraries + dnl are found, e.g. when only header-only libraries are installed! + libsubdirs="lib" + ax_arch=`uname -m` + case $ax_arch in + x86_64) + libsubdirs="lib64 libx32 lib lib64" + ;; + ppc64|s390x|sparc64|aarch64|ppc64le) + libsubdirs="lib64 lib lib64 ppc64le" + ;; + esac + + dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give + dnl them priority over the other paths since, if libs are found there, they + dnl are almost assuredly the ones desired. + AC_REQUIRE([AC_CANONICAL_HOST]) + libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" + + case ${host_cpu} in + i?86) + libsubdirs="lib/i386-${host_os} $libsubdirs" + ;; + esac + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + BOOST_CPPFLAGS="-I$ac_boost_path/include" + for ac_boost_path_tmp in $libsubdirs; do + if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then + BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" + break + fi + done + elif test "$cross_compiling" != yes; then + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + for libsubdir in $libsubdirs ; do + if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + dnl overwrite ld flags if we have required special directory with + dnl --with-boost-libdir parameter + if test "$ac_boost_lib_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_lib_path" + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_REQUIRE([AC_PROG_CXX]) + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + + + + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option or for a staged(not installed) version + if test "x$succeeded" != "xyes"; then + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + BOOST_CPPFLAGS= + BOOST_LDFLAGS= + _version=0 + if test "$ac_boost_path" != ""; then + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + dnl if nothing found search for layout used in Windows distributions + if test -z "$BOOST_CPPFLAGS"; then + if test -d "$ac_boost_path/boost" && test -r "$ac_boost_path/boost"; then + BOOST_CPPFLAGS="-I$ac_boost_path" + fi + fi + fi + else + if test "$cross_compiling" != yes; then + for ac_boost_path in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + if test "$ac_boost_lib_path" = ""; then + for libsubdir in $libsubdirs ; do + if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$best_path/$libsubdir" + fi + fi + + if test "x$BOOST_ROOT" != "x"; then + for libsubdir in $libsubdirs ; do + if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then + AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + else + AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) + fi + # execute ACTION-IF-NOT-FOUND (if present): + ifelse([$3], , :, [$3]) + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) + # execute ACTION-IF-FOUND (if present): + ifelse([$2], , :, [$2]) + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + +]) diff --git a/build/ax_boost_system.m4 b/build/ax_boost_system.m4 new file mode 100644 index 00000000..c25bb5c7 --- /dev/null +++ b/build/ax_boost_system.m4 @@ -0,0 +1,121 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_system.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_SYSTEM +# +# DESCRIPTION +# +# Test for System library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_SYSTEM_LIB) +# +# And sets: +# +# HAVE_BOOST_SYSTEM +# +# LICENSE +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Daniel Casimiro +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 17 + +AC_DEFUN([AX_BOOST_SYSTEM], +[ + AC_ARG_WITH([boost-system], + AS_HELP_STRING([--with-boost-system@<:@=special-lib@:>@], + [use the System library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-system=boost_system-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_system_lib="" + else + want_boost="yes" + ax_boost_user_system_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::System library is available, + ax_cv_boost_system, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::system::system_category]])], + ax_cv_boost_system=yes, ax_cv_boost_system=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_system" = "xyes"; then + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_SYSTEM,,[define if the Boost::System library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + if test "x$ax_boost_user_system_lib" = "x"; then + for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + if test "x$link_system" != "xyes"; then + for libextension in `ls -r $BOOSTLIBDIR/boost_system* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_system_lib boost_system-$ax_boost_user_system_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], + [link_system="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_system" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) + diff --git a/build/ax_boost_timer.m4 b/build/ax_boost_timer.m4 new file mode 100644 index 00000000..79cff6eb --- /dev/null +++ b/build/ax_boost_timer.m4 @@ -0,0 +1,119 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_boost_timer.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_TIMER +# +# DESCRIPTION +# +# Test for System library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_TIMER_LIB) +# +# And sets: +# +# HAVE_BOOST_TIMER +# +# LICENSE +# +# Copyright (c) 2012 Xiyue Deng +# Copyright (c) 2012 Murray Cumming +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2 (based on serial 1 of ax_boost_locale.m4 with some simple find/replace by Murray Cumming) + +AC_DEFUN([AX_BOOST_TIMER], +[ + AC_ARG_WITH([boost-timer], + AS_HELP_STRING([--with-boost-timer@<:@=special-lib@:>@], + [use the Timer library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-timer=boost_timer-gcc-mt ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_timer_lib="" + else + want_boost="yes" + ax_boost_user_timer_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::Timer library is available, + ax_cv_boost_timer, + [AC_LANG_PUSH([C++]) + CXXFLAGS_SAVE=$CXXFLAGS + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[boost::timer::cpu_timer().stop();]])], + ax_cv_boost_timer=yes, ax_cv_boost_timer=no) + CXXFLAGS=$CXXFLAGS_SAVE + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_timer" = "xyes"; then + AC_SUBST(BOOST_CPPFLAGS) + + AC_DEFINE(HAVE_BOOST_TIMER,,[define if the Boost::Timer library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + LDFLAGS_SAVE=$LDFLAGS + if test "x$ax_boost_user_timer_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_timer*.so* $BOOSTLIBDIR/libboost_timer*.dylib* $BOOSTLIBDIR/libboost_timer*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_timer.*\)\.so.*$;\1;' -e 's;^lib\(boost_timer.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_timer.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_TIMER_LIB="-l$ax_lib"; AC_SUBST(BOOST_TIMER_LIB) link_timer="yes"; break], + [link_timer="no"]) + done + if test "x$link_timer" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_timer*.dll* $BOOSTLIBDIR/boost_timer*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_timer.*\)\.dll.*$;\1;' -e 's;^\(boost_timer.*\)\.a.*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_TIMER_LIB="-l$ax_lib"; AC_SUBST(BOOST_TIMER_LIB) link_timer="yes"; break], + [link_timer="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_timer_lib boost_timer-$ax_boost_user_timer_lib; do + AC_CHECK_LIB($ax_lib, exit, + [BOOST_TIMER_LIB="-l$ax_lib"; AC_SUBST(BOOST_TIMER_LIB) link_timer="yes"; break], + [link_timer="no"]) + done + + fi + if test "x$ax_lib" = "x"; then + AC_MSG_ERROR(Could not find a version of the library!) + fi + if test "x$link_timer" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) diff --git a/configure.ac b/configure.ac index 5f4d14ba..3dde0aba 100644 --- a/configure.ac +++ b/configure.ac @@ -66,6 +66,22 @@ MM_ARG_ENABLE_WARNINGS([SIGC_WXXFLAGS], # Offer the ability to omit some API from the library. MM_ARG_DISABLE_DEPRECATED_API([SIGCXX]) +AC_ARG_ENABLE(benchmark, + AS_HELP_STRING([--enable-benchmark=yes|no]), + [enable_benchmark=yes] +) + +AM_CONDITIONAL([SIGC_BUILD_BENCHMARK], [test "x$enable_benchmark" = xyes]) + +AS_IF([test "x$enable_benchmark" = xyes],[ + #Use boost::timer for our benchmark, if it's available. + # See http://www.gnu.org/software/autoconf-archive/ax_boost_base.html + # Boost System is needed by Boost Timer + AX_BOOST_BASE + AX_BOOST_SYSTEM + AX_BOOST_TIMER +]) + AC_CONFIG_FILES([Makefile ${SIGCXX_MODULE_NAME}.pc:sigc++.pc.in ${SIGCXX_MODULE_NAME}-uninstalled.pc:sigc++-uninstalled.pc.in diff --git a/tests/Makefile.am b/tests/Makefile.am index f175f32b..8556ee3f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -17,7 +17,9 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) AM_CXXFLAGS = $(SIGC_WXXFLAGS) -LDADD = $(top_builddir)/sigc++/libsigc-$(SIGCXX_API_VERSION).la + +sigc_libs = $(top_builddir)/sigc++/libsigc-$(SIGCXX_API_VERSION).la +LDADD = $(sigc_libs) check_PROGRAMS = \ test_accum_iter \ @@ -89,3 +91,11 @@ test_trackable_SOURCES = test_trackable.cc $(sigc_test_util) test_trackable_move_SOURCES = test_trackable_move.cc $(sigc_test_util) test_track_obj_SOURCES = test_track_obj.cc $(sigc_test_util) test_visit_each_SOURCES = test_visit_each.cc $(sigc_test_util) + +if SIGC_BUILD_BENCHMARK +check_PROGRAMS += benchmark +benchmark_SOURCES = benchmark.cc $(sigc_test_util) +benchmark_LDADD = $(sigc_libs) \ + $(BOOST_SYSTEM_LIB) \ + $(BOOST_TIMER_LIB) +endif diff --git a/tests/benchmark.cc b/tests/benchmark.cc index fe44210a..a9b5945f 100644 --- a/tests/benchmark.cc +++ b/tests/benchmark.cc @@ -5,7 +5,7 @@ #include #include #include -#include +#include const int COUNT = 10000000; @@ -31,7 +31,7 @@ void test_slot_call() sigc::slot slot = sigc::mem_fun(foobar1, &foo::bar); - std::cout << "elapsed time for calling a slot " << COUNT << " times:" << std::endl;. + std::cout << "elapsed time for calling a slot " << COUNT << " times:" << std::endl; boost::timer::auto_cpu_timer timer; for (int i=0; i < COUNT; ++i) @@ -42,16 +42,11 @@ void test_signal_emit() { sigc::signal emitter; - Glib::TimeVal t1, t2; - t1.assign_current_time(); + std::cout << "elapsed time for " << COUNT << " emissions (0 slots):" << std::endl; + boost::timer::auto_cpu_timer timer; for (int i=0; i < COUNT; ++i) emitter(i); - - t2.assign_current_time(); - t2.subtract(t1); - - std::cout << "elapsed time for " << COUNT << " emissions (0 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } void test_connected_signal_emit() @@ -60,16 +55,11 @@ void test_connected_signal_emit() sigc::signal emitter; emitter.connect(mem_fun(foobar1, &foo::bar)); - Glib::TimeVal t1, t2; - t1.assign_current_time(); + std::cout << "elapsed time for " << COUNT << " emissions (1 slot):" << std::endl; + boost::timer::auto_cpu_timer timer; for (int i=0; i < COUNT; ++i) emitter(i); - - t2.assign_current_time(); - t2.subtract(t1); - - std::cout << "elapsed time for " << COUNT << " emissions (1 slot): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } void test_connected_multiple_signal_emit() @@ -82,16 +72,11 @@ void test_connected_multiple_signal_emit() emitter.connect(mem_fun(foobar4, &foo::bar)); emitter.connect(mem_fun(foobar5, &foo::bar)); - Glib::TimeVal t1, t2; - t1.assign_current_time(); + std::cout << "elapsed time for " << COUNT << " emissions (5 slots):" << std::endl; + boost::timer::auto_cpu_timer timer;; for (int i=0; i < COUNT; ++i) emitter(i); - - t2.assign_current_time(); - t2.subtract(t1); - - std::cout << "elapsed time for " << COUNT << " emissions (5 slots): " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } void test_connect_disconnect() @@ -100,19 +85,14 @@ void test_connect_disconnect() sigc::signal emitter; sigc::signal::iterator it; - Glib::TimeVal t1, t2; - t1.assign_current_time(); + std::cout << "elapsed time for " << COUNT << " connections/disconnections:" << std::endl; + boost::timer::auto_cpu_timer timer; for (int i=0; i < COUNT; ++i) { it = emitter.connect(mem_fun(foobar1, &foo::bar)); it->disconnect(); } - - t2.assign_current_time(); - t2.subtract(t1); - - std::cout << "elapsed time for " << COUNT << " connections/disconnections: " << t2.tv_sec << "s " << t2.tv_usec << "us" << std::endl; } int main() From b70393f2db4f0d43d176a200ecc7e474ec51cb6e Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 20 Apr 2016 11:46:44 +0200 Subject: [PATCH 051/145] Update tests/.gitignore --- tests/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/.gitignore b/tests/.gitignore index be803fcb..6816751f 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -31,3 +31,5 @@ /test_trackable_move /test_track_obj /test_visit_each +/test_visit_each_trackable +/benchmark From e360dd12ef916b898e0088cccd84b25cc0be5aa3 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Fri, 17 Jun 2016 14:30:39 +0800 Subject: [PATCH 052/145] Visual Studio builds: Update project Remove the sources from the projects that have been removed from the source tree lately. --- MSVC_Net2013/libsigc++2.vcxproj | 2 -- MSVC_Net2013/libsigc++2.vcxproj.filters | 2 -- 2 files changed, 4 deletions(-) diff --git a/MSVC_Net2013/libsigc++2.vcxproj b/MSVC_Net2013/libsigc++2.vcxproj index 15762b93..cb425b12 100644 --- a/MSVC_Net2013/libsigc++2.vcxproj +++ b/MSVC_Net2013/libsigc++2.vcxproj @@ -125,11 +125,9 @@ - - diff --git a/MSVC_Net2013/libsigc++2.vcxproj.filters b/MSVC_Net2013/libsigc++2.vcxproj.filters index d7a58cd1..faef4573 100644 --- a/MSVC_Net2013/libsigc++2.vcxproj.filters +++ b/MSVC_Net2013/libsigc++2.vcxproj.filters @@ -16,11 +16,9 @@ Source Files - Source Files Source Files Source Files Source Files - Source Files Source Files From ac79b551afd80d6874b4f9faefb38aa292ce2159 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Fri, 17 Jun 2016 14:35:22 +0800 Subject: [PATCH 053/145] Fix build of "Implement slot with variadic template" * sigc++/functors/macros/slot.h.m4: Fix the use of operator() in the variadic templates usage in the base slot_call as the syntax differs between compilers for this call. This fixes the build of the tests and any items that makes use of sigc++/functors/slot.h on non-GCC, specifically Visual Studio 2013 and 2015. https://bugzilla.gnome.org/show_bug.cgi?id=767777 --- sigc++/functors/macros/slot.h.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index e0632e45..60cccbd2 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -475,7 +475,7 @@ struct slot_call { using typed_slot = typed_slot_rep; typed_slot *typed_rep = static_cast(rep); - return (typed_rep->functor_).template operator()...> + return (typed_rep->functor_).SIGC_WORKAROUND_OPERATOR_PARENTHESES...> (a_...); } From e650ad07a0716a5dd1c7008add037598ab4fc2c0 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Tue, 21 Jun 2016 11:06:02 +0200 Subject: [PATCH 054/145] Update tests/.gitignore --- tests/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/.gitignore b/tests/.gitignore index 6816751f..be54c453 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -3,6 +3,7 @@ /test_accumulated /test_accum_iter /test_bind +/test_bind_as_slot /test_bind_ref /test_bind_refptr /test_bind_return @@ -31,5 +32,4 @@ /test_trackable_move /test_track_obj /test_visit_each -/test_visit_each_trackable /benchmark From b5d6e5b478056c4cd28ef87f9871c9bec2d20ac6 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Tue, 5 Jul 2016 09:13:51 +0200 Subject: [PATCH 055/145] signal: Deprecate emit_reverse(). Because we don't use it in any tests or examples and probably nobody uses it. It has already been removed from libsigc++-3.0 (which installs in parallel): https://git.gnome.org/browse/libsigcplusplus/commit/?id=1a4eee7e8ded2acea94e27af5c94e37dcd9cbb13 Please tell us if you really need to use this. --- sigc++/macros/signal.h.m4 | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 42a832d6..bffdab9e 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -77,12 +77,15 @@ FOR(1, $1,[ slot_iterator_buf_type(slots.end(), &self)); } +_DEPRECATE_IFDEF_START /** Executes a list of slots using an accumulator of type @e T_accumulator in reverse order.dnl ifelse($1,0,,[ * The arguments are buffered in a temporary instance of signal_emit$1.]) FOR(1, $1,[ * @param _A_a%1 Argument to be passed on to the slots.]) * @return The accumulated return values of the slot invocations as processed by the accumulator. + * + * @deprecated This is apparently not useful, but please let us know if you need it. */ static result_type emit_reverse(LIST(signal_impl* impl, LOOP(type_trait_take_t _A_a%1, $1))) { @@ -98,6 +101,8 @@ FOR(1, $1,[ return accumulator(slot_reverse_iterator_buf_type(slots.end(), &self), slot_reverse_iterator_buf_type(slots.begin(), &self)); } +_DEPRECATE_IFDEF_END + dnl FOR(1, $1,[ type_trait_take_t _A_a%1_;]) @@ -157,6 +162,7 @@ FOR(1, $1,[ return r_; } +_DEPRECATE_IFDEF_START /** Executes a list of slots using an accumulator of type @e T_accumulator in reverse order.dnl ifelse($1,0,,[ * The arguments are passed directly on to the slots.]) @@ -166,6 +172,8 @@ ifelse($1,0,,[ FOR(1, $1,[ * @param _A_a%1 Argument to be passed on to the slots.]) * @return The return value of the last slot invoked. + * + * @deprecated This is apparently not useful, but please let us know if you need it. */ static result_type emit_reverse(LIST(signal_impl* impl, LOOP(type_trait_take_t _A_a%1, $1))) { @@ -204,6 +212,7 @@ FOR(1, $1,[ return r_; } +_DEPRECATE_IFDEF_END }; /** Abstracts signal emission. @@ -242,6 +251,7 @@ FOR(1, $1,[ } } +_DEPRECATE_IFDEF_START /** Executes a list of slots using an accumulator of type @e T_accumulator in reverse order.dnl ifelse($1,0,,[ * The arguments are passed directly on to the slots.]) @@ -249,6 +259,8 @@ ifelse($1,0,,[ * @param last An iterator pointing to the last slot in the list.dnl FOR(1, $1,[ * @param _A_a%1 Argument to be passed on to the slots.]) + * + * @deprecated This is apparently not useful, but please let us know if you need it. */ static result_type emit_reverse(LIST(signal_impl* impl, LOOP(type_trait_take_t _A_a%1, $1))) { @@ -269,6 +281,7 @@ FOR(1, $1,[ (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } +_DEPRECATE_IFDEF_END }; ]) @@ -363,11 +376,19 @@ FOR(1, $1,[ result_type emit(LOOP(type_trait_take_t _A_a%1, $1)) const { return emitter_type::emit(LIST(impl_, LOOP(_A_a%1, $1))); } - /** Triggers the emission of the signal in reverse order (see emit()). */ +_DEPRECATE_IFDEF_START + /** Triggers the emission of the signal in reverse order (see emit()). + * + * @deprecated This is apparently not useful, but please let us know if you need it. + */ result_type emit_reverse(LOOP(type_trait_take_t _A_a%1, $1)) const { return emitter_type::emit_reverse(LIST(impl_, LOOP(_A_a%1, $1))); } +_DEPRECATE_IFDEF_END - /** Triggers the emission of the signal (see emit()). */ + /** Triggers the emission of the signal (see emit()). + * + * @deprecated This is apparently not useful, but let us know if you need it. + */ result_type operator()(LOOP(type_trait_take_t _A_a%1, $1)) const { return emit(LOOP(_A_a%1, $1)); } From 74fdc49f54d43a011cf7876e526f62c155fa6ec5 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Tue, 5 Jul 2016 09:22:00 +0200 Subject: [PATCH 056/145] signal: Deprecate slots(). Because we don't use it in any tests or examples and probably nobody uses it. It has already been removed from libsigc++-3.0 (which installs in parallel): https://git.gnome.org/browse/libsigcplusplus/commit/?id=fb5d1a55ddd843a1ded635b0ebce4e5b5301fc36 Please tell us if you really need to use this. --- sigc++/macros/signal.h.m4 | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index bffdab9e..8f7ed2a9 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -298,11 +298,7 @@ define([SIGNAL_N],[dnl * Be careful if you directly pass one signal into the connect() * method of another: a shallow copy of the signal is made and * the signal's slots are not disconnected until both the signal - * and its clone are destroyed, which is probably not what you want! - * - * An STL-style list interface for the signal's list of slots - * can be retrieved with slots(). This interface supports - * iteration, insertion and removal of slots. + * and its clone are destroyed, which is probably not what you want. * * The following template arguments are used: * - @e T_return The desired return type for the emit() function (may be overridden by the accumulator).dnl @@ -402,9 +398,12 @@ _DEPRECATE_IFDEF_END bound_const_mem_functor$1, $1))> make_slot() const { return bound_const_mem_functor$1, $1))>(*this, &signal$1::emit); } +_DEPRECATE_IFDEF_START /** Creates an STL-style interface for the signal's list of slots. * This interface supports iteration, insertion and removal of slots. * @return An STL-style interface for the signal's list of slots. + * + * @deprecated This is apparently not useful, but please let us know if you need it. */ slot_list_type slots() { return slot_list_type(impl()); } @@ -412,9 +411,12 @@ _DEPRECATE_IFDEF_END /** Creates an STL-style interface for the signal's list of slots. * This interface supports iteration, insertion and removal of slots. * @return An STL-style interface for the signal's list of slots. + * + * @deprecated This is apparently not useful, but please let us know if you need it. */ const slot_list_type slots() const { return slot_list_type(const_cast(this)->impl()); } +_DEPRECATE_IFDEF_END signal$1() {} @@ -454,10 +456,6 @@ ifelse($1, $2,[dnl * the signal's slots are not disconnected until both the signal * and its clone are destroyed, which is probably not what you want! * - * An STL-style list interface for the signal's list of slots - * can be retrieved with slots(). This interface supports - * iteration, insertion and removal of slots. - * * The template arguments determine the function signature of * the emit() function: * - @e T_return The desired return type of the emit() function.dnl @@ -847,8 +845,7 @@ struct slot_const_iterator /** STL-style list interface for sigc::signal#. * slot_list can be used to iterate over the list of slots that * is managed by a signal. Slots can be added or removed from - * the list while existing iterators stay valid. A slot_list - * object can be retrieved from the signal's slots() function. + * the list while existing iterators stay valid. * * @ingroup signal */ From 50753be3599865e84b1b3bae0764feb00d1abe78 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 6 Jul 2016 12:08:27 +0200 Subject: [PATCH 057/145] 2.9.3 --- NEWS | 18 ++++++++++++++++++ configure.ac | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 02001226..3286da2c 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,21 @@ +2.9.3 (unstable): + +* signal: + Deprecate slots(). + Please tell us if you really need this. + (Murray Cumming) + Deprecate emit_reverse(). + Please tell us if you really need this. + (Murray Cumming) +* Benchmark: Update it and use boost::timer, and actually build it, + but not built by default. + (Murray Cumming) + +Build: +* Fix the build on MSVC++ 2013 and 2015. + (Chun-wei Fan) Bug #767777 + + 2.9.2 (unstable): * Minor documentation improvements. diff --git a/configure.ac b/configure.ac index 3dde0aba..ea828ae1 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ ## You should have received a copy of the GNU Lesser General Public License ## along with this library. If not, see . -AC_INIT([libsigc++], [2.9.2], +AC_INIT([libsigc++], [2.9.3], [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B], [libsigc++], [http://libsigc.sourceforge.net/]) AC_PREREQ([2.59]) From ae228db5ef9b816a1056a8951433362f4c1532c0 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Mon, 18 Jul 2016 18:13:24 +0200 Subject: [PATCH 058/145] Build: Fix silent builds * configure.ac: Pass yes to AM_SILENT_RULES, thus enabling silent builds. Replace MM_AX_CXX_COMPILE_STDCXX_11 by MM_AX_CXX_COMPILE_STDCXX (not necessary for silent builds). * docs/reference/Doxyfile.in: Set QUIET=YES. Update for doxygen 1.8.11 (not necessary for silent builds). Bug #768797 --- configure.ac | 8 +++++--- docs/reference/Doxyfile.in | 11 ++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index ea828ae1..004687d1 100644 --- a/configure.ac +++ b/configure.ac @@ -26,16 +26,18 @@ AC_CONFIG_MACRO_DIR([build]) AC_CONFIG_HEADERS([config.h sigc++config.h]) AM_INIT_AUTOMAKE([1.9 -Wno-portability check-news dist-bzip2 no-define nostdinc tar-ustar]) -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) +# Support silent build rules. +# Disable by either passing --disable-silent-rules to configure or passing V=1 to make. +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AM_MAINTAINER_MODE AC_ARG_VAR([ACLOCAL_FLAGS], [aclocal flags, e.g. -I ]) -MM_PREREQ([0.9.8]) +MM_PREREQ([0.9.10]) MM_INIT_MODULE([sigc++-2.0]) MM_CONFIG_DOCTOOL_DIR([docs]) AC_PROG_CXX -MM_AX_CXX_COMPILE_STDCXX_11([noext],[mandatory]) +MM_AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory]) AC_DISABLE_STATIC LT_INIT([win32-dll]) diff --git a/docs/reference/Doxyfile.in b/docs/reference/Doxyfile.in index 3909facd..c94b485d 100644 --- a/docs/reference/Doxyfile.in +++ b/docs/reference/Doxyfile.in @@ -1,4 +1,4 @@ -# Doxyfile 1.8.9.1 +# Doxyfile 1.8.11 # @configure_input@ #--------------------------------------------------------------------------- @@ -45,6 +45,7 @@ CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO @@ -93,11 +94,12 @@ CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- -QUIET = NO +QUIET = YES WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = reference/doxygen.log #--------------------------------------------------------------------------- @@ -140,6 +142,8 @@ REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = NO +CLANG_ASSISTED_PARSING = NO +CLANG_OPTIONS = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -224,6 +228,7 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -281,7 +286,7 @@ PREDEFINED = __cplusplus \ SIGC_CONFIGURE \ SIGC_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD \ SIGC_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD \ - SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD" + SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD EXPAND_AS_DEFINED = SIGC_WORKAROUND_OPERATOR_PARENTHESES \ SIGCXX_MAJOR_VERSION \ SIGCXX_MINOR_VERSION \ From 83f1e2fe7855f85af570b9653903d2c426d67e72 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Tue, 20 Sep 2016 12:13:23 +0200 Subject: [PATCH 059/145] 2.10.0 --- NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 3286da2c..b5552d8c 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +2.10.0 (stable): + +* Build: Fix silent builds. + (Kjell Ahlstedt) Bug #768797 + 2.9.3 (unstable): * signal: diff --git a/configure.ac b/configure.ac index 004687d1..62deef00 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ ## You should have received a copy of the GNU Lesser General Public License ## along with this library. If not, see . -AC_INIT([libsigc++], [2.9.3], +AC_INIT([libsigc++], [2.10.0], [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B], [libsigc++], [http://libsigc.sourceforge.net/]) AC_PREREQ([2.59]) From 661f12a1e7c21378dc194ce527bdd6c192629481 Mon Sep 17 00:00:00 2001 From: Christophe Lermytte Date: Sat, 19 Nov 2016 23:54:19 +0100 Subject: [PATCH 060/145] Make --disable-benchmark work Currently, when calling ./configure, the possible outcomes of the enable_benchmark variable are: ./configure -> "" ./configure --enable-benchmark -> "yes" ./configure --enable-benchmark=yes -> "yes" ./configure --enable-benchmark=no -> "yes" ./configure --enable-benchmark=hello -> "yes" ./configure --disable-benchmark -> "yes" With this commit, those values become ./configure -> "" ./configure --enable-benchmark -> "yes" ./configure --enable-benchmark=yes -> "yes" ./configure --enable-benchmark=no -> "no" ./configure --enable-benchmark=hello -> "hello" ./configure --disable-benchmark -> "no" Note that enable_benchmark is currently only being checked for being "yes" or not. Bug #774732 --- configure.ac | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 62deef00..80e85056 100644 --- a/configure.ac +++ b/configure.ac @@ -69,8 +69,7 @@ MM_ARG_ENABLE_WARNINGS([SIGC_WXXFLAGS], MM_ARG_DISABLE_DEPRECATED_API([SIGCXX]) AC_ARG_ENABLE(benchmark, - AS_HELP_STRING([--enable-benchmark=yes|no]), - [enable_benchmark=yes] + AS_HELP_STRING([--enable-benchmark=yes|no]) ) AM_CONDITIONAL([SIGC_BUILD_BENCHMARK], [test "x$enable_benchmark" = xyes]) From abadda40f1732cb88f4a91335d2be1bb95b89a92 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Mon, 17 Jul 2017 10:18:02 +0200 Subject: [PATCH 061/145] signal_impl::clear(): Don't clear the slot list during signal emission If signal_impl::clear() is called during signal emission, don't call slots_.clear(). Let signal_impl::sweep() erase all slots after the signal emission. Bug 784550 --- sigc++/signal_base.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sigc++/signal_base.cc b/sigc++/signal_base.cc index cc8342bb..bf9aa37b 100644 --- a/sigc++/signal_base.cc +++ b/sigc++/signal_base.cc @@ -54,6 +54,7 @@ void signal_impl::clear() { // Don't let signal_impl::notify() erase the slots. It would invalidate the // iterator in the following loop. + const bool during_signal_emission = exec_count_ > 0; const bool saved_deferred = deferred_; signal_exec exec(this); @@ -62,9 +63,15 @@ void signal_impl::clear() for (auto& slot : slots_) slot.disconnect(); - deferred_ = saved_deferred; - - slots_.clear(); + // Don't clear slots_ during signal emission. Provided deferred_ is true, + // sweep() will be called from ~signal_exec() after signal emission, + // and it will erase all disconnected slots. + // https://bugzilla.gnome.org/show_bug.cgi?id=784550 + if (!during_signal_emission) + { + deferred_ = saved_deferred; + slots_.clear(); + } } signal_impl::size_type signal_impl::size() const noexcept From 334079bc7d0cd67c2f4c11608c378213d1638132 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Mon, 17 Jul 2017 10:18:29 +0200 Subject: [PATCH 062/145] test_signal: Test calls to signal_base::clear() Call it both during signal emission and otherwise. Bug 784550 --- tests/test_signal.cc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/test_signal.cc b/tests/test_signal.cc index bdd50dc9..801e0bda 100644 --- a/tests/test_signal.cc +++ b/tests/test_signal.cc @@ -120,6 +120,33 @@ void test_std_function_style_syntax() util->check_result(result_stream, "foo(int 1) "); } +void test_clear_called_in_signal_handler() +{ + sigc::signal sig; + sig.connect([]() { result_stream << ", slot 1, "; }); + sig.connect([&sig]() { sig.clear(); result_stream << "slot 2, "; }); + sig.connect([]() { result_stream << "slot 3, "; }); + result_stream << sig.size(); + sig.emit(); + result_stream << sig.size(); + sig.emit(); + util->check_result(result_stream, "3, slot 1, slot 2, 0"); +} + +void test_clear_called_outside_signal_handler() +{ + sigc::signal sig; + sig.connect([]() { result_stream << ", slot 1, "; }); + sig.connect([]() { result_stream << "slot 2, "; }); + sig.connect([]() { result_stream << "slot 3, "; }); + result_stream << sig.size(); + sig.emit(); + sig.clear(); + result_stream << sig.size(); + sig.emit(); + util->check_result(result_stream, "3, slot 1, slot 2, slot 3, 0"); +} + } // end anonymous namespace int main(int argc, char* argv[]) @@ -135,6 +162,8 @@ int main(int argc, char* argv[]) test_reference(); test_make_slot(); test_std_function_style_syntax(); + test_clear_called_in_signal_handler(); + test_clear_called_outside_signal_handler(); return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE; } From a0089c47b0942cf889aaf45e5a5348b6fac644c3 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Thu, 9 Nov 2017 09:13:28 +0100 Subject: [PATCH 063/145] slot_base::set_parent(): Create a dummy slot_rep if necessary set_parent() must always store the supplied parent pointer and cleanup function pointer, or else there may be a memory leak. The pointers are stored in slot_rep. Bug 167714 --- sigc++/functors/slot_base.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sigc++/functors/slot_base.cc b/sigc++/functors/slot_base.cc index 1b8285ad..84b9df72 100644 --- a/sigc++/functors/slot_base.cc +++ b/sigc++/functors/slot_base.cc @@ -36,6 +36,14 @@ struct destroy_notify_struct bool deleted_; }; + +// Used by slot_base::set_parent() when a slot_base without a rep_ is assigned a parent. +class dummy_slot_rep : public sigc::internal::slot_rep +{ +public: + dummy_slot_rep() : slot_rep(nullptr, nullptr, &clone) {} + static void* clone(void*) { return new dummy_slot_rep(); } +}; } // anonymous namespace namespace sigc @@ -263,8 +271,9 @@ slot_base& slot_base::operator=(slot_base&& src) void slot_base::set_parent(void* parent, void* (*cleanup)(void*)) const noexcept { - if (rep_) - rep_->set_parent(parent, cleanup); + if (!rep_) + rep_ = new dummy_slot_rep(); + rep_->set_parent(parent, cleanup); } void slot_base::add_destroy_notify_callback(void* data, func_destroy_notify func) const From 82e7a7be938e2eb6f90a969c043c81ea42e290ab Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Thu, 9 Nov 2017 09:14:40 +0100 Subject: [PATCH 064/145] signal_base docs: Warn against deletion during emission There is no known ABI-preserving fix for a memory leak, if a signal is deleted during emission. Describe a workaround in the documentation. Bug 167714 --- sigc++/signal_base.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sigc++/signal_base.h b/sigc++/signal_base.h index f50a6cb7..843cb5fc 100644 --- a/sigc++/signal_base.h +++ b/sigc++/signal_base.h @@ -297,6 +297,16 @@ struct temp_slot_list * incremented. Both sigc::signal# objects then refer to the same * sigc::internal::signal_impl object. * + * Deleting the signal during emission, e.g. from one of its slots, may result + * in memory leaks. This drawback is fixed in version 3 of libsigc++. + * A workaround is to make a copy of the signal during the emission: + * @code + * sigc::signal<...> sig2(*p_sig); + * p_sig->emit(); + * @endcode + * This is not very costly. A sigc::signal<> is not much more than a pointer to + * a sigc::internal::signal_impl instance, which is not copied. + * * @ingroup signal */ struct SIGC_API signal_base : public trackable From c6262e0a477b35cd9a4a00c34f3f0a44dcd07210 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Fri, 13 Jul 2018 15:09:06 +0200 Subject: [PATCH 065/145] slot, signal: Avoid compiler warnings from function pointer conversions gcc8 -Wextra prints a warning when reinterpret_cast is used for conversion between different types of function pointers. Avoid that by instead using a union with members of the two types of function pointers. Fixes #1 --- sigc++/functors/macros/slot.h.m4 | 48 ++++++++++++++++++-- sigc++/macros/signal.h.m4 | 78 ++++++++++++++++++++++---------- 2 files changed, 98 insertions(+), 28 deletions(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index 60cccbd2..aa656771 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -63,7 +63,17 @@ FOR(1, $1,[ inline T_return operator()(LOOP(arg%1_type_ _A_a%1, $1)) const { if (!empty() && !blocked()) - return (reinterpret_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); + { + // Conversion between different types of function pointers with + // reinterpret_cast can make gcc8 print a warning. + // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 + union { + internal::hook ph; + call_type pc; + } u; + u.ph = slot_base::rep_->call_; + return (u.pc)(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); + } return T_return(); } @@ -355,7 +365,14 @@ ifelse($1,0,[ * @return A function pointer formed from call_it(). */ static hook address() - { return reinterpret_cast(&call_it); } + { + union { + hook ph; + decltype(&call_it) pc; + } u; + u.pc = &call_it; + return u.ph; + } }; ]) @@ -483,7 +500,14 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return reinterpret_cast(&call_it); } + { + union { + hook ph; + decltype(&call_it) pc; + } u; + u.pc = &call_it; + return u.ph; + } }; /** Abstracts functor execution. @@ -515,7 +539,14 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return reinterpret_cast(&call_it); } + { + union { + hook ph; + decltype(&call_it) pc; + } u; + u.pc = &call_it; + return u.ph; + } }; } /* namespace internal */ @@ -575,7 +606,14 @@ public: inline T_return operator()(type_trait_take_t... _A_a) const { if (!empty() && !blocked()) - return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); + { + union { + internal::hook ph; + call_type pc; + } u; + u.ph = slot_base::rep_->call_; + return (u.pc)(slot_base::rep_, _A_a...); + } return T_return(); } diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 8f7ed2a9..8f7f7d37 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -51,7 +51,17 @@ ifelse($1,0,[dnl * @return The slot's return value. */ T_return operator()(const slot_type& _A_slot) const - { return (reinterpret_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } + { + // Conversion between different types of function pointers with + // reinterpret_cast can make gcc8 print a warning. + // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 + union { + internal::hook ph; + typename slot_type::call_type pc; + } u; + u.ph = _A_slot.rep_->call_; + return (u.pc)(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); + } dnl T_return operator()(const slot_type& _A_slot) const dnl { return _A_slot(LOOP(_A_a%1_, $1)); } @@ -150,13 +160,19 @@ FOR(1, $1,[ if (it == slots.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + union { + internal::hook ph; + call_type pc; + } u; + u.ph = it->rep_->call_; + r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != slots.end(); ++it) - { - if (it->empty() || it->blocked()) - continue; - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); - } + { + if (it->empty() || it->blocked()) + continue; + u.ph = it->rep_->call_; + r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); + } } return r_; @@ -201,13 +217,19 @@ FOR(1, $1,[ if (it == reverse_iterator_type(slots.begin())) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + union { + internal::hook ph; + call_type pc; + } u; + u.ph = it->rep_->call_; + r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != reverse_iterator_type(slots.begin()); ++it) - { - if (it->empty() || it->blocked()) - continue; - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); - } + { + if (it->empty() || it->blocked()) + continue; + u.ph = it->rep_->call_; + r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); + } } return r_; @@ -243,12 +265,17 @@ FOR(1, $1,[ signal_exec exec(impl); temp_slot_list slots(impl->slots_); + union { + internal::hook ph; + call_type pc; + } u; for (const auto& slot : slots) - { - if (slot.empty() || slot.blocked()) - continue; - (reinterpret_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); - } + { + if (slot.empty() || slot.blocked()) + continue; + u.ph = slot.rep_->call_; + (u.pc)(LIST(slot.rep_, LOOP(_A_a%1, $1))); + } } _DEPRECATE_IFDEF_START @@ -274,12 +301,17 @@ FOR(1, $1,[ typedef std::reverse_iterator reverse_iterator_type; #endif + union { + internal::hook ph; + call_type pc; + } u; for (auto it = reverse_iterator_type(slots.end()); it != reverse_iterator_type(slots.begin()); ++it) - { - if (it->empty() || it->blocked()) - continue; - (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); - } + { + if (it->empty() || it->blocked()) + continue; + u.ph = it->rep_->call_; + (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); + } } _DEPRECATE_IFDEF_END }; From efe4089f7decfbefb9fb36a1126275fab4c44b78 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Mon, 16 Jul 2018 13:18:31 +0200 Subject: [PATCH 066/145] Revert "slot, signal: Avoid compiler warnings from function pointer conversions" This reverts commit c6262e0a477b35cd9a4a00c34f3f0a44dcd07210. This can be done in a better way by keeping the union in a template function. --- sigc++/functors/macros/slot.h.m4 | 48 ++------------------ sigc++/macros/signal.h.m4 | 78 ++++++++++---------------------- 2 files changed, 28 insertions(+), 98 deletions(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index aa656771..60cccbd2 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -63,17 +63,7 @@ FOR(1, $1,[ inline T_return operator()(LOOP(arg%1_type_ _A_a%1, $1)) const { if (!empty() && !blocked()) - { - // Conversion between different types of function pointers with - // reinterpret_cast can make gcc8 print a warning. - // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 - union { - internal::hook ph; - call_type pc; - } u; - u.ph = slot_base::rep_->call_; - return (u.pc)(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); - } + return (reinterpret_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); return T_return(); } @@ -365,14 +355,7 @@ ifelse($1,0,[ * @return A function pointer formed from call_it(). */ static hook address() - { - union { - hook ph; - decltype(&call_it) pc; - } u; - u.pc = &call_it; - return u.ph; - } + { return reinterpret_cast(&call_it); } }; ]) @@ -500,14 +483,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { - union { - hook ph; - decltype(&call_it) pc; - } u; - u.pc = &call_it; - return u.ph; - } + { return reinterpret_cast(&call_it); } }; /** Abstracts functor execution. @@ -539,14 +515,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { - union { - hook ph; - decltype(&call_it) pc; - } u; - u.pc = &call_it; - return u.ph; - } + { return reinterpret_cast(&call_it); } }; } /* namespace internal */ @@ -606,14 +575,7 @@ public: inline T_return operator()(type_trait_take_t... _A_a) const { if (!empty() && !blocked()) - { - union { - internal::hook ph; - call_type pc; - } u; - u.ph = slot_base::rep_->call_; - return (u.pc)(slot_base::rep_, _A_a...); - } + return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); return T_return(); } diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 8f7f7d37..8f7ed2a9 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -51,17 +51,7 @@ ifelse($1,0,[dnl * @return The slot's return value. */ T_return operator()(const slot_type& _A_slot) const - { - // Conversion between different types of function pointers with - // reinterpret_cast can make gcc8 print a warning. - // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 - union { - internal::hook ph; - typename slot_type::call_type pc; - } u; - u.ph = _A_slot.rep_->call_; - return (u.pc)(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); - } + { return (reinterpret_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } dnl T_return operator()(const slot_type& _A_slot) const dnl { return _A_slot(LOOP(_A_a%1_, $1)); } @@ -160,19 +150,13 @@ FOR(1, $1,[ if (it == slots.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - union { - internal::hook ph; - call_type pc; - } u; - u.ph = it->rep_->call_; - r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != slots.end(); ++it) - { - if (it->empty() || it->blocked()) - continue; - u.ph = it->rep_->call_; - r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); - } + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + } } return r_; @@ -217,19 +201,13 @@ FOR(1, $1,[ if (it == reverse_iterator_type(slots.begin())) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - union { - internal::hook ph; - call_type pc; - } u; - u.ph = it->rep_->call_; - r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != reverse_iterator_type(slots.begin()); ++it) - { - if (it->empty() || it->blocked()) - continue; - u.ph = it->rep_->call_; - r_ = (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); - } + { + if (it->empty() || it->blocked()) + continue; + r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + } } return r_; @@ -265,17 +243,12 @@ FOR(1, $1,[ signal_exec exec(impl); temp_slot_list slots(impl->slots_); - union { - internal::hook ph; - call_type pc; - } u; for (const auto& slot : slots) - { - if (slot.empty() || slot.blocked()) - continue; - u.ph = slot.rep_->call_; - (u.pc)(LIST(slot.rep_, LOOP(_A_a%1, $1))); - } + { + if (slot.empty() || slot.blocked()) + continue; + (reinterpret_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); + } } _DEPRECATE_IFDEF_START @@ -301,17 +274,12 @@ FOR(1, $1,[ typedef std::reverse_iterator reverse_iterator_type; #endif - union { - internal::hook ph; - call_type pc; - } u; for (auto it = reverse_iterator_type(slots.end()); it != reverse_iterator_type(slots.begin()); ++it) - { - if (it->empty() || it->blocked()) - continue; - u.ph = it->rep_->call_; - (u.pc)(LIST(it->rep_, LOOP(_A_a%1, $1))); - } + { + if (it->empty() || it->blocked()) + continue; + (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + } } _DEPRECATE_IFDEF_END }; From 0d8f3cc3ab30b7bb82716de76e4e5afeaf85daac Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Mon, 16 Jul 2018 13:31:46 +0200 Subject: [PATCH 067/145] slot, signal: Avoid compiler warnings from function pointer conversions gcc8 -Wextra prints a warning when reinterpret_cast is used for conversion between different types of function pointers. Avoid that by adding sigc::internal::bitwise_equivalent_cast<>() with a union with members of the two types of function pointers. Fixes #1 --- sigc++/functors/macros/slot.h.m4 | 29 ++++++++++++++++++++++++----- sigc++/macros/signal.h.m4 | 14 +++++++------- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index 60cccbd2..a6c90cf9 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -63,7 +63,7 @@ FOR(1, $1,[ inline T_return operator()(LOOP(arg%1_type_ _A_a%1, $1)) const { if (!empty() && !blocked()) - return (reinterpret_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); + return (internal::bitwise_equivalent_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); return T_return(); } @@ -355,7 +355,7 @@ ifelse($1,0,[ * @return A function pointer formed from call_it(). */ static hook address() - { return reinterpret_cast(&call_it); } + { return bitwise_equivalent_cast(&call_it); } }; ]) @@ -378,6 +378,25 @@ namespace sigc { namespace internal { +// Conversion between different types of function pointers with +// reinterpret_cast can make gcc8 print a warning. +// https://github.com/libsigcplusplus/libsigcplusplus/issues/1 +/** Returns the supplied bit pattern, interpreted as another type. + * + * When reinterpret_cast causes a compiler warning or error, this function + * may work. Intended mainly for conversion between different types of pointers. + */ +template +inline out_type bitwise_equivalent_cast(in_type in) +{ + union { + in_type in; + out_type out; + } u; + u.in = in; + return u.out; +} + /** A typed slot_rep. * A typed slot_rep holds a functor that can be invoked from * slot::operator()(). visit_each() is used to visit the functor's @@ -483,7 +502,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return reinterpret_cast(&call_it); } + { return bitwise_equivalent_cast(&call_it); } }; /** Abstracts functor execution. @@ -515,7 +534,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return reinterpret_cast(&call_it); } + { return bitwise_equivalent_cast(&call_it); } }; } /* namespace internal */ @@ -575,7 +594,7 @@ public: inline T_return operator()(type_trait_take_t... _A_a) const { if (!empty() && !blocked()) - return (reinterpret_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); + return (internal::bitwise_equivalent_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); return T_return(); } diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 8f7ed2a9..29e3cdbb 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -51,7 +51,7 @@ ifelse($1,0,[dnl * @return The slot's return value. */ T_return operator()(const slot_type& _A_slot) const - { return (reinterpret_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } + { return (bitwise_equivalent_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } dnl T_return operator()(const slot_type& _A_slot) const dnl { return _A_slot(LOOP(_A_a%1_, $1)); } @@ -150,12 +150,12 @@ FOR(1, $1,[ if (it == slots.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != slots.end(); ++it) { if (it->empty() || it->blocked()) continue; - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } @@ -201,12 +201,12 @@ FOR(1, $1,[ if (it == reverse_iterator_type(slots.begin())) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != reverse_iterator_type(slots.begin()); ++it) { if (it->empty() || it->blocked()) continue; - r_ = (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } @@ -247,7 +247,7 @@ FOR(1, $1,[ { if (slot.empty() || slot.blocked()) continue; - (reinterpret_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); + (bitwise_equivalent_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); } } @@ -278,7 +278,7 @@ FOR(1, $1,[ { if (it->empty() || it->blocked()) continue; - (reinterpret_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } _DEPRECATE_IFDEF_END From 927d754ffda9ab2ced9627f0cce07720345baddc Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Tue, 17 Jul 2018 17:10:19 +0200 Subject: [PATCH 068/145] Qualify calls to bitwise_equivalent_cast() with namespace names Otherwise indirect calls from glibmm, with its own bitwise_equivalent_cast(), can be ambiguous due to ADL (argument-dependent lookup). --- sigc++/functors/macros/slot.h.m4 | 15 ++++++++++----- sigc++/macros/signal.h.m4 | 14 +++++++------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index a6c90cf9..dee0b133 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -63,7 +63,7 @@ FOR(1, $1,[ inline T_return operator()(LOOP(arg%1_type_ _A_a%1, $1)) const { if (!empty() && !blocked()) - return (internal::bitwise_equivalent_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); + return (sigc::internal::bitwise_equivalent_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); return T_return(); } @@ -355,7 +355,7 @@ ifelse($1,0,[ * @return A function pointer formed from call_it(). */ static hook address() - { return bitwise_equivalent_cast(&call_it); } + { return sigc::internal::bitwise_equivalent_cast(&call_it); } }; ]) @@ -385,6 +385,11 @@ namespace internal { * * When reinterpret_cast causes a compiler warning or error, this function * may work. Intended mainly for conversion between different types of pointers. + * + * Qualify calls with namespace names: sigc::internal::bitwise_equivalent_cast<>(). + * If you don't, indirect calls from another library that also contains a + * bitwise_equivalent_cast<>() (perhaps glibmm), can be ambiguous due to ADL + * (argument-dependent lookup). */ template inline out_type bitwise_equivalent_cast(in_type in) @@ -502,7 +507,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return bitwise_equivalent_cast(&call_it); } + { return sigc::internal::bitwise_equivalent_cast(&call_it); } }; /** Abstracts functor execution. @@ -534,7 +539,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return bitwise_equivalent_cast(&call_it); } + { return sigc::internal::bitwise_equivalent_cast(&call_it); } }; } /* namespace internal */ @@ -594,7 +599,7 @@ public: inline T_return operator()(type_trait_take_t... _A_a) const { if (!empty() && !blocked()) - return (internal::bitwise_equivalent_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); + return (sigc::internal::bitwise_equivalent_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); return T_return(); } diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 29e3cdbb..00040f4c 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -51,7 +51,7 @@ ifelse($1,0,[dnl * @return The slot's return value. */ T_return operator()(const slot_type& _A_slot) const - { return (bitwise_equivalent_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } + { return (sigc::internal::bitwise_equivalent_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } dnl T_return operator()(const slot_type& _A_slot) const dnl { return _A_slot(LOOP(_A_a%1_, $1)); } @@ -150,12 +150,12 @@ FOR(1, $1,[ if (it == slots.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != slots.end(); ++it) { if (it->empty() || it->blocked()) continue; - r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } @@ -201,12 +201,12 @@ FOR(1, $1,[ if (it == reverse_iterator_type(slots.begin())) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != reverse_iterator_type(slots.begin()); ++it) { if (it->empty() || it->blocked()) continue; - r_ = (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } @@ -247,7 +247,7 @@ FOR(1, $1,[ { if (slot.empty() || slot.blocked()) continue; - (bitwise_equivalent_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); + (sigc::internal::bitwise_equivalent_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); } } @@ -278,7 +278,7 @@ FOR(1, $1,[ { if (it->empty() || it->blocked()) continue; - (bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } _DEPRECATE_IFDEF_END From d217110d8d1d091b0acc5d7f742f303f23773b01 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Thu, 2 Aug 2018 13:50:18 +0200 Subject: [PATCH 069/145] README: Update contact information --- README | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README b/README index d5c52b28..60cfeff6 100644 --- a/README +++ b/README @@ -12,7 +12,7 @@ General information: depend on GTK+ or gtkmm. Further information is available on the libsigc++ project home page: - http://libsigc.sourceforge.net/ + https://libsigcplusplus.github.io/libsigcplusplus/ License information: @@ -24,11 +24,12 @@ License information: Contact information: Maintainer: mailto: murrayc@murrayc.com Maillist: mailto: libsigc-list@gnome.org - Homepage: http://libsigc.sourceforge.net + Homepage: https://libsigcplusplus.github.io/libsigcplusplus/ Online reference documentation: https://developer.gnome.org/libsigc++/unstable/ Download: http://ftp.gnome.org/pub/GNOME/sources/libsigc++/ https://download.gnome.org/sources/libsigc++/ - Git: https://git.gnome.org/browse/libsigcplusplus/ + Git: https://github.com/libsigcplusplus/libsigcplusplus + Bug reports: https://github.com/libsigcplusplus/libsigcplusplus/issues Overview of the distribution: From a144139a177ee840207737176a314094efab06c0 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Thu, 2 Aug 2018 13:50:44 +0200 Subject: [PATCH 070/145] configure.ac: Update home page and bug report address --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 80e85056..81cb756f 100644 --- a/configure.ac +++ b/configure.ac @@ -16,8 +16,8 @@ ## along with this library. If not, see . AC_INIT([libsigc++], [2.10.0], - [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B], - [libsigc++], [http://libsigc.sourceforge.net/]) + [https://github.com/libsigcplusplus/libsigcplusplus/issues/], + [libsigc++], [https://libsigcplusplus.github.io/libsigcplusplus/]) AC_PREREQ([2.59]) AC_CONFIG_SRCDIR([sigc++/sigc++.h]) From 8bed5b9a9419b13cf928ddaf9b237962023a6640 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Thu, 2 Aug 2018 13:51:19 +0200 Subject: [PATCH 071/145] Update libsigcplusplus.doap --- libsigcplusplus.doap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsigcplusplus.doap b/libsigcplusplus.doap index 5240e732..cd69f0c4 100644 --- a/libsigcplusplus.doap +++ b/libsigcplusplus.doap @@ -12,8 +12,8 @@ callback function, either global or a member function, regardless of whether it is static or virtual. libsigc++ is also used by glibmm and gtkmm to wrap Glib and GTK+ signals. - - + + C++ @@ -29,7 +29,7 @@ libsigc++ is also used by glibmm and gtkmm to wrap Glib and GTK+ signals. Kjell Ahlstedt - + kjellahl From a5607f88a1024c5a919fb866a20a14f48361279b Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Wed, 29 Aug 2018 12:39:25 +0200 Subject: [PATCH 072/145] slot, signal: Avoid compiler warnings from function pointer conversions gcc8 -Wextra prints a warning when a single reinterpret_cast is used for conversion between different types of function pointers. The previous fix with a union in sigc::internal::bitwise_equivalent_cast<>() is not standard C++. Rename the function to function_pointer_cast<>(), and use two reinterpret_casts as recommended in gcc's documentation. Fixes #8 --- sigc++/functors/macros/slot.h.m4 | 34 +++++++++++++++----------------- sigc++/macros/signal.h.m4 | 14 ++++++------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4 index dee0b133..f22dba22 100644 --- a/sigc++/functors/macros/slot.h.m4 +++ b/sigc++/functors/macros/slot.h.m4 @@ -63,7 +63,7 @@ FOR(1, $1,[ inline T_return operator()(LOOP(arg%1_type_ _A_a%1, $1)) const { if (!empty() && !blocked()) - return (sigc::internal::bitwise_equivalent_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); + return (sigc::internal::function_pointer_cast(slot_base::rep_->call_))(LIST(slot_base::rep_, LOOP(_A_a%1, $1))); return T_return(); } @@ -355,7 +355,7 @@ ifelse($1,0,[ * @return A function pointer formed from call_it(). */ static hook address() - { return sigc::internal::bitwise_equivalent_cast(&call_it); } + { return sigc::internal::function_pointer_cast(&call_it); } }; ]) @@ -381,25 +381,23 @@ namespace internal { // Conversion between different types of function pointers with // reinterpret_cast can make gcc8 print a warning. // https://github.com/libsigcplusplus/libsigcplusplus/issues/1 -/** Returns the supplied bit pattern, interpreted as another type. +// https://github.com/libsigcplusplus/libsigcplusplus/issues/8 +/** Returns the supplied function pointer, cast to a pointer to another function type. * - * When reinterpret_cast causes a compiler warning or error, this function - * may work. Intended mainly for conversion between different types of pointers. + * When a single reinterpret_cast between function pointer types causes a + * compiler warning or error, this function may work. * - * Qualify calls with namespace names: sigc::internal::bitwise_equivalent_cast<>(). + * Qualify calls with namespace names: sigc::internal::function_pointer_cast<>(). * If you don't, indirect calls from another library that also contains a - * bitwise_equivalent_cast<>() (perhaps glibmm), can be ambiguous due to ADL + * function_pointer_cast<>() (perhaps glibmm), can be ambiguous due to ADL * (argument-dependent lookup). */ -template -inline out_type bitwise_equivalent_cast(in_type in) +template +inline T_out function_pointer_cast(T_in in) { - union { - in_type in; - out_type out; - } u; - u.in = in; - return u.out; + // The double reinterpret_cast suppresses a warning from gcc8 with the + // -Wcast-function-type option. + return reinterpret_cast(reinterpret_cast(in)); } /** A typed slot_rep. @@ -507,7 +505,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return sigc::internal::bitwise_equivalent_cast(&call_it); } + { return sigc::internal::function_pointer_cast(&call_it); } }; /** Abstracts functor execution. @@ -539,7 +537,7 @@ struct slot_call * @return A function pointer formed from call_it(). */ static hook address() - { return sigc::internal::bitwise_equivalent_cast(&call_it); } + { return sigc::internal::function_pointer_cast(&call_it); } }; } /* namespace internal */ @@ -599,7 +597,7 @@ public: inline T_return operator()(type_trait_take_t... _A_a) const { if (!empty() && !blocked()) - return (sigc::internal::bitwise_equivalent_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); + return (sigc::internal::function_pointer_cast(slot_base::rep_->call_))(slot_base::rep_, _A_a...); return T_return(); } diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4 index 00040f4c..9489256e 100644 --- a/sigc++/macros/signal.h.m4 +++ b/sigc++/macros/signal.h.m4 @@ -51,7 +51,7 @@ ifelse($1,0,[dnl * @return The slot's return value. */ T_return operator()(const slot_type& _A_slot) const - { return (sigc::internal::bitwise_equivalent_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } + { return (sigc::internal::function_pointer_cast(_A_slot.rep_->call_))(LIST(_A_slot.rep_, LOOP(_A_a%1_, $1))); } dnl T_return operator()(const slot_type& _A_slot) const dnl { return _A_slot(LOOP(_A_a%1_, $1)); } @@ -150,12 +150,12 @@ FOR(1, $1,[ if (it == slots.end()) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::function_pointer_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != slots.end(); ++it) { if (it->empty() || it->blocked()) continue; - r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::function_pointer_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } @@ -201,12 +201,12 @@ FOR(1, $1,[ if (it == reverse_iterator_type(slots.begin())) return T_return(); // note that 'T_return r_();' doesn't work => define 'r_' after this line and initialize as follows: - r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::function_pointer_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); for (++it; it != reverse_iterator_type(slots.begin()); ++it) { if (it->empty() || it->blocked()) continue; - r_ = (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + r_ = (sigc::internal::function_pointer_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } @@ -247,7 +247,7 @@ FOR(1, $1,[ { if (slot.empty() || slot.blocked()) continue; - (sigc::internal::bitwise_equivalent_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); + (sigc::internal::function_pointer_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%1, $1))); } } @@ -278,7 +278,7 @@ FOR(1, $1,[ { if (it->empty() || it->blocked()) continue; - (sigc::internal::bitwise_equivalent_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); + (sigc::internal::function_pointer_cast(it->rep_->call_))(LIST(it->rep_, LOOP(_A_a%1, $1))); } } _DEPRECATE_IFDEF_END From ac6c618da02746c0097a84d1d48a2a02b134b3d6 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Fri, 7 Sep 2018 15:47:35 +0800 Subject: [PATCH 073/145] builds: Rename MSVC_Net2013 as MSVC_NMake This is to prepare for the transition for the Visual Studio build files to NMake Makefiles. --- {MSVC_Net2013 => MSVC_NMake}/filelist.am | 0 {MSVC_Net2013 => MSVC_NMake}/libsigc++2.sln | 0 {MSVC_Net2013 => MSVC_NMake}/libsigc++2.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/libsigc++2.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/sigc-build-defines.props | 0 .../sigc-debug-dll-build-defines.props | 0 {MSVC_Net2013 => MSVC_NMake}/sigc-install.props | 0 {MSVC_Net2013 => MSVC_NMake}/sigc-install.vcxproj | 0 .../sigc-release-dll-build-defines.props | 0 {MSVC_Net2013 => MSVC_NMake}/sigc-version-paths.props | 0 {MSVC_Net2013 => MSVC_NMake}/sigc.rc.in | 0 {MSVC_Net2013 => MSVC_NMake}/test_accum_iter.vcxproj | 0 .../test_accum_iter.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_accumulated.vcxproj | 0 .../test_accumulated.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_bind.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_bind.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_bind_ref.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_bind_ref.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_bind_refptr.vcxproj | 0 .../test_bind_refptr.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_bind_return.vcxproj | 0 .../test_bind_return.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_compose.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_compose.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_copy_invalid_slot.vcxproj | 0 .../test_copy_invalid_slot.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_cpp11_lambda.vcxproj | 0 .../test_cpp11_lambda.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_custom.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_custom.vcxproj.filters | 0 .../test_deduce_result_type.vcxproj | 0 .../test_deduce_result_type.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_disconnect.vcxproj | 0 .../test_disconnect.vcxproj.filters | 0 .../test_disconnect_during_emit.vcxproj | 0 .../test_disconnect_during_emit.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_exception_catch.vcxproj | 0 .../test_exception_catch.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_functor_trait.vcxproj | 0 .../test_functor_trait.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_hide.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_hide.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_limit_reference.vcxproj | 0 .../test_limit_reference.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_mem_fun.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_mem_fun.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_ptr_fun.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_ptr_fun.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_retype.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_retype.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_retype_return.vcxproj | 0 .../test_retype_return.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_signal.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_signal.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_size.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_size.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_slot.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_slot.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_slot_disconnect.vcxproj | 0 .../test_slot_disconnect.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_track_obj.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_track_obj.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_trackable.vcxproj | 0 {MSVC_Net2013 => MSVC_NMake}/test_trackable.vcxproj.filters | 0 {MSVC_Net2013 => MSVC_NMake}/test_visit_each.vcxproj | 0 .../test_visit_each.vcxproj.filters | 0 Makefile.am | 6 +++--- configure.ac | 6 +++--- 69 files changed, 6 insertions(+), 6 deletions(-) rename {MSVC_Net2013 => MSVC_NMake}/filelist.am (100%) rename {MSVC_Net2013 => MSVC_NMake}/libsigc++2.sln (100%) rename {MSVC_Net2013 => MSVC_NMake}/libsigc++2.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/libsigc++2.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/sigc-build-defines.props (100%) rename {MSVC_Net2013 => MSVC_NMake}/sigc-debug-dll-build-defines.props (100%) rename {MSVC_Net2013 => MSVC_NMake}/sigc-install.props (100%) rename {MSVC_Net2013 => MSVC_NMake}/sigc-install.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/sigc-release-dll-build-defines.props (100%) rename {MSVC_Net2013 => MSVC_NMake}/sigc-version-paths.props (100%) rename {MSVC_Net2013 => MSVC_NMake}/sigc.rc.in (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_accum_iter.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_accum_iter.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_accumulated.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_accumulated.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind_ref.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind_ref.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind_refptr.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind_refptr.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind_return.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_bind_return.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_compose.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_compose.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_copy_invalid_slot.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_copy_invalid_slot.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_cpp11_lambda.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_cpp11_lambda.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_custom.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_custom.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_deduce_result_type.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_deduce_result_type.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_disconnect.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_disconnect.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_disconnect_during_emit.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_disconnect_during_emit.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_exception_catch.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_exception_catch.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_functor_trait.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_functor_trait.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_hide.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_hide.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_limit_reference.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_limit_reference.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_mem_fun.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_mem_fun.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_ptr_fun.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_ptr_fun.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_retype.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_retype.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_retype_return.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_retype_return.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_signal.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_signal.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_size.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_size.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_slot.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_slot.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_slot_disconnect.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_slot_disconnect.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_track_obj.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_track_obj.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_trackable.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_trackable.vcxproj.filters (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_visit_each.vcxproj (100%) rename {MSVC_Net2013 => MSVC_NMake}/test_visit_each.vcxproj.filters (100%) diff --git a/MSVC_Net2013/filelist.am b/MSVC_NMake/filelist.am similarity index 100% rename from MSVC_Net2013/filelist.am rename to MSVC_NMake/filelist.am diff --git a/MSVC_Net2013/libsigc++2.sln b/MSVC_NMake/libsigc++2.sln similarity index 100% rename from MSVC_Net2013/libsigc++2.sln rename to MSVC_NMake/libsigc++2.sln diff --git a/MSVC_Net2013/libsigc++2.vcxproj b/MSVC_NMake/libsigc++2.vcxproj similarity index 100% rename from MSVC_Net2013/libsigc++2.vcxproj rename to MSVC_NMake/libsigc++2.vcxproj diff --git a/MSVC_Net2013/libsigc++2.vcxproj.filters b/MSVC_NMake/libsigc++2.vcxproj.filters similarity index 100% rename from MSVC_Net2013/libsigc++2.vcxproj.filters rename to MSVC_NMake/libsigc++2.vcxproj.filters diff --git a/MSVC_Net2013/sigc-build-defines.props b/MSVC_NMake/sigc-build-defines.props similarity index 100% rename from MSVC_Net2013/sigc-build-defines.props rename to MSVC_NMake/sigc-build-defines.props diff --git a/MSVC_Net2013/sigc-debug-dll-build-defines.props b/MSVC_NMake/sigc-debug-dll-build-defines.props similarity index 100% rename from MSVC_Net2013/sigc-debug-dll-build-defines.props rename to MSVC_NMake/sigc-debug-dll-build-defines.props diff --git a/MSVC_Net2013/sigc-install.props b/MSVC_NMake/sigc-install.props similarity index 100% rename from MSVC_Net2013/sigc-install.props rename to MSVC_NMake/sigc-install.props diff --git a/MSVC_Net2013/sigc-install.vcxproj b/MSVC_NMake/sigc-install.vcxproj similarity index 100% rename from MSVC_Net2013/sigc-install.vcxproj rename to MSVC_NMake/sigc-install.vcxproj diff --git a/MSVC_Net2013/sigc-release-dll-build-defines.props b/MSVC_NMake/sigc-release-dll-build-defines.props similarity index 100% rename from MSVC_Net2013/sigc-release-dll-build-defines.props rename to MSVC_NMake/sigc-release-dll-build-defines.props diff --git a/MSVC_Net2013/sigc-version-paths.props b/MSVC_NMake/sigc-version-paths.props similarity index 100% rename from MSVC_Net2013/sigc-version-paths.props rename to MSVC_NMake/sigc-version-paths.props diff --git a/MSVC_Net2013/sigc.rc.in b/MSVC_NMake/sigc.rc.in similarity index 100% rename from MSVC_Net2013/sigc.rc.in rename to MSVC_NMake/sigc.rc.in diff --git a/MSVC_Net2013/test_accum_iter.vcxproj b/MSVC_NMake/test_accum_iter.vcxproj similarity index 100% rename from MSVC_Net2013/test_accum_iter.vcxproj rename to MSVC_NMake/test_accum_iter.vcxproj diff --git a/MSVC_Net2013/test_accum_iter.vcxproj.filters b/MSVC_NMake/test_accum_iter.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_accum_iter.vcxproj.filters rename to MSVC_NMake/test_accum_iter.vcxproj.filters diff --git a/MSVC_Net2013/test_accumulated.vcxproj b/MSVC_NMake/test_accumulated.vcxproj similarity index 100% rename from MSVC_Net2013/test_accumulated.vcxproj rename to MSVC_NMake/test_accumulated.vcxproj diff --git a/MSVC_Net2013/test_accumulated.vcxproj.filters b/MSVC_NMake/test_accumulated.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_accumulated.vcxproj.filters rename to MSVC_NMake/test_accumulated.vcxproj.filters diff --git a/MSVC_Net2013/test_bind.vcxproj b/MSVC_NMake/test_bind.vcxproj similarity index 100% rename from MSVC_Net2013/test_bind.vcxproj rename to MSVC_NMake/test_bind.vcxproj diff --git a/MSVC_Net2013/test_bind.vcxproj.filters b/MSVC_NMake/test_bind.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_bind.vcxproj.filters rename to MSVC_NMake/test_bind.vcxproj.filters diff --git a/MSVC_Net2013/test_bind_ref.vcxproj b/MSVC_NMake/test_bind_ref.vcxproj similarity index 100% rename from MSVC_Net2013/test_bind_ref.vcxproj rename to MSVC_NMake/test_bind_ref.vcxproj diff --git a/MSVC_Net2013/test_bind_ref.vcxproj.filters b/MSVC_NMake/test_bind_ref.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_bind_ref.vcxproj.filters rename to MSVC_NMake/test_bind_ref.vcxproj.filters diff --git a/MSVC_Net2013/test_bind_refptr.vcxproj b/MSVC_NMake/test_bind_refptr.vcxproj similarity index 100% rename from MSVC_Net2013/test_bind_refptr.vcxproj rename to MSVC_NMake/test_bind_refptr.vcxproj diff --git a/MSVC_Net2013/test_bind_refptr.vcxproj.filters b/MSVC_NMake/test_bind_refptr.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_bind_refptr.vcxproj.filters rename to MSVC_NMake/test_bind_refptr.vcxproj.filters diff --git a/MSVC_Net2013/test_bind_return.vcxproj b/MSVC_NMake/test_bind_return.vcxproj similarity index 100% rename from MSVC_Net2013/test_bind_return.vcxproj rename to MSVC_NMake/test_bind_return.vcxproj diff --git a/MSVC_Net2013/test_bind_return.vcxproj.filters b/MSVC_NMake/test_bind_return.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_bind_return.vcxproj.filters rename to MSVC_NMake/test_bind_return.vcxproj.filters diff --git a/MSVC_Net2013/test_compose.vcxproj b/MSVC_NMake/test_compose.vcxproj similarity index 100% rename from MSVC_Net2013/test_compose.vcxproj rename to MSVC_NMake/test_compose.vcxproj diff --git a/MSVC_Net2013/test_compose.vcxproj.filters b/MSVC_NMake/test_compose.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_compose.vcxproj.filters rename to MSVC_NMake/test_compose.vcxproj.filters diff --git a/MSVC_Net2013/test_copy_invalid_slot.vcxproj b/MSVC_NMake/test_copy_invalid_slot.vcxproj similarity index 100% rename from MSVC_Net2013/test_copy_invalid_slot.vcxproj rename to MSVC_NMake/test_copy_invalid_slot.vcxproj diff --git a/MSVC_Net2013/test_copy_invalid_slot.vcxproj.filters b/MSVC_NMake/test_copy_invalid_slot.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_copy_invalid_slot.vcxproj.filters rename to MSVC_NMake/test_copy_invalid_slot.vcxproj.filters diff --git a/MSVC_Net2013/test_cpp11_lambda.vcxproj b/MSVC_NMake/test_cpp11_lambda.vcxproj similarity index 100% rename from MSVC_Net2013/test_cpp11_lambda.vcxproj rename to MSVC_NMake/test_cpp11_lambda.vcxproj diff --git a/MSVC_Net2013/test_cpp11_lambda.vcxproj.filters b/MSVC_NMake/test_cpp11_lambda.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_cpp11_lambda.vcxproj.filters rename to MSVC_NMake/test_cpp11_lambda.vcxproj.filters diff --git a/MSVC_Net2013/test_custom.vcxproj b/MSVC_NMake/test_custom.vcxproj similarity index 100% rename from MSVC_Net2013/test_custom.vcxproj rename to MSVC_NMake/test_custom.vcxproj diff --git a/MSVC_Net2013/test_custom.vcxproj.filters b/MSVC_NMake/test_custom.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_custom.vcxproj.filters rename to MSVC_NMake/test_custom.vcxproj.filters diff --git a/MSVC_Net2013/test_deduce_result_type.vcxproj b/MSVC_NMake/test_deduce_result_type.vcxproj similarity index 100% rename from MSVC_Net2013/test_deduce_result_type.vcxproj rename to MSVC_NMake/test_deduce_result_type.vcxproj diff --git a/MSVC_Net2013/test_deduce_result_type.vcxproj.filters b/MSVC_NMake/test_deduce_result_type.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_deduce_result_type.vcxproj.filters rename to MSVC_NMake/test_deduce_result_type.vcxproj.filters diff --git a/MSVC_Net2013/test_disconnect.vcxproj b/MSVC_NMake/test_disconnect.vcxproj similarity index 100% rename from MSVC_Net2013/test_disconnect.vcxproj rename to MSVC_NMake/test_disconnect.vcxproj diff --git a/MSVC_Net2013/test_disconnect.vcxproj.filters b/MSVC_NMake/test_disconnect.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_disconnect.vcxproj.filters rename to MSVC_NMake/test_disconnect.vcxproj.filters diff --git a/MSVC_Net2013/test_disconnect_during_emit.vcxproj b/MSVC_NMake/test_disconnect_during_emit.vcxproj similarity index 100% rename from MSVC_Net2013/test_disconnect_during_emit.vcxproj rename to MSVC_NMake/test_disconnect_during_emit.vcxproj diff --git a/MSVC_Net2013/test_disconnect_during_emit.vcxproj.filters b/MSVC_NMake/test_disconnect_during_emit.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_disconnect_during_emit.vcxproj.filters rename to MSVC_NMake/test_disconnect_during_emit.vcxproj.filters diff --git a/MSVC_Net2013/test_exception_catch.vcxproj b/MSVC_NMake/test_exception_catch.vcxproj similarity index 100% rename from MSVC_Net2013/test_exception_catch.vcxproj rename to MSVC_NMake/test_exception_catch.vcxproj diff --git a/MSVC_Net2013/test_exception_catch.vcxproj.filters b/MSVC_NMake/test_exception_catch.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_exception_catch.vcxproj.filters rename to MSVC_NMake/test_exception_catch.vcxproj.filters diff --git a/MSVC_Net2013/test_functor_trait.vcxproj b/MSVC_NMake/test_functor_trait.vcxproj similarity index 100% rename from MSVC_Net2013/test_functor_trait.vcxproj rename to MSVC_NMake/test_functor_trait.vcxproj diff --git a/MSVC_Net2013/test_functor_trait.vcxproj.filters b/MSVC_NMake/test_functor_trait.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_functor_trait.vcxproj.filters rename to MSVC_NMake/test_functor_trait.vcxproj.filters diff --git a/MSVC_Net2013/test_hide.vcxproj b/MSVC_NMake/test_hide.vcxproj similarity index 100% rename from MSVC_Net2013/test_hide.vcxproj rename to MSVC_NMake/test_hide.vcxproj diff --git a/MSVC_Net2013/test_hide.vcxproj.filters b/MSVC_NMake/test_hide.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_hide.vcxproj.filters rename to MSVC_NMake/test_hide.vcxproj.filters diff --git a/MSVC_Net2013/test_limit_reference.vcxproj b/MSVC_NMake/test_limit_reference.vcxproj similarity index 100% rename from MSVC_Net2013/test_limit_reference.vcxproj rename to MSVC_NMake/test_limit_reference.vcxproj diff --git a/MSVC_Net2013/test_limit_reference.vcxproj.filters b/MSVC_NMake/test_limit_reference.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_limit_reference.vcxproj.filters rename to MSVC_NMake/test_limit_reference.vcxproj.filters diff --git a/MSVC_Net2013/test_mem_fun.vcxproj b/MSVC_NMake/test_mem_fun.vcxproj similarity index 100% rename from MSVC_Net2013/test_mem_fun.vcxproj rename to MSVC_NMake/test_mem_fun.vcxproj diff --git a/MSVC_Net2013/test_mem_fun.vcxproj.filters b/MSVC_NMake/test_mem_fun.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_mem_fun.vcxproj.filters rename to MSVC_NMake/test_mem_fun.vcxproj.filters diff --git a/MSVC_Net2013/test_ptr_fun.vcxproj b/MSVC_NMake/test_ptr_fun.vcxproj similarity index 100% rename from MSVC_Net2013/test_ptr_fun.vcxproj rename to MSVC_NMake/test_ptr_fun.vcxproj diff --git a/MSVC_Net2013/test_ptr_fun.vcxproj.filters b/MSVC_NMake/test_ptr_fun.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_ptr_fun.vcxproj.filters rename to MSVC_NMake/test_ptr_fun.vcxproj.filters diff --git a/MSVC_Net2013/test_retype.vcxproj b/MSVC_NMake/test_retype.vcxproj similarity index 100% rename from MSVC_Net2013/test_retype.vcxproj rename to MSVC_NMake/test_retype.vcxproj diff --git a/MSVC_Net2013/test_retype.vcxproj.filters b/MSVC_NMake/test_retype.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_retype.vcxproj.filters rename to MSVC_NMake/test_retype.vcxproj.filters diff --git a/MSVC_Net2013/test_retype_return.vcxproj b/MSVC_NMake/test_retype_return.vcxproj similarity index 100% rename from MSVC_Net2013/test_retype_return.vcxproj rename to MSVC_NMake/test_retype_return.vcxproj diff --git a/MSVC_Net2013/test_retype_return.vcxproj.filters b/MSVC_NMake/test_retype_return.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_retype_return.vcxproj.filters rename to MSVC_NMake/test_retype_return.vcxproj.filters diff --git a/MSVC_Net2013/test_signal.vcxproj b/MSVC_NMake/test_signal.vcxproj similarity index 100% rename from MSVC_Net2013/test_signal.vcxproj rename to MSVC_NMake/test_signal.vcxproj diff --git a/MSVC_Net2013/test_signal.vcxproj.filters b/MSVC_NMake/test_signal.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_signal.vcxproj.filters rename to MSVC_NMake/test_signal.vcxproj.filters diff --git a/MSVC_Net2013/test_size.vcxproj b/MSVC_NMake/test_size.vcxproj similarity index 100% rename from MSVC_Net2013/test_size.vcxproj rename to MSVC_NMake/test_size.vcxproj diff --git a/MSVC_Net2013/test_size.vcxproj.filters b/MSVC_NMake/test_size.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_size.vcxproj.filters rename to MSVC_NMake/test_size.vcxproj.filters diff --git a/MSVC_Net2013/test_slot.vcxproj b/MSVC_NMake/test_slot.vcxproj similarity index 100% rename from MSVC_Net2013/test_slot.vcxproj rename to MSVC_NMake/test_slot.vcxproj diff --git a/MSVC_Net2013/test_slot.vcxproj.filters b/MSVC_NMake/test_slot.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_slot.vcxproj.filters rename to MSVC_NMake/test_slot.vcxproj.filters diff --git a/MSVC_Net2013/test_slot_disconnect.vcxproj b/MSVC_NMake/test_slot_disconnect.vcxproj similarity index 100% rename from MSVC_Net2013/test_slot_disconnect.vcxproj rename to MSVC_NMake/test_slot_disconnect.vcxproj diff --git a/MSVC_Net2013/test_slot_disconnect.vcxproj.filters b/MSVC_NMake/test_slot_disconnect.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_slot_disconnect.vcxproj.filters rename to MSVC_NMake/test_slot_disconnect.vcxproj.filters diff --git a/MSVC_Net2013/test_track_obj.vcxproj b/MSVC_NMake/test_track_obj.vcxproj similarity index 100% rename from MSVC_Net2013/test_track_obj.vcxproj rename to MSVC_NMake/test_track_obj.vcxproj diff --git a/MSVC_Net2013/test_track_obj.vcxproj.filters b/MSVC_NMake/test_track_obj.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_track_obj.vcxproj.filters rename to MSVC_NMake/test_track_obj.vcxproj.filters diff --git a/MSVC_Net2013/test_trackable.vcxproj b/MSVC_NMake/test_trackable.vcxproj similarity index 100% rename from MSVC_Net2013/test_trackable.vcxproj rename to MSVC_NMake/test_trackable.vcxproj diff --git a/MSVC_Net2013/test_trackable.vcxproj.filters b/MSVC_NMake/test_trackable.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_trackable.vcxproj.filters rename to MSVC_NMake/test_trackable.vcxproj.filters diff --git a/MSVC_Net2013/test_visit_each.vcxproj b/MSVC_NMake/test_visit_each.vcxproj similarity index 100% rename from MSVC_Net2013/test_visit_each.vcxproj rename to MSVC_NMake/test_visit_each.vcxproj diff --git a/MSVC_Net2013/test_visit_each.vcxproj.filters b/MSVC_NMake/test_visit_each.vcxproj.filters similarity index 100% rename from MSVC_Net2013/test_visit_each.vcxproj.filters rename to MSVC_NMake/test_visit_each.vcxproj.filters diff --git a/Makefile.am b/Makefile.am index 1ae3b2ef..72e57e5e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -33,11 +33,11 @@ noinst_DATA = $(SIGCXX_MODULE_NAME)-uninstalled.pc dist_noinst_SCRIPTS = autogen.sh -include $(srcdir)/MSVC_Net2013/filelist.am +include $(srcdir)/MSVC_NMake/filelist.am -dist_noinst_DATA = $(addprefix MSVC_Net2013/,$(msvc_net2013_data)) +dist_noinst_DATA = $(addprefix MSVC_NMake/,$(msvc_net2013_data)) -DISTCLEANFILES = MSVC_Net2013/sigc++config.h +DISTCLEANFILES = MSVC_NMake/sigc++config.h # Optional: auto-generate the ChangeLog file from the git log on make dist include $(top_srcdir)/build/dist-changelog.am diff --git a/configure.ac b/configure.ac index 81cb756f..7651f8ff 100644 --- a/configure.ac +++ b/configure.ac @@ -91,9 +91,9 @@ AC_CONFIG_FILES([Makefile tests/Makefile docs/Makefile docs/reference/Doxyfile - MSVC_Net2013/sigc.rc]) + MSVC_NMake/sigc.rc]) # Copy the generated configuration headers into the MSVC project directories. -AC_CONFIG_COMMANDS([MSVC_Net2013/sigc++config.h], - [cp -f sigc++config.h MSVC_Net2013/sigc++config.h]) +AC_CONFIG_COMMANDS([MSVC_NMake/sigc++config.h], + [cp -f sigc++config.h MSVC_NMake/sigc++config.h]) AC_OUTPUT From 371963bff050cee1a50ba070a056cfcef09e9ab4 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Mon, 10 Sep 2018 11:45:45 +0800 Subject: [PATCH 074/145] build: Consolidate source listing into sigc++/filelist.am This is for enabling the upcoming NMake Makefiles to use this file as well, in addition to the autotools build files, to build the libsigc++ DLL. --- sigc++/Makefile.am | 7 +------ sigc++/filelist.am | 7 +++++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/sigc++/Makefile.am b/sigc++/Makefile.am index 4fc2e064..c064cae4 100644 --- a/sigc++/Makefile.am +++ b/sigc++/Makefile.am @@ -29,12 +29,7 @@ nobase_library_include_HEADERS = sigc++.h $(sigc_public_h) $(sigc_built_h) lib_LTLIBRARIES = libsigc-@SIGCXX_API_VERSION@.la -libsigc_@SIGCXX_API_VERSION@_la_SOURCES = \ - signal_base.cc \ - trackable.cc \ - connection.cc \ - functors/slot_base.cc \ - adaptors/lambda/lambda.cc +libsigc_@SIGCXX_API_VERSION@_la_SOURCES = $(sigc_sources_cc) EXTRA_libsigc_@SIGCXX_API_VERSION@_la_SOURCES = $(sigc_built_cc) diff --git a/sigc++/filelist.am b/sigc++/filelist.am index 9663ea86..5d46bf42 100644 --- a/sigc++/filelist.am +++ b/sigc++/filelist.am @@ -68,3 +68,10 @@ sigc_public_h = \ adaptors/bound_argument.h \ functors/functors.h \ functors/slot_base.h + +sigc_sources_cc = \ + signal_base.cc \ + trackable.cc \ + connection.cc \ + functors/slot_base.cc \ + adaptors/lambda/lambda.cc From 62eb2f99caf7648c33daebb5e8ae550f7561fc73 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Mon, 10 Sep 2018 12:09:44 +0800 Subject: [PATCH 075/145] builds: Add NMake Makefiles This adds a set of NMake Makefiles that can be used to build libsigc++-2.10.x (and the later C++11 versions of libsigc++) with Visual Studio 2013 or later. Building the example, the tests and the benchmarking programs are supported in addition to building the main libsigc++ DLL. Note that for the C++-11 releases, we name the DLLs and LIBs as sigc-vc140-2_0.[dll|lib] or sigc-vc140-d-2_0.[dll|lib] for Visual Studio 2015 and 2017 builds as these builds link to the msvcp140[d].dll and vcruntime140[d].dll C/C++ runtime DLLs. This set of NMake Makefiles are now dist'ed in place of the Visual Studio 2013 project files. --- MSVC_NMake/Makefile.vc | 57 ++++++++++++ MSVC_NMake/build-rules-msvc.mak | 92 +++++++++++++++++++ MSVC_NMake/config-msvc.mak | 43 +++++++++ MSVC_NMake/create-lists-msvc.mak | 73 ++++++++++++++++ MSVC_NMake/create-lists.bat | 42 +++++++++ MSVC_NMake/detectenv-msvc.mak | 146 +++++++++++++++++++++++++++++++ MSVC_NMake/filelist.am | 80 +++-------------- MSVC_NMake/generate-msvc.mak | 8 ++ MSVC_NMake/info-msvc.mak | 40 +++++++++ MSVC_NMake/install.mak | 19 ++++ Makefile.am | 2 +- 11 files changed, 533 insertions(+), 69 deletions(-) create mode 100644 MSVC_NMake/Makefile.vc create mode 100644 MSVC_NMake/build-rules-msvc.mak create mode 100644 MSVC_NMake/config-msvc.mak create mode 100644 MSVC_NMake/create-lists-msvc.mak create mode 100644 MSVC_NMake/create-lists.bat create mode 100644 MSVC_NMake/detectenv-msvc.mak create mode 100644 MSVC_NMake/generate-msvc.mak create mode 100644 MSVC_NMake/info-msvc.mak create mode 100644 MSVC_NMake/install.mak diff --git a/MSVC_NMake/Makefile.vc b/MSVC_NMake/Makefile.vc new file mode 100644 index 00000000..cb82ebb0 --- /dev/null +++ b/MSVC_NMake/Makefile.vc @@ -0,0 +1,57 @@ +# NMake Makefile for building libsigc++ on Windows using Visual Studio + +# The items below this line should not be changed, unless one is maintaining +# the NMake Makefiles. Customizations can be done in the following NMake Makefile +# portions (please see comments in the these files to see what can be customized): +# +# detectenv-msvc.mak +# config-msvc.mak + +!include detectenv-msvc.mak + +# Include the Makefile portions with the source listings +!include ..\sigc++\filelist.am + +# Include the Makefile portion that enables features based on user input +!include config-msvc.mak + +!if "$(VALID_CFGSET)" == "TRUE" + +# We need Visual Studio 2013 or later +!if $(VSVER) < 12 +VALID_MSC = FALSE +!else +VALID_MSC = TRUE +!endif + +!if "$(VALID_MSC)" == "TRUE" + +# Include the Makefile portion to convert the source and header lists +# into the lists we need for compilation and introspection +!include create-lists-msvc.mak + +all: $(LIBSIGC_LIB) $(libsigc_ex) all-build-info + +tests: $(libsigc_tests) all-build-info + +benchmark: all $(libsigc_bench) all-build-info + +# Include the build rules for sources, DLLs and executables +!include generate-msvc.mak +!include build-rules-msvc.mak + +!include install.mak + +!else # "$(VALID_MSC)" == "TRUE" +all: + @echo You need Visual Studio 2013 or later. + +!endif # "$(VALID_MSC)" == "TRUE" + +!else # "$(VALID_CFGSET)" == "TRUE" +all: help + @echo You need to specify a valid configuration, via + @echo CFG=release or CFG=debug +!endif # "$(VALID_CFGSET)" == "TRUE" + +!include info-msvc.mak diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak new file mode 100644 index 00000000..4bc97645 --- /dev/null +++ b/MSVC_NMake/build-rules-msvc.mak @@ -0,0 +1,92 @@ +# NMake Makefile portion for compilation rules +# Items in here should not need to be edited unless +# one is maintaining the NMake build files. The format +# of NMake Makefiles here are different from the GNU +# Makefiles. Please see the comments about these formats. + +# Inference rules for compiling the .obj files. +# Used for libs and programs with more than a single source file. +# Format is as follows +# (all dirs must have a trailing '\'): +# +# {$(srcdir)}.$(srcext){$(destdir)}.obj:: +# $(CC)|$(CXX) $(cflags) /Fo$(destdir) /c @<< +# $< +# << +{..\sigc++\}.cc{$(CFG)\$(PLAT)\libsigcpp\}.obj:: + $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(CFG)\$(PLAT)\libsigcpp\ /c @<< +$< +<< + +{..\sigc++\adaptors\lambda\}.cc{$(CFG)\$(PLAT)\libsigcpp\}.obj:: + $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(CFG)\$(PLAT)\libsigcpp\ /c @<< +$< +<< + +{..\sigc++\functors\}.cc{$(CFG)\$(PLAT)\libsigcpp\}.obj:: + $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(CFG)\$(PLAT)\libsigcpp\ /c @<< +$< +<< + +$(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj: $(CFG)\$(PLAT)\libsigcpp-tests ..\tests\testutilities.cc + $(CXX) $(SIGCPP_CFLAGS) /Fo$@ /c ..\tests\testutilities.cc +# Rules for building .lib files +$(LIBSIGC_LIB): $(LIBSIGC_DLL) + +{.}.rc{$(CFG)\$(PLAT)\libsigcpp\}.res: + rc /fo$@ $< + +# Rules for linking DLLs +# Format is as follows (the mt command is needed for MSVC 2005/2008 builds): +# $(dll_name_with_path): $(dependent_libs_files_objects_and_items) +# link /DLL [$(linker_flags)] [$(dependent_libs)] [/def:$(def_file_if_used)] [/implib:$(lib_name_if_needed)] -out:$@ @<< +# $(dependent_objects) +# << +# @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2 +$(LIBSIGC_DLL): $(CFG)\$(PLAT)\libsigcpp $(libsigcpp_dll_OBJS) + link /DLL $(LDFLAGS) /implib:$(LIBSIGC_LIB) -out:$@ @<< +$(libsigcpp_dll_OBJS) +<< + @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2 + +# Rules for linking Executables +# Format is as follows (the mt command is needed for MSVC 2005/2008 builds): +# $(dll_name_with_path): $(dependent_libs_files_objects_and_items) +# link [$(linker_flags)] [$(dependent_libs)] -out:$@ @<< +# $(dependent_objects) +# << +# @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 + +{..\examples\}.cc{$(CFG)\$(PLAT)\}.exe: + @if not exist $(CFG)\$(PLAT)\libsigcpp-ex $(MAKE) -f Makefile.vc CFG=$(CFG) $(CFG)\$(PLAT)\libsigcpp-ex + @if not exist $(LIBSIGC_LIB) $(MAKE) -f Makefile.vc CFG=$(CFG) $(LIBSIGC_LIB) + $(CXX) $(SIGCPP_CFLAGS) /Fo$(CFG)\$(PLAT)\libsigcpp-ex\ $< /Fe$@ /link $(LDFLAGS) $(LIBSIGC_LIB) + @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 + +{..\tests\}.cc{$(CFG)\$(PLAT)\}.exe: + @if not exist $(LIBSIGC_LIB) $(MAKE) -f Makefile.vc CFG=$(CFG) $(LIBSIGC_LIB) + @if not exist $(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj $(MAKE) -f Makefile.vc CFG=$(CFG) $(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj + $(CXX) $(SIGCPP_CFLAGS) /Fo$(CFG)\$(PLAT)\libsigcpp-tests\ $< /Fe$@ /link $(LDFLAGS) $(LIBSIGC_LIB) $(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj + @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 + +$(CFG)\$(PLAT)\libsigc++-benchmark.exe: ..\tests\benchmark.cc + @if not exist $(LIBSIGC_LIB) $(MAKE) -f Makefile.vc CFG=$(CFG) $(LIBSIGC_LIB) + @if not exist $(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj $(MAKE) -f Makefile.vc CFG=$(CFG) $(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj + $(CXX) $(SIGCPP_BENCHMARK_CFLAGS) /Fo$(CFG)\$(PLAT)\libsigcpp-tests\ ..\tests\benchmark.cc /Fe$@ /link $(LDFLAGS) $(LIBSIGC_LIB) $(CFG)\$(PLAT)\libsigcpp-tests\testutilities.obj + @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1 + +clean: + @-del /f /q $(CFG)\$(PLAT)\*.exe + @-del /f /q $(CFG)\$(PLAT)\*.dll + @-del /f /q $(CFG)\$(PLAT)\*.pdb + @-del /f /q $(CFG)\$(PLAT)\*.ilk + @-del /f /q $(CFG)\$(PLAT)\*.exp + @-del /f /q $(CFG)\$(PLAT)\*.lib + @-if exist $(CFG)\$(PLAT)\libsigcpp-tests del /f /q $(CFG)\$(PLAT)\libsigcpp-tests\*.obj + @-del /f /q $(CFG)\$(PLAT)\libsigcpp-ex\*.obj + @-del /f /q $(CFG)\$(PLAT)\libsigcpp\*.res + @-del /f /q $(CFG)\$(PLAT)\libsigcpp\*.obj + @-if exist $(CFG)\$(PLAT)\libsigcpp-tests rd $(CFG)\$(PLAT)\libsigcpp-tests + @-rd $(CFG)\$(PLAT)\libsigcpp-ex + @-rd $(CFG)\$(PLAT)\libsigcpp + @-del /f /q vc$(PDBVER)0.pdb diff --git a/MSVC_NMake/config-msvc.mak b/MSVC_NMake/config-msvc.mak new file mode 100644 index 00000000..3a933ac5 --- /dev/null +++ b/MSVC_NMake/config-msvc.mak @@ -0,0 +1,43 @@ +# NMake Makefile portion for enabling features for Windows builds + +# These are the base minimum libraries required for building gjs. +BASE_INCLUDES = /I$(PREFIX)\include + +# Please do not change anything beneath this line unless maintaining the NMake Makefiles + +LIBSIGC_MAJOR_VERSION = 2 +LIBSIGC_MINOR_VERSION = 0 + +!if "$(CFG)" == "debug" || "$(CFG)" == "Debug" +LIBSIGC_DEBUG_SUFFIX = -d +!else +LIBSIGC_DEBUG_SUFFIX = +!endif + +LIBSIGCPP_DEFINES = /DSIGC_BUILD /D_WINDLL + +SIGCPP_BASE_CFLAGS = /I.. /I. /wd4530 $(CFLAGS) + +LIBSIGC_INT_SOURCES = $(sigc_sources_cc:/=\) +LIBSIGC_INT_HDRS = $(sigc_public_h:/=\) + +SIGCPP_CFLAGS = $(SIGCPP_BASE_CFLAGS) $(CFLAGS) +LIBSIGCPP_CFLAGS = $(SIGCPP_CFLAGS) $(LIBSIGCPP_DEFINES) + +# We build sigc-vc$(PDBVER)0-$(LIBSIGC_MAJOR_VERSION)_$(LIBSIGC_MINOR_VERSION).dll or +# sigc-vc$(PDBVER)0d-$(LIBSIGC_MAJOR_VERSION)_$(LIBSIGC_MINOR_VERSION).dll at least + +LIBSIGC_LIBNAME = sigc-vc$(PDBVER)0$(LIBSIGC_DEBUG_SUFFIX)-$(LIBSIGC_MAJOR_VERSION)_$(LIBSIGC_MINOR_VERSION) + +LIBSIGC_DLL = $(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).dll +LIBSIGC_LIB = $(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).lib + +# Note that building the benchmark requires Boost! +libsigc_bench = $(CFG)\$(PLAT)\libsigc++-benchmark.exe + +# If your Boost libraries are built as DLLs, use BOOST_DLL=1 in your NMake command line +!ifdef BOOST_DLL +SIGCPP_BENCHMARK_CFLAGS = $(SIGCPP_BASE_CFLAGS) /DBOOST_ALL_DYN_LINK +!else +SIGCPP_BENCHMARK_CFLAGS = $(SIGCPP_BASE_CFLAGS) +!endif diff --git a/MSVC_NMake/create-lists-msvc.mak b/MSVC_NMake/create-lists-msvc.mak new file mode 100644 index 00000000..36924fa2 --- /dev/null +++ b/MSVC_NMake/create-lists-msvc.mak @@ -0,0 +1,73 @@ +# Convert the source listing to object (.obj) listing in +# another NMake Makefile module, include it, and clean it up. +# This is a "fact-of-life" regarding NMake Makefiles... +# This file does not need to be changed unless one is maintaining the NMake Makefiles + +# For those wanting to add things here: +# To add a list, do the following: +# # $(description_of_list) +# if [call create-lists.bat header $(makefile_snippet_file) $(variable_name)] +# endif +# +# if [call create-lists.bat file $(makefile_snippet_file) $(file_name)] +# endif +# +# if [call create-lists.bat footer $(makefile_snippet_file)] +# endif +# ... (repeat the if [call ...] lines in the above order if needed) +# !include $(makefile_snippet_file) +# +# (add the following after checking the entries in $(makefile_snippet_file) is correct) +# (the batch script appends to $(makefile_snippet_file), you will need to clear the file unless the following line is added) +#!if [del /f /q $(makefile_snippet_file)] +#!endif + +# In order to obtain the .obj filename that is needed for NMake Makefiles to build DLLs/static LIBs or EXEs, do the following +# instead when doing 'if [call create-lists.bat file $(makefile_snippet_file) $(file_name)]' +# (repeat if there are multiple $(srcext)'s in $(source_list), ignore any headers): +# !if [for %c in ($(source_list)) do @if "%~xc" == ".$(srcext)" @call create-lists.bat file $(makefile_snippet_file) $(intdir)\%~nc.obj] +# +# $(intdir)\%~nc.obj needs to correspond to the rules added in build-rules-msvc.mak +# %~xc gives the file extension of a given file, %c in this case, so if %c is a.cc, %~xc means .cc +# %~nc gives the file name of a given file without extension, %c in this case, so if %c is a.cc, %~nc means a + +NULL= + +# For libsigc++ + +!if [call create-lists.bat header libsigcpp.mak libsigcpp_dll_OBJS] +!endif + +!if [for %c in ($(sigc_sources_cc)) do @if "%~xc" == ".cc" @call create-lists.bat file libsigcpp.mak ^$(CFG)\^$(PLAT)\libsigcpp\%~nc.obj] +!endif + +!if [@call create-lists.bat file libsigcpp.mak ^$(CFG)\^$(PLAT)\libsigcpp\sigc.res] +!endif + +!if [call create-lists.bat footer libsigcpp.mak] +!endif + +!if [call create-lists.bat header libsigcpp.mak libsigc_ex] +!endif + +!if [for %s in (..\examples\*.cc) do @call create-lists.bat file libsigcpp.mak ^$(CFG)\^$(PLAT)\%~ns.exe] +!endif + +!if [call create-lists.bat footer libsigcpp.mak] +!endif + +!if [call create-lists.bat header libsigcpp.mak libsigc_tests] +!endif + +# Skipping testutilities.cc: Not to be built as a .exe, but is a common dependency for the tests +# benchmark: Not built on default; requires Boost +!if [for %s in (..\tests\*.cc) do @if not "%~ns" == "testutilities" if not "%~ns" == "benchmark" @call create-lists.bat file libsigcpp.mak ^$(CFG)\^$(PLAT)\%~ns.exe] +!endif + +!if [call create-lists.bat footer libsigcpp.mak] +!endif + +!include libsigcpp.mak + +!if [del /f /q libsigcpp.mak] +!endif diff --git a/MSVC_NMake/create-lists.bat b/MSVC_NMake/create-lists.bat new file mode 100644 index 00000000..ef60d5ce --- /dev/null +++ b/MSVC_NMake/create-lists.bat @@ -0,0 +1,42 @@ +@echo off +rem Simple .bat script for creating the NMake Makefile snippets. + +if not "%1" == "header" if not "%1" == "file" if not "%1" == "footer" goto :error_cmd +if "%2" == "" goto error_no_destfile + +if "%1" == "header" goto :header +if "%1" == "file" goto :addfile +if "%1" == "footer" goto :footer + +:header +if "%3" == "" goto error_var +echo %3 = \>>%2 +goto done + +:addfile +if "%3" == "" goto error_file +echo. %3 \>>%2 +goto done + +:footer +echo. $(NULL)>>%2 +echo.>>%2 +goto done + +:error_cmd +echo Specified command '%1' was invalid. Valid commands are: header file footer. +goto done + +:error_no_destfile +echo Destination NMake snippet file must be specified +goto done + +:error_var +echo A name must be specified for using '%1'. +goto done + +:error_file +echo A file must be specified for using '%1'. +goto done + +:done \ No newline at end of file diff --git a/MSVC_NMake/detectenv-msvc.mak b/MSVC_NMake/detectenv-msvc.mak new file mode 100644 index 00000000..e5dadaf8 --- /dev/null +++ b/MSVC_NMake/detectenv-msvc.mak @@ -0,0 +1,146 @@ +# Change this (or specify PREFIX= when invoking this NMake Makefile) if +# necessary, so that the libs and headers of the dependent third-party +# libraries can be located. For instance, if building from GLib's +# included Visual Studio projects, this should be able to locate the GLib +# build out-of-the-box if they were not moved. GLib's headers will be +# found in $(GLIB_PREFIX)\include\glib-2.0 and +# $(GLIB_PREFIX)\lib\glib-2.0\include and its import library will be found +# in $(GLIB_PREFIX)\lib. + +!if "$(PREFIX)" == "" +PREFIX = ..\..\vs$(VSVER)\$(PLAT) +!endif + +# Location of the PERL interpreter, for running glib-mkenums. glib-mkenums +# needs to be found in $(PREFIX)\bin. Using either a 32-bit or x64 PERL +# interpreter are supported for either a 32-bit or x64 build. + +!if "$(PERL)" == "" +PERL = perl +!endif + +# Location of the Python interpreter, for building introspection. The complete set +# of Python Modules for introspection (the giscanner Python scripts and the _giscanner.pyd +# compiled module) needs to be found in $(PREFIX)\lib\gobject-introspection\giscanner, and +# the g-ir-scanner Python script and g-ir-compiler utility program needs to be found +# in $(PREFIX)\bin, together with any DLLs they will depend on, if those DLLs are not already +# in your PATH. +# Note that the Python interpreter and the introspection modules and utility progam must +# correspond to the build type (i.e. 32-bit Release for 32-bit Release builds, and so on). +# +# For introspection, currently only Python 2.7.x is supported. This may change when Python 3.x +# support is added upstream in gobject-introspection--when this happens, the _giscanner.pyd must +# be the one that is built against the release series of Python that is used here. + +!if "$(PYTHON)" == "" +PYTHON = python +!endif + +# Location of the pkg-config utility program, for building introspection. It needs to be able +# to find the pkg-config (.pc) files so that the correct libraries and headers for the needed libraries +# can be located, using PKG_CONFIG_PATH. Using either a 32-bit or x64 pkg-config are supported for +# either a 32-bit or x64 build. + +!if "$(PKG_CONFIG)" == "" +PKG_CONFIG = pkg-config +!endif + +# The items below this line should not be changed, unless one is maintaining +# the NMake Makefiles. The exception is for the CFLAGS_ADD line(s) where one +# could use his/her desired compiler optimization flags, if he/she knows what is +# being done. + +# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or +# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir) +!if !defined(VCINSTALLDIR) && !defined(WINDOWSSDKDIR) +MSG = ^ +This Makefile is only for Visual Studio 2008 and later.^ +You need to ensure that the Visual Studio Environment is properly set up^ +before running this Makefile. +!error $(MSG) +!endif + +ERRNUL = 2>NUL +_HASH=^# + +!if ![echo VCVERSION=_MSC_VER > vercl.x] \ + && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \ + && ![echo PLAT=Win32 >> vercl.x] \ + && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \ + && ![echo PLAT=x64 >> vercl.x] \ + && ![echo $(_HASH)endif >> vercl.x] \ + && ![cl -nologo -TC -P vercl.x $(ERRNUL)] +!include vercl.i +!if ![echo VCVER= ^\> vercl.vc] \ + && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc] +!include vercl.vc +!endif +!endif +!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc] +!endif + +!if $(VCVERSION) > 1499 && $(VCVERSION) < 1600 +VSVER = 9 +!elseif $(VCVERSION) > 1599 && $(VCVERSION) < 1700 +VSVER = 10 +!elseif $(VCVERSION) > 1699 && $(VCVERSION) < 1800 +VSVER = 11 +!elseif $(VCVERSION) > 1799 && $(VCVERSION) < 1900 +VSVER = 12 +!elseif $(VCVERSION) > 1899 && $(VCVERSION) < 1910 +VSVER = 14 +!elseif $(VCVERSION) > 1909 && $(VCVERSION) < 2000 +VSVER = 15 +!else +VSVER = 0 +!endif + +!if "$(VSVER)" == "0" +MSG = ^ +This NMake Makefile set supports Visual Studio^ +9 (2008) through 15 (2017). Your Visual Studio^ +version is not supported. +!error $(MSG) +!else +!if $(VSVER) < 15 +PDBVER = $(VSVER) +!else +PDBVER = 14 +!endif +!endif + +VALID_CFGSET = FALSE +!if "$(CFG)" == "release" || "$(CFG)" == "Release" || "$(CFG)" == "debug" || "$(CFG)" == "Debug" +VALID_CFGSET = TRUE +!endif + +# One may change these items, but be sure to test +# the resulting binaries +!if "$(CFG)" == "release" || "$(CFG)" == "Release" +CFLAGS_ADD = /MD /O2 /GL /MP +!if "$(VSVER)" != "9" +CFLAGS_ADD = $(CFLAGS_ADD) /d2Zi+ +!endif +!else +CFLAGS_ADD = /MDd /Od +!endif + +!if "$(PLAT)" == "x64" +LDFLAGS_ARCH = /machine:x64 +!else +LDFLAGS_ARCH = /machine:x86 +!endif + +!if "$(VALID_CFGSET)" == "TRUE" +CFLAGS = $(CFLAGS_ADD) /W3 /Zi + +LDFLAGS_BASE = $(LDFLAGS_ARCH) /libpath:$(PREFIX)\lib /DEBUG + +!if "$(CFG)" == "debug" || "$(CFG)" == "Debug" +ARFLAGS = $(LDFLAGS_ARCH) +LDFLAGS = $(LDFLAGS_BASE) +!else +ARFLAGS = $(LDFLAGS_ARCH) /LTCG +LDFLAGS = $(LDFLAGS_BASE) /LTCG /opt:ref +!endif +!endif diff --git a/MSVC_NMake/filelist.am b/MSVC_NMake/filelist.am index 3ebcc77d..38ce634f 100644 --- a/MSVC_NMake/filelist.am +++ b/MSVC_NMake/filelist.am @@ -1,70 +1,14 @@ ## This file is part of libsigc++. -msvc_net2013_data = \ - libsigc++2.sln \ - libsigc++2.vcxproj \ - libsigc++2.vcxproj.filters \ - sigc++config.h \ - sigc.rc \ - sigc-build-defines.props \ - sigc-debug-dll-build-defines.props \ - sigc-install.props \ - sigc-release-dll-build-defines.props \ - sigc-version-paths.props \ - sigc-install.vcxproj \ - test_accum_iter.vcxproj \ - test_accum_iter.vcxproj.filters \ - test_accumulated.vcxproj \ - test_accumulated.vcxproj.filters \ - test_bind.vcxproj \ - test_bind.vcxproj.filters \ - test_bind_ref.vcxproj \ - test_bind_ref.vcxproj.filters \ - test_bind_refptr.vcxproj \ - test_bind_refptr.vcxproj.filters \ - test_bind_return.vcxproj \ - test_bind_return.vcxproj.filters \ - test_compose.vcxproj \ - test_compose.vcxproj.filters \ - test_copy_invalid_slot.vcxproj \ - test_copy_invalid_slot.vcxproj.filters \ - test_cpp11_lambda.vcxproj \ - test_cpp11_lambda.vcxproj.filters \ - test_custom.vcxproj \ - test_custom.vcxproj.filters \ - test_deduce_result_type.vcxproj \ - test_deduce_result_type.vcxproj.filters \ - test_disconnect.vcxproj \ - test_disconnect.vcxproj.filters \ - test_disconnect_during_emit.vcxproj \ - test_disconnect_during_emit.vcxproj.filters \ - test_exception_catch.vcxproj \ - test_exception_catch.vcxproj.filters \ - test_functor_trait.vcxproj \ - test_functor_trait.vcxproj.filters \ - test_hide.vcxproj \ - test_hide.vcxproj.filters \ - test_limit_reference.vcxproj \ - test_limit_reference.vcxproj.filters \ - test_mem_fun.vcxproj \ - test_mem_fun.vcxproj.filters \ - test_ptr_fun.vcxproj \ - test_ptr_fun.vcxproj.filters \ - test_retype.vcxproj \ - test_retype.vcxproj.filters \ - test_retype_return.vcxproj \ - test_retype_return.vcxproj.filters \ - test_signal.vcxproj \ - test_signal.vcxproj.filters \ - test_size.vcxproj \ - test_size.vcxproj.filters \ - test_slot.vcxproj \ - test_slot.vcxproj.filters \ - test_slot_disconnect.vcxproj \ - test_slot_disconnect.vcxproj.filters \ - test_trackable.vcxproj \ - test_trackable.vcxproj.filters \ - test_track_obj.vcxproj \ - test_track_obj.vcxproj.filters \ - test_visit_each.vcxproj \ - test_visit_each.vcxproj.filters +msvc_nmake_data = \ + build-rules-msvc.mak \ + config-msvc.mak \ + create-lists.bat \ + create-lists-msvc.mak \ + detectenv-msvc.mak \ + generate-msvc.mak \ + info-msvc.mak \ + install.mak \ + Makefile.vc \ + sigc++config.h \ + sigc.rc diff --git a/MSVC_NMake/generate-msvc.mak b/MSVC_NMake/generate-msvc.mak new file mode 100644 index 00000000..5f9496e3 --- /dev/null +++ b/MSVC_NMake/generate-msvc.mak @@ -0,0 +1,8 @@ +# NMake Makefile portion for code generation and +# intermediate build directory creation +# Items in here should not need to be edited unless +# one is maintaining the NMake build files. + +# Create the build directories +$(CFG)\$(PLAT)\libsigcpp $(CFG)\$(PLAT)\libsigcpp-ex $(CFG)\$(PLAT)\libsigcpp-tests: + @-mkdir $@ diff --git a/MSVC_NMake/info-msvc.mak b/MSVC_NMake/info-msvc.mak new file mode 100644 index 00000000..b669ec2e --- /dev/null +++ b/MSVC_NMake/info-msvc.mak @@ -0,0 +1,40 @@ +# NMake Makefile portion for displaying config info + +all-build-info: + @echo. + @echo ---------- + @echo Build info + @echo --------- + @echo Build Type: $(CFG) + +help: + @echo. + @echo ============================== + @echo Building libsigc++ Using NMake + @echo ============================== + @echo nmake /f Makefile.vc CFG=[release^|debug] ^ + @echo. + @echo Where: + @echo ------ + @echo CFG: Required, use CFG=release for an optimized build and CFG=debug + @echo for a debug build. PDB files are generated for all builds. + @echo. + @echo PREFIX: Optional, the path where dependent libraries and tools may be + @echo found, default is ^$(srcrootdir)\..\vs^$(short_vs_ver)\^$(platform), + @echo where ^$(short_vs_ver) is 12 for VS 2013 and 14 for VS 2015 and so on; + @echo and ^$(platform) is Win32 for 32-bit builds and x64 for x64 builds. + @echo. + @echo ====== + @echo A 'clean' target is supported to remove all generated files, intermediate + @echo object files and binaries for the specified configuration. + @echo. + @echo An 'install' target is supported to copy the build (DLLs, LIBs, along with + @echo the header files) to appropriate locations under ^$(PREFIX). + @echo. + @echo A 'tests' target is supported to build the test programs, and a 'benchmark' + @echo target is supported to build the benchmarking program. Note that the + @echo benchmarking program requires the Boost C++ libraries to build, and you need + @echo to pass in BOOST_DLL=1 to the NMake command line if your Boost libraries are + @echo built as DLLs. + @echo ====== + @echo. diff --git a/MSVC_NMake/install.mak b/MSVC_NMake/install.mak new file mode 100644 index 00000000..c0d76c8c --- /dev/null +++ b/MSVC_NMake/install.mak @@ -0,0 +1,19 @@ +# NMake Makefile snippet for copying the built libraries, utilities and headers to +# a path under $(PREFIX). + +install: all + @if not exist $(PREFIX)\bin\ mkdir $(PREFIX)\bin + @if not exist $(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\ mkdir $(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include + @if not exist $(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\adaptors\lambda\ @mkdir $(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\adaptors\lambda + @if not exist $(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\functors\ @mkdir $(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\functors + @if not exist $(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\tuple-utils\ @mkdir $(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\tuple-utils + @copy /b $(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).dll $(PREFIX)\bin + @copy /b $(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).pdb $(PREFIX)\bin + @copy /b $(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).lib $(PREFIX)\lib + @copy "..\sigc++\sigc++.h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\" + @for %h in ($(LIBSIGC_INT_HDRS)) do @copy "..\sigc++\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\%h" + @for %h in ($(base_built_h)) do @copy "..\sigc++\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\%h" + @for %h in ($(functors_built_h)) do @copy "..\sigc++\functors\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\functors\%h" + @for %h in ($(adaptors_built_h)) do @copy "..\sigc++\adaptors\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\adaptors\%h" + @for %h in ($(lambda_built_h)) do @copy "..\sigc++\adaptors\lambda\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\adaptors\lambda\%h" + @copy "sigc++config.h" "$(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\" diff --git a/Makefile.am b/Makefile.am index 72e57e5e..e04ec3e0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -35,7 +35,7 @@ dist_noinst_SCRIPTS = autogen.sh include $(srcdir)/MSVC_NMake/filelist.am -dist_noinst_DATA = $(addprefix MSVC_NMake/,$(msvc_net2013_data)) +dist_noinst_DATA = $(addprefix MSVC_NMake/,$(msvc_nmake_data)) DISTCLEANFILES = MSVC_NMake/sigc++config.h From 45a73c22a97b4bed085ca570ceab94869a8ea0c4 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Mon, 10 Sep 2018 12:13:31 +0800 Subject: [PATCH 076/145] builds: Remove Visual Studio 2013 projects The NMake Makefiles superseded them, so let's just remove them. This will make builds with later Visual Studio versions simpler, and will make maintaining the Visual Studio build files easier. --- MSVC_NMake/libsigc++2.sln | 351 ------------------ MSVC_NMake/libsigc++2.vcxproj | 180 --------- MSVC_NMake/libsigc++2.vcxproj.filters | 68 ---- MSVC_NMake/sigc-build-defines.props | 30 -- MSVC_NMake/sigc-debug-dll-build-defines.props | 17 - MSVC_NMake/sigc-install.props | 80 ---- MSVC_NMake/sigc-install.vcxproj | 106 ------ .../sigc-release-dll-build-defines.props | 17 - MSVC_NMake/sigc-version-paths.props | 42 --- MSVC_NMake/test_accum_iter.vcxproj | 166 --------- MSVC_NMake/test_accum_iter.vcxproj.filters | 24 -- MSVC_NMake/test_accumulated.vcxproj | 167 --------- MSVC_NMake/test_accumulated.vcxproj.filters | 24 -- MSVC_NMake/test_bind.vcxproj | 172 --------- MSVC_NMake/test_bind.vcxproj.filters | 24 -- MSVC_NMake/test_bind_ref.vcxproj | 166 --------- MSVC_NMake/test_bind_ref.vcxproj.filters | 24 -- MSVC_NMake/test_bind_refptr.vcxproj | 166 --------- MSVC_NMake/test_bind_refptr.vcxproj.filters | 24 -- MSVC_NMake/test_bind_return.vcxproj | 172 --------- MSVC_NMake/test_bind_return.vcxproj.filters | 24 -- MSVC_NMake/test_compose.vcxproj | 172 --------- MSVC_NMake/test_compose.vcxproj.filters | 24 -- MSVC_NMake/test_copy_invalid_slot.vcxproj | 166 --------- .../test_copy_invalid_slot.vcxproj.filters | 24 -- MSVC_NMake/test_cpp11_lambda.vcxproj | 166 --------- MSVC_NMake/test_cpp11_lambda.vcxproj.filters | 24 -- MSVC_NMake/test_custom.vcxproj | 166 --------- MSVC_NMake/test_custom.vcxproj.filters | 24 -- MSVC_NMake/test_deduce_result_type.vcxproj | 172 --------- .../test_deduce_result_type.vcxproj.filters | 24 -- MSVC_NMake/test_disconnect.vcxproj | 172 --------- MSVC_NMake/test_disconnect.vcxproj.filters | 24 -- .../test_disconnect_during_emit.vcxproj | 167 --------- ...est_disconnect_during_emit.vcxproj.filters | 24 -- MSVC_NMake/test_exception_catch.vcxproj | 172 --------- .../test_exception_catch.vcxproj.filters | 24 -- MSVC_NMake/test_functor_trait.vcxproj | 172 --------- MSVC_NMake/test_functor_trait.vcxproj.filters | 24 -- MSVC_NMake/test_hide.vcxproj | 172 --------- MSVC_NMake/test_hide.vcxproj.filters | 24 -- MSVC_NMake/test_limit_reference.vcxproj | 166 --------- .../test_limit_reference.vcxproj.filters | 24 -- MSVC_NMake/test_mem_fun.vcxproj | 172 --------- MSVC_NMake/test_mem_fun.vcxproj.filters | 24 -- MSVC_NMake/test_ptr_fun.vcxproj | 172 --------- MSVC_NMake/test_ptr_fun.vcxproj.filters | 24 -- MSVC_NMake/test_retype.vcxproj | 167 --------- MSVC_NMake/test_retype.vcxproj.filters | 24 -- MSVC_NMake/test_retype_return.vcxproj | 172 --------- MSVC_NMake/test_retype_return.vcxproj.filters | 24 -- MSVC_NMake/test_signal.vcxproj | 172 --------- MSVC_NMake/test_signal.vcxproj.filters | 24 -- MSVC_NMake/test_size.vcxproj | 172 --------- MSVC_NMake/test_size.vcxproj.filters | 24 -- MSVC_NMake/test_slot.vcxproj | 172 --------- MSVC_NMake/test_slot.vcxproj.filters | 24 -- MSVC_NMake/test_slot_disconnect.vcxproj | 166 --------- .../test_slot_disconnect.vcxproj.filters | 24 -- MSVC_NMake/test_track_obj.vcxproj | 165 -------- MSVC_NMake/test_track_obj.vcxproj.filters | 24 -- MSVC_NMake/test_trackable.vcxproj | 171 --------- MSVC_NMake/test_trackable.vcxproj.filters | 24 -- MSVC_NMake/test_visit_each.vcxproj | 166 --------- MSVC_NMake/test_visit_each.vcxproj.filters | 24 -- 65 files changed, 6302 deletions(-) delete mode 100644 MSVC_NMake/libsigc++2.sln delete mode 100644 MSVC_NMake/libsigc++2.vcxproj delete mode 100644 MSVC_NMake/libsigc++2.vcxproj.filters delete mode 100644 MSVC_NMake/sigc-build-defines.props delete mode 100644 MSVC_NMake/sigc-debug-dll-build-defines.props delete mode 100644 MSVC_NMake/sigc-install.props delete mode 100644 MSVC_NMake/sigc-install.vcxproj delete mode 100644 MSVC_NMake/sigc-release-dll-build-defines.props delete mode 100644 MSVC_NMake/sigc-version-paths.props delete mode 100644 MSVC_NMake/test_accum_iter.vcxproj delete mode 100644 MSVC_NMake/test_accum_iter.vcxproj.filters delete mode 100644 MSVC_NMake/test_accumulated.vcxproj delete mode 100644 MSVC_NMake/test_accumulated.vcxproj.filters delete mode 100644 MSVC_NMake/test_bind.vcxproj delete mode 100644 MSVC_NMake/test_bind.vcxproj.filters delete mode 100644 MSVC_NMake/test_bind_ref.vcxproj delete mode 100644 MSVC_NMake/test_bind_ref.vcxproj.filters delete mode 100644 MSVC_NMake/test_bind_refptr.vcxproj delete mode 100644 MSVC_NMake/test_bind_refptr.vcxproj.filters delete mode 100644 MSVC_NMake/test_bind_return.vcxproj delete mode 100644 MSVC_NMake/test_bind_return.vcxproj.filters delete mode 100644 MSVC_NMake/test_compose.vcxproj delete mode 100644 MSVC_NMake/test_compose.vcxproj.filters delete mode 100644 MSVC_NMake/test_copy_invalid_slot.vcxproj delete mode 100644 MSVC_NMake/test_copy_invalid_slot.vcxproj.filters delete mode 100644 MSVC_NMake/test_cpp11_lambda.vcxproj delete mode 100644 MSVC_NMake/test_cpp11_lambda.vcxproj.filters delete mode 100644 MSVC_NMake/test_custom.vcxproj delete mode 100644 MSVC_NMake/test_custom.vcxproj.filters delete mode 100644 MSVC_NMake/test_deduce_result_type.vcxproj delete mode 100644 MSVC_NMake/test_deduce_result_type.vcxproj.filters delete mode 100644 MSVC_NMake/test_disconnect.vcxproj delete mode 100644 MSVC_NMake/test_disconnect.vcxproj.filters delete mode 100644 MSVC_NMake/test_disconnect_during_emit.vcxproj delete mode 100644 MSVC_NMake/test_disconnect_during_emit.vcxproj.filters delete mode 100644 MSVC_NMake/test_exception_catch.vcxproj delete mode 100644 MSVC_NMake/test_exception_catch.vcxproj.filters delete mode 100644 MSVC_NMake/test_functor_trait.vcxproj delete mode 100644 MSVC_NMake/test_functor_trait.vcxproj.filters delete mode 100644 MSVC_NMake/test_hide.vcxproj delete mode 100644 MSVC_NMake/test_hide.vcxproj.filters delete mode 100644 MSVC_NMake/test_limit_reference.vcxproj delete mode 100644 MSVC_NMake/test_limit_reference.vcxproj.filters delete mode 100644 MSVC_NMake/test_mem_fun.vcxproj delete mode 100644 MSVC_NMake/test_mem_fun.vcxproj.filters delete mode 100644 MSVC_NMake/test_ptr_fun.vcxproj delete mode 100644 MSVC_NMake/test_ptr_fun.vcxproj.filters delete mode 100644 MSVC_NMake/test_retype.vcxproj delete mode 100644 MSVC_NMake/test_retype.vcxproj.filters delete mode 100644 MSVC_NMake/test_retype_return.vcxproj delete mode 100644 MSVC_NMake/test_retype_return.vcxproj.filters delete mode 100644 MSVC_NMake/test_signal.vcxproj delete mode 100644 MSVC_NMake/test_signal.vcxproj.filters delete mode 100644 MSVC_NMake/test_size.vcxproj delete mode 100644 MSVC_NMake/test_size.vcxproj.filters delete mode 100644 MSVC_NMake/test_slot.vcxproj delete mode 100644 MSVC_NMake/test_slot.vcxproj.filters delete mode 100644 MSVC_NMake/test_slot_disconnect.vcxproj delete mode 100644 MSVC_NMake/test_slot_disconnect.vcxproj.filters delete mode 100644 MSVC_NMake/test_track_obj.vcxproj delete mode 100644 MSVC_NMake/test_track_obj.vcxproj.filters delete mode 100644 MSVC_NMake/test_trackable.vcxproj delete mode 100644 MSVC_NMake/test_trackable.vcxproj.filters delete mode 100644 MSVC_NMake/test_visit_each.vcxproj delete mode 100644 MSVC_NMake/test_visit_each.vcxproj.filters diff --git a/MSVC_NMake/libsigc++2.sln b/MSVC_NMake/libsigc++2.sln deleted file mode 100644 index 21b38fd2..00000000 --- a/MSVC_NMake/libsigc++2.sln +++ /dev/null @@ -1,351 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 13.00 -# Visual Studio 2013 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sigc", "libsigc++2.vcxproj", "{83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_bind", "test_bind.vcxproj", "{7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_bind_return", "test_bind_return.vcxproj", "{EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_compose", "test_compose.vcxproj", "{45536B15-5178-4F81-B80C-8287B963F9D9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_deduce_result_type", "test_deduce_result_type.vcxproj", "{474ACE1B-A818-4947-911C-B298CD7F6FBD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_disconnect", "test_disconnect.vcxproj", "{5CCF0167-D23D-45B9-BCDA-F0B912470126}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_exception_catch", "test_exception_catch.vcxproj", "{5C976C38-2A50-49E9-B381-6952E683FBED}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_functor_trait", "test_functor_trait.vcxproj", "{F130A6B6-5E0A-4560-AE4A-E281DC538AC9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_hide", "test_hide.vcxproj", "{64BDAD0B-0D0B-42D0-940E-3BCDA783C880}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_mem_fun", "test_mem_fun.vcxproj", "{66CED940-0111-4196-B921-27B146643F44}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_ptr_fun", "test_ptr_fun.vcxproj", "{8B6734FD-DCB8-43E3-B507-A2B9127DD055}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_retype_return", "test_retype_return.vcxproj", "{D5835BCA-D0F1-45FF-81B6-147B9FC75123}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_signal", "test_signal.vcxproj", "{11AA4900-467B-4F60-BC36-BB1EB6F91EC0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_size", "test_size.vcxproj", "{93940E33-A1DE-4354-AF7A-995916693849}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_slot", "test_slot.vcxproj", "{498094C5-7A52-4EDA-8870-FF1F4D22CE62}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_trackable", "test_trackable.vcxproj", "{3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_retype", "test_retype.vcxproj", "{5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_disconnect_during_emit", "test_disconnect_during_emit.vcxproj", "{874C2D1E-CCAB-4F68-8581-CB1B67D71587}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_accumulated", "test_accumulated.vcxproj", "{D15D6940-E187-48B9-A6F3-3E278CC194B1}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_track_obj", "test_track_obj.vcxproj", "{4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_accum_iter", "test_accum_iter.vcxproj", "{6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_bind_ref", "test_bind_ref.vcxproj", "{6D6FAF93-EC61-4DB4-BD81-05FA35D25196}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_bind_refptr", "test_bind_refptr.vcxproj", "{52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_copy_invalid_slot", "test_copy_invalid_slot.vcxproj", "{872275DA-5CF3-4EE7-A947-32E13D203F17}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_cpp11_lambda", "test_cpp11_lambda.vcxproj", "{0964487A-2B36-436A-B25C-4405D9FA5205}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_custom", "test_custom.vcxproj", "{66096E31-B40C-4E2E-9C34-8D5ABC891C8F}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_limit_reference", "test_limit_reference.vcxproj", "{FA8883FC-2639-4811-B684-1182EB48BE18}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_slot_disconnect", "test_slot_disconnect.vcxproj", "{354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_visit_each", "test_visit_each.vcxproj", "{B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sigc-install", "sigc-install.vcxproj", "{8DE7735B-B67F-4324-ABAB-55BF1D12A58A}" - ProjectSection(ProjectDependencies) = postProject - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} = {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Debug|Win32.ActiveCfg = Debug|Win32 - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Debug|Win32.Build.0 = Debug|Win32 - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Debug|x64.ActiveCfg = Debug|x64 - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Debug|x64.Build.0 = Debug|x64 - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Release|Win32.ActiveCfg = Release|Win32 - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Release|Win32.Build.0 = Release|Win32 - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Release|x64.ActiveCfg = Release|x64 - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662}.Release|x64.Build.0 = Release|x64 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Debug|Win32.ActiveCfg = Debug|Win32 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Debug|Win32.Build.0 = Debug|Win32 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Debug|x64.ActiveCfg = Debug|x64 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Debug|x64.Build.0 = Debug|x64 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Release|Win32.ActiveCfg = Release|Win32 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Release|Win32.Build.0 = Release|Win32 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Release|x64.ActiveCfg = Release|x64 - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9}.Release|x64.Build.0 = Release|x64 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Debug|Win32.Build.0 = Debug|Win32 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Debug|x64.ActiveCfg = Debug|x64 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Debug|x64.Build.0 = Debug|x64 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Release|Win32.ActiveCfg = Release|Win32 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Release|Win32.Build.0 = Release|Win32 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Release|x64.ActiveCfg = Release|x64 - {45536B15-5178-4F81-B80C-8287B963F9D9}.Release|x64.Build.0 = Release|x64 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Debug|Win32.ActiveCfg = Debug|Win32 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Debug|Win32.Build.0 = Debug|Win32 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Debug|x64.ActiveCfg = Debug|x64 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Debug|x64.Build.0 = Debug|x64 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Release|Win32.ActiveCfg = Release|Win32 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Release|Win32.Build.0 = Release|Win32 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Release|x64.ActiveCfg = Release|x64 - {474ACE1B-A818-4947-911C-B298CD7F6FBD}.Release|x64.Build.0 = Release|x64 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Debug|Win32.ActiveCfg = Debug|Win32 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Debug|Win32.Build.0 = Debug|Win32 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Debug|x64.ActiveCfg = Debug|x64 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Debug|x64.Build.0 = Debug|x64 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Release|Win32.ActiveCfg = Release|Win32 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Release|Win32.Build.0 = Release|Win32 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Release|x64.ActiveCfg = Release|x64 - {5CCF0167-D23D-45B9-BCDA-F0B912470126}.Release|x64.Build.0 = Release|x64 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Debug|Win32.ActiveCfg = Debug|Win32 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Debug|Win32.Build.0 = Debug|Win32 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Debug|x64.ActiveCfg = Debug|x64 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Debug|x64.Build.0 = Debug|x64 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Release|Win32.ActiveCfg = Release|Win32 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Release|Win32.Build.0 = Release|Win32 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Release|x64.ActiveCfg = Release|x64 - {5C976C38-2A50-49E9-B381-6952E683FBED}.Release|x64.Build.0 = Release|x64 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Debug|Win32.ActiveCfg = Debug|Win32 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Debug|Win32.Build.0 = Debug|Win32 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Debug|x64.ActiveCfg = Debug|x64 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Debug|x64.Build.0 = Debug|x64 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Release|Win32.ActiveCfg = Release|Win32 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Release|Win32.Build.0 = Release|Win32 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Release|x64.ActiveCfg = Release|x64 - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9}.Release|x64.Build.0 = Release|x64 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Debug|Win32.ActiveCfg = Debug|Win32 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Debug|Win32.Build.0 = Debug|Win32 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Debug|x64.ActiveCfg = Debug|x64 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Debug|x64.Build.0 = Debug|x64 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Release|Win32.ActiveCfg = Release|Win32 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Release|Win32.Build.0 = Release|Win32 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Release|x64.ActiveCfg = Release|x64 - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880}.Release|x64.Build.0 = Release|x64 - {66CED940-0111-4196-B921-27B146643F44}.Debug|Win32.ActiveCfg = Debug|Win32 - {66CED940-0111-4196-B921-27B146643F44}.Debug|Win32.Build.0 = Debug|Win32 - {66CED940-0111-4196-B921-27B146643F44}.Debug|x64.ActiveCfg = Debug|x64 - {66CED940-0111-4196-B921-27B146643F44}.Debug|x64.Build.0 = Debug|x64 - {66CED940-0111-4196-B921-27B146643F44}.Release|Win32.ActiveCfg = Release|Win32 - {66CED940-0111-4196-B921-27B146643F44}.Release|Win32.Build.0 = Release|Win32 - {66CED940-0111-4196-B921-27B146643F44}.Release|x64.ActiveCfg = Release|x64 - {66CED940-0111-4196-B921-27B146643F44}.Release|x64.Build.0 = Release|x64 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Debug|Win32.ActiveCfg = Debug|Win32 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Debug|Win32.Build.0 = Debug|Win32 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Debug|x64.ActiveCfg = Debug|x64 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Debug|x64.Build.0 = Debug|x64 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Release|Win32.ActiveCfg = Release|Win32 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Release|Win32.Build.0 = Release|Win32 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Release|x64.ActiveCfg = Release|x64 - {8B6734FD-DCB8-43E3-B507-A2B9127DD055}.Release|x64.Build.0 = Release|x64 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Debug|Win32.ActiveCfg = Debug|Win32 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Debug|Win32.Build.0 = Debug|Win32 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Debug|x64.ActiveCfg = Debug|x64 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Debug|x64.Build.0 = Debug|x64 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Release|Win32.ActiveCfg = Release|Win32 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Release|Win32.Build.0 = Release|Win32 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Release|x64.ActiveCfg = Release|x64 - {D5835BCA-D0F1-45FF-81B6-147B9FC75123}.Release|x64.Build.0 = Release|x64 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Debug|Win32.ActiveCfg = Debug|Win32 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Debug|Win32.Build.0 = Debug|Win32 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Debug|x64.ActiveCfg = Debug|x64 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Debug|x64.Build.0 = Debug|x64 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Release|Win32.ActiveCfg = Release|Win32 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Release|Win32.Build.0 = Release|Win32 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Release|x64.ActiveCfg = Release|x64 - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0}.Release|x64.Build.0 = Release|x64 - {93940E33-A1DE-4354-AF7A-995916693849}.Debug|Win32.ActiveCfg = Debug|Win32 - {93940E33-A1DE-4354-AF7A-995916693849}.Debug|Win32.Build.0 = Debug|Win32 - {93940E33-A1DE-4354-AF7A-995916693849}.Debug|x64.ActiveCfg = Debug|x64 - {93940E33-A1DE-4354-AF7A-995916693849}.Debug|x64.Build.0 = Debug|x64 - {93940E33-A1DE-4354-AF7A-995916693849}.Release|Win32.ActiveCfg = Release|Win32 - {93940E33-A1DE-4354-AF7A-995916693849}.Release|Win32.Build.0 = Release|Win32 - {93940E33-A1DE-4354-AF7A-995916693849}.Release|x64.ActiveCfg = Release|x64 - {93940E33-A1DE-4354-AF7A-995916693849}.Release|x64.Build.0 = Release|x64 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Debug|Win32.ActiveCfg = Debug|Win32 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Debug|Win32.Build.0 = Debug|Win32 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Debug|x64.ActiveCfg = Debug|x64 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Debug|x64.Build.0 = Debug|x64 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Release|Win32.ActiveCfg = Release|Win32 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Release|Win32.Build.0 = Release|Win32 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Release|x64.ActiveCfg = Release|x64 - {498094C5-7A52-4EDA-8870-FF1F4D22CE62}.Release|x64.Build.0 = Release|x64 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Debug|Win32.ActiveCfg = Debug|Win32 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Debug|Win32.Build.0 = Debug|Win32 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Debug|x64.ActiveCfg = Debug|x64 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Debug|x64.Build.0 = Debug|x64 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Release|Win32.ActiveCfg = Release|Win32 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Release|Win32.Build.0 = Release|Win32 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Release|x64.ActiveCfg = Release|x64 - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E}.Release|x64.Build.0 = Release|x64 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Debug|Win32.ActiveCfg = Debug|Win32 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Debug|Win32.Build.0 = Debug|Win32 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Debug|x64.ActiveCfg = Debug|x64 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Debug|x64.Build.0 = Debug|x64 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Release|Win32.ActiveCfg = Release|Win32 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Release|Win32.Build.0 = Release|Win32 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Release|x64.ActiveCfg = Release|x64 - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD}.Release|x64.Build.0 = Release|x64 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Debug|Win32.ActiveCfg = Debug|Win32 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Debug|Win32.Build.0 = Debug|Win32 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Debug|x64.ActiveCfg = Debug|x64 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Debug|x64.Build.0 = Debug|x64 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Release|Win32.ActiveCfg = Release|Win32 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Release|Win32.Build.0 = Release|Win32 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Release|x64.ActiveCfg = Release|x64 - {874C2D1E-CCAB-4F68-8581-CB1B67D71587}.Release|x64.Build.0 = Release|x64 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Debug|Win32.ActiveCfg = Debug|Win32 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Debug|Win32.Build.0 = Debug|Win32 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Debug|x64.ActiveCfg = Debug|x64 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Debug|x64.Build.0 = Debug|x64 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Release|Win32.ActiveCfg = Release|Win32 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Release|Win32.Build.0 = Release|Win32 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Release|x64.ActiveCfg = Release|x64 - {D15D6940-E187-48B9-A6F3-3E278CC194B1}.Release|x64.Build.0 = Release|x64 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Debug|Win32.ActiveCfg = Debug|Win32 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Debug|Win32.Build.0 = Debug|Win32 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Debug|x64.ActiveCfg = Debug|x64 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Debug|x64.Build.0 = Debug|x64 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Release|Win32.ActiveCfg = Release|Win32 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Release|Win32.Build.0 = Release|Win32 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Release|x64.ActiveCfg = Release|x64 - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72}.Release|x64.Build.0 = Release|x64 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Debug|Win32.ActiveCfg = Debug|Win32 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Debug|Win32.Build.0 = Debug|Win32 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Debug|x64.ActiveCfg = Debug|x64 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Debug|x64.Build.0 = Debug|x64 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Release|Win32.ActiveCfg = Release|Win32 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Release|Win32.Build.0 = Release|Win32 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Release|x64.ActiveCfg = Release|x64 - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA}.Release|x64.Build.0 = Release|x64 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Debug|Win32.ActiveCfg = Debug|Win32 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Debug|Win32.Build.0 = Debug|Win32 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Debug|x64.ActiveCfg = Debug|x64 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Debug|x64.Build.0 = Debug|x64 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Release|Win32.ActiveCfg = Release|Win32 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Release|Win32.Build.0 = Release|Win32 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Release|x64.ActiveCfg = Release|x64 - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D}.Release|x64.Build.0 = Release|x64 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Debug|Win32.ActiveCfg = Debug|Win32 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Debug|Win32.Build.0 = Debug|Win32 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Debug|x64.ActiveCfg = Debug|x64 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Debug|x64.Build.0 = Debug|x64 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Release|Win32.ActiveCfg = Release|Win32 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Release|Win32.Build.0 = Release|Win32 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Release|x64.ActiveCfg = Release|x64 - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196}.Release|x64.Build.0 = Release|x64 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Debug|Win32.ActiveCfg = Debug|Win32 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Debug|Win32.Build.0 = Debug|Win32 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Debug|x64.ActiveCfg = Debug|x64 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Debug|x64.Build.0 = Debug|x64 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Release|Win32.ActiveCfg = Release|Win32 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Release|Win32.Build.0 = Release|Win32 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Release|x64.ActiveCfg = Release|x64 - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13}.Release|x64.Build.0 = Release|x64 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Debug|Win32.ActiveCfg = Debug|Win32 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Debug|Win32.Build.0 = Debug|Win32 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Debug|x64.ActiveCfg = Debug|x64 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Debug|x64.Build.0 = Debug|x64 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Release|Win32.ActiveCfg = Release|Win32 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Release|Win32.Build.0 = Release|Win32 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Release|x64.ActiveCfg = Release|x64 - {872275DA-5CF3-4EE7-A947-32E13D203F17}.Release|x64.Build.0 = Release|x64 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Debug|Win32.ActiveCfg = Debug|Win32 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Debug|Win32.Build.0 = Debug|Win32 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Debug|x64.ActiveCfg = Debug|x64 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Debug|x64.Build.0 = Debug|x64 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Release|Win32.ActiveCfg = Release|Win32 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Release|Win32.Build.0 = Release|Win32 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Release|x64.ActiveCfg = Release|x64 - {0964487A-2B36-436A-B25C-4405D9FA5205}.Release|x64.Build.0 = Release|x64 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Debug|Win32.ActiveCfg = Debug|Win32 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Debug|Win32.Build.0 = Debug|Win32 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Debug|x64.ActiveCfg = Debug|x64 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Debug|x64.Build.0 = Debug|x64 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Release|Win32.ActiveCfg = Release|Win32 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Release|Win32.Build.0 = Release|Win32 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Release|x64.ActiveCfg = Release|x64 - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F}.Release|x64.Build.0 = Release|x64 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Debug|Win32.ActiveCfg = Debug|Win32 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Debug|Win32.Build.0 = Debug|Win32 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Debug|x64.ActiveCfg = Debug|x64 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Debug|x64.Build.0 = Debug|x64 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Release|Win32.ActiveCfg = Release|Win32 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Release|Win32.Build.0 = Release|Win32 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Release|x64.ActiveCfg = Release|x64 - {FA8883FC-2639-4811-B684-1182EB48BE18}.Release|x64.Build.0 = Release|x64 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Debug|Win32.ActiveCfg = Debug|Win32 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Debug|Win32.Build.0 = Debug|Win32 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Debug|x64.ActiveCfg = Debug|x64 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Debug|x64.Build.0 = Debug|x64 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Release|Win32.ActiveCfg = Release|Win32 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Release|Win32.Build.0 = Release|Win32 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Release|x64.ActiveCfg = Release|x64 - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043}.Release|x64.Build.0 = Release|x64 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Debug|Win32.ActiveCfg = Debug|Win32 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Debug|Win32.Build.0 = Debug|Win32 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Debug|x64.ActiveCfg = Debug|x64 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Debug|x64.Build.0 = Debug|x64 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Release|Win32.ActiveCfg = Release|Win32 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Release|Win32.Build.0 = Release|Win32 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Release|x64.ActiveCfg = Release|x64 - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0}.Release|x64.Build.0 = Release|x64 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Debug|Win32.ActiveCfg = Debug|Win32 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Debug|Win32.Build.0 = Debug|Win32 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Debug|x64.ActiveCfg = Debug|x64 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Debug|x64.Build.0 = Debug|x64 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Release|Win32.ActiveCfg = Release|Win32 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Release|Win32.Build.0 = Release|Win32 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Release|x64.ActiveCfg = Release|x64 - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/MSVC_NMake/libsigc++2.vcxproj b/MSVC_NMake/libsigc++2.vcxproj deleted file mode 100644 index cb425b12..00000000 --- a/MSVC_NMake/libsigc++2.vcxproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - sigc - {83997EF6-02D6-4CDB-8B3C-DBCA3018CC72} - Win32Proj - - - - DynamicLibrary - MultiByte - v120 - - - DynamicLibrary - MultiByte - v120 - - - DynamicLibrary - MultiByte - v120 - - - DynamicLibrary - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;$(SigcBuildDefs);%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - false - - - - - Disabled - _DEBUG;$(SigcBuildDefs);%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - false - - - - - $(SigcBuildDefs);%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - false - - - - - $(SigcBuildDefs);%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MSVC_NMake/libsigc++2.vcxproj.filters b/MSVC_NMake/libsigc++2.vcxproj.filters deleted file mode 100644 index faef4573..00000000 --- a/MSVC_NMake/libsigc++2.vcxproj.filters +++ /dev/null @@ -1,68 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - Source Files - Source Files - Source Files - - - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - Header Files - - - Resource Files - - diff --git a/MSVC_NMake/sigc-build-defines.props b/MSVC_NMake/sigc-build-defines.props deleted file mode 100644 index 3f8a80cc..00000000 --- a/MSVC_NMake/sigc-build-defines.props +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - CONSOLE;SIGC_BUILD - - - <_PropertySheetDisplayName>sigcbuilddefinesprops - $(SolutionDir)$(Configuration)\$(PlatformName)\bin\ - $(SolutionDir)$(Configuration)\$(PlatformName)\obj\$(ProjectName)\ - - - - .\;..;%(AdditionalIncludeDirectories) - msvc_recommended_pragmas.h;%(ForcedIncludeFiles) - true - /d2Zi+ %(AdditionalOptions) - - - true - - - - - $(SigcBuildDefs) - - - diff --git a/MSVC_NMake/sigc-debug-dll-build-defines.props b/MSVC_NMake/sigc-debug-dll-build-defines.props deleted file mode 100644 index a113184b..00000000 --- a/MSVC_NMake/sigc-debug-dll-build-defines.props +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - <_PropertySheetDisplayName>sigcdebugdllbuilddefinesprops - - - - $(SolutionDir)$(Configuration)\$(PlatformName)\bin\$(ProjectName)$(DebugDllSuffix).dll - $(SolutionDir)$(Configuration)\$(PlatformName)\bin\$(ProjectName)$(DebugDllSuffix).pdb - $(SolutionDir)$(Configuration)\$(PlatformName)\bin\$(ProjectName)$(DebugDllSuffix).lib - false - - - diff --git a/MSVC_NMake/sigc-install.props b/MSVC_NMake/sigc-install.props deleted file mode 100644 index 8e740bc3..00000000 --- a/MSVC_NMake/sigc-install.props +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - $(SolutionDir)$(Configuration)\$(Platform)\bin - $(BinDir)\sigc$(ReleaseDllSuffix).dll - $(BinDir)\sigc$(DebugDllSuffix).dll - -mkdir $(CopyDir) - -mkdir $(CopyDir)\bin -if "$(Configuration)" == "Release" copy "$(BinDir)\sigc$(ReleaseDllSuffix).dll" "$(CopyDir)\bin" -if "$(Configuration)" == "Release" copy "$(BinDir)\sigc$(ReleaseDllSuffix).pdb" "$(CopyDir)\bin" -if "$(Configuration)" == "Debug" copy "$(BinDir)\sigc$(DebugDllSuffix).dll" "$(CopyDir)\bin" -if "$(Configuration)" == "Debug" copy "$(BinDir)\sigc$(DebugDllSuffix).pdb" "$(CopyDir)\bin" - -mkdir $(CopyDir)\lib\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\include -copy ".\sigc++config.h" "$(CopyDir)\lib\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\include" -if "$(Configuration)" == "Release" copy "$(BinDir)\sigc$(ReleaseDllSuffix).lib" "$(CopyDir)\lib" -if "$(Configuration)" == "Debug" copy "$(BinDir)\sigc$(DebugDllSuffix).lib" "$(CopyDir)\lib" - -mkdir "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\lambda" -mkdir "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors" - -copy "..\sigc++\sigc++.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" - -copy "..\sigc++\bind.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\bind_return.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\connection.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\limit_reference.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\reference_wrapper.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\retype_return.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\signal.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\signal_base.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\slot.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\trackable.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\type_traits.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\visit_each.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\" -copy "..\sigc++\adaptors\adaptors.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\adaptor_trait.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\bind.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\bind_return.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\bound_argument.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\compose.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\deduce_result_type.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\exception_catch.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\hide.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\retype.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\retype_return.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\track_obj.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\" -copy "..\sigc++\adaptors\lambda\base.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\lambda" -copy "..\sigc++\adaptors\lambda\select.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\adaptors\lambda" -copy "..\sigc++\functors\functors.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" -copy "..\sigc++\functors\functor_trait.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" -copy "..\sigc++\functors\mem_fun.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" -copy "..\sigc++\functors\ptr_fun.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" -copy "..\sigc++\functors\slot.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" -copy "..\sigc++\functors\slot_base.h" "$(CopyDir)\include\sigc++-$(ApiMajorVersion).$(ApiMinorVersion)\sigc++\functors\" - - - - <_PropertySheetDisplayName>sigcinstallprops - - - - $(BinDir) - - - $(InstalledReleaseDlls) - - - $(InstalledDebugDlls) - - - $(SigcDoInstall) - - - diff --git a/MSVC_NMake/sigc-install.vcxproj b/MSVC_NMake/sigc-install.vcxproj deleted file mode 100644 index 1238f930..00000000 --- a/MSVC_NMake/sigc-install.vcxproj +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {8DE7735B-B67F-4324-ABAB-55BF1D12A58A} - sigc-install - Win32Proj - - - - Utility - MultiByte - true - v120 - - - Utility - MultiByte - v120 - - - Utility - MultiByte - true - v120 - - - Utility - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - $(GlibEtcInstallRoot)\ - - $(GlibEtcInstallRoot)\ - - $(GlibEtcInstallRoot)\ - - $(GlibEtcInstallRoot)\ - - - - - - - - - - - - - Installing Build Results... - $(SigcDoInstall) - $(InstalledDebugDlls);%(Outputs) - Installing Build Results... - $(SigcDoInstall) - $(InstalledDebugDlls);%(Outputs) - Installing Build Results... - $(SigcDoInstall) - $(InstalledReleaseDlls);%(Outputs) - Installing Build Results... - $(SigcDoInstall) - $(InstalledReleaseDlls);%(Outputs) - - - - - - diff --git a/MSVC_NMake/sigc-release-dll-build-defines.props b/MSVC_NMake/sigc-release-dll-build-defines.props deleted file mode 100644 index 66879688..00000000 --- a/MSVC_NMake/sigc-release-dll-build-defines.props +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - <_PropertySheetDisplayName>sigcreleasedllbuilddefinesprops - - - - $(SolutionDir)$(Configuration)\$(PlatformName)\bin\$(ProjectName)$(ReleaseDllSuffix).dll - $(SolutionDir)$(Configuration)\$(PlatformName)\bin\$(ProjectName)$(ReleaseDllSuffix).pdb - $(SolutionDir)$(Configuration)\$(PlatformName)\bin\$(ProjectName)$(ReleaseDllSuffix).lib - false - - - diff --git a/MSVC_NMake/sigc-version-paths.props b/MSVC_NMake/sigc-version-paths.props deleted file mode 100644 index ef72893f..00000000 --- a/MSVC_NMake/sigc-version-paths.props +++ /dev/null @@ -1,42 +0,0 @@ - - - - 12 - $(SolutionDir)\..\..\vs$(VSVer)\$(Platform) - $(GlibEtcInstallRoot) - $(SolutionDir)$(Configuration)\$(Platform)\obj\$(ProjectName)\ - 2 - 0 - -vc$(VSVer)0-$(ApiMajorVersion)_$(ApiMinorVersion) - -vc$(VSVer)0-d-$(ApiMajorVersion)_$(ApiMinorVersion) - - - <_PropertySheetDisplayName>sigcversionpathsprops - - - - $(VSVer) - - - $(GlibEtcInstallRoot) - - - $(CopyDir) - - - $(DefDir) - - - $(ApiMajorVersion) - - - $(ApiMinorVersion) - - - $(ReleaseDllSuffix) - - - $(DebugDllSuffix) - - - diff --git a/MSVC_NMake/test_accum_iter.vcxproj b/MSVC_NMake/test_accum_iter.vcxproj deleted file mode 100644 index a700caa1..00000000 --- a/MSVC_NMake/test_accum_iter.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {6BD61EB8-1BAA-4E7D-93AD-1D8B10C56B4D} - test_accum_iter - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_accum_iter.vcxproj.filters b/MSVC_NMake/test_accum_iter.vcxproj.filters deleted file mode 100644 index f2e52281..00000000 --- a/MSVC_NMake/test_accum_iter.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_accumulated.vcxproj b/MSVC_NMake/test_accumulated.vcxproj deleted file mode 100644 index 814863e6..00000000 --- a/MSVC_NMake/test_accumulated.vcxproj +++ /dev/null @@ -1,167 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {D15D6940-E187-48B9-A6F3-3E278CC194B1} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - diff --git a/MSVC_NMake/test_accumulated.vcxproj.filters b/MSVC_NMake/test_accumulated.vcxproj.filters deleted file mode 100644 index ac70a9e1..00000000 --- a/MSVC_NMake/test_accumulated.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {d2d6a5a3-66bf-41e8-94a7-f1b4c1197862} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {ff88fab2-20bb-456e-b9ce-76d3bb502f18} - h;hpp;hxx;hm;inl;inc - - - {0449223f-9c72-4b75-bfef-f12066111b51} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_bind.vcxproj b/MSVC_NMake/test_bind.vcxproj deleted file mode 100644 index 8d3910dc..00000000 --- a/MSVC_NMake/test_bind.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {7D0D2CF8-5B22-4F9E-BD38-63083A2CF662} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_bind.vcxproj.filters b/MSVC_NMake/test_bind.vcxproj.filters deleted file mode 100644 index 62686f5d..00000000 --- a/MSVC_NMake/test_bind.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_bind_ref.vcxproj b/MSVC_NMake/test_bind_ref.vcxproj deleted file mode 100644 index 7a47daca..00000000 --- a/MSVC_NMake/test_bind_ref.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {6D6FAF93-EC61-4DB4-BD81-05FA35D25196} - test_bind_ref - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_bind_ref.vcxproj.filters b/MSVC_NMake/test_bind_ref.vcxproj.filters deleted file mode 100644 index 5302de5a..00000000 --- a/MSVC_NMake/test_bind_ref.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_bind_refptr.vcxproj b/MSVC_NMake/test_bind_refptr.vcxproj deleted file mode 100644 index f7f785f0..00000000 --- a/MSVC_NMake/test_bind_refptr.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {52C29F6B-60EF-4130-BB02-6DEE0D9CDE13} - test_bind_refptr - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_bind_refptr.vcxproj.filters b/MSVC_NMake/test_bind_refptr.vcxproj.filters deleted file mode 100644 index 1f1aba4f..00000000 --- a/MSVC_NMake/test_bind_refptr.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_bind_return.vcxproj b/MSVC_NMake/test_bind_return.vcxproj deleted file mode 100644 index c0cbb947..00000000 --- a/MSVC_NMake/test_bind_return.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {EBA06A10-13EA-46D1-8B7F-C3D5308A47F9} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_bind_return.vcxproj.filters b/MSVC_NMake/test_bind_return.vcxproj.filters deleted file mode 100644 index b98b9558..00000000 --- a/MSVC_NMake/test_bind_return.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_compose.vcxproj b/MSVC_NMake/test_compose.vcxproj deleted file mode 100644 index 24ecb347..00000000 --- a/MSVC_NMake/test_compose.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {45536B15-5178-4F81-B80C-8287B963F9D9} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_compose.vcxproj.filters b/MSVC_NMake/test_compose.vcxproj.filters deleted file mode 100644 index d0bcf8c6..00000000 --- a/MSVC_NMake/test_compose.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_copy_invalid_slot.vcxproj b/MSVC_NMake/test_copy_invalid_slot.vcxproj deleted file mode 100644 index f83d10bf..00000000 --- a/MSVC_NMake/test_copy_invalid_slot.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {872275DA-5CF3-4EE7-A947-32E13D203F17} - test_copy_invalid_slot - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_copy_invalid_slot.vcxproj.filters b/MSVC_NMake/test_copy_invalid_slot.vcxproj.filters deleted file mode 100644 index 827e9b5b..00000000 --- a/MSVC_NMake/test_copy_invalid_slot.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_cpp11_lambda.vcxproj b/MSVC_NMake/test_cpp11_lambda.vcxproj deleted file mode 100644 index 1bbf8513..00000000 --- a/MSVC_NMake/test_cpp11_lambda.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {0964487A-2B36-436A-B25C-4405D9FA5205} - test_cpp11_lambda - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_cpp11_lambda.vcxproj.filters b/MSVC_NMake/test_cpp11_lambda.vcxproj.filters deleted file mode 100644 index 489cf964..00000000 --- a/MSVC_NMake/test_cpp11_lambda.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_custom.vcxproj b/MSVC_NMake/test_custom.vcxproj deleted file mode 100644 index 9c5feda5..00000000 --- a/MSVC_NMake/test_custom.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {66096E31-B40C-4E2E-9C34-8D5ABC891C8F} - test_custom - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_custom.vcxproj.filters b/MSVC_NMake/test_custom.vcxproj.filters deleted file mode 100644 index fbefe5fb..00000000 --- a/MSVC_NMake/test_custom.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_deduce_result_type.vcxproj b/MSVC_NMake/test_deduce_result_type.vcxproj deleted file mode 100644 index 008537a0..00000000 --- a/MSVC_NMake/test_deduce_result_type.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {474ACE1B-A818-4947-911C-B298CD7F6FBD} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_deduce_result_type.vcxproj.filters b/MSVC_NMake/test_deduce_result_type.vcxproj.filters deleted file mode 100644 index 8b4879a3..00000000 --- a/MSVC_NMake/test_deduce_result_type.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_disconnect.vcxproj b/MSVC_NMake/test_disconnect.vcxproj deleted file mode 100644 index 639b1360..00000000 --- a/MSVC_NMake/test_disconnect.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {5CCF0167-D23D-45B9-BCDA-F0B912470126} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_disconnect.vcxproj.filters b/MSVC_NMake/test_disconnect.vcxproj.filters deleted file mode 100644 index 898c30c4..00000000 --- a/MSVC_NMake/test_disconnect.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_disconnect_during_emit.vcxproj b/MSVC_NMake/test_disconnect_during_emit.vcxproj deleted file mode 100644 index ce838709..00000000 --- a/MSVC_NMake/test_disconnect_during_emit.vcxproj +++ /dev/null @@ -1,167 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {874C2D1E-CCAB-4F68-8581-CB1B67D71587} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_disconnect_during_emit.vcxproj.filters b/MSVC_NMake/test_disconnect_during_emit.vcxproj.filters deleted file mode 100644 index 0ca73712..00000000 --- a/MSVC_NMake/test_disconnect_during_emit.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_exception_catch.vcxproj b/MSVC_NMake/test_exception_catch.vcxproj deleted file mode 100644 index 81fa0c0e..00000000 --- a/MSVC_NMake/test_exception_catch.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {5C976C38-2A50-49E9-B381-6952E683FBED} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_exception_catch.vcxproj.filters b/MSVC_NMake/test_exception_catch.vcxproj.filters deleted file mode 100644 index a0092023..00000000 --- a/MSVC_NMake/test_exception_catch.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_functor_trait.vcxproj b/MSVC_NMake/test_functor_trait.vcxproj deleted file mode 100644 index 4a7b238f..00000000 --- a/MSVC_NMake/test_functor_trait.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {F130A6B6-5E0A-4560-AE4A-E281DC538AC9} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_functor_trait.vcxproj.filters b/MSVC_NMake/test_functor_trait.vcxproj.filters deleted file mode 100644 index 2bc14f2f..00000000 --- a/MSVC_NMake/test_functor_trait.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_hide.vcxproj b/MSVC_NMake/test_hide.vcxproj deleted file mode 100644 index b891ea46..00000000 --- a/MSVC_NMake/test_hide.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {64BDAD0B-0D0B-42D0-940E-3BCDA783C880} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_hide.vcxproj.filters b/MSVC_NMake/test_hide.vcxproj.filters deleted file mode 100644 index 7ec4e336..00000000 --- a/MSVC_NMake/test_hide.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_limit_reference.vcxproj b/MSVC_NMake/test_limit_reference.vcxproj deleted file mode 100644 index dd8d553d..00000000 --- a/MSVC_NMake/test_limit_reference.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {FA8883FC-2639-4811-B684-1182EB48BE18} - test_limit_reference - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_limit_reference.vcxproj.filters b/MSVC_NMake/test_limit_reference.vcxproj.filters deleted file mode 100644 index 8dbd2613..00000000 --- a/MSVC_NMake/test_limit_reference.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_mem_fun.vcxproj b/MSVC_NMake/test_mem_fun.vcxproj deleted file mode 100644 index 23716199..00000000 --- a/MSVC_NMake/test_mem_fun.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {66CED940-0111-4196-B921-27B146643F44} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_mem_fun.vcxproj.filters b/MSVC_NMake/test_mem_fun.vcxproj.filters deleted file mode 100644 index 8a2f60f2..00000000 --- a/MSVC_NMake/test_mem_fun.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_ptr_fun.vcxproj b/MSVC_NMake/test_ptr_fun.vcxproj deleted file mode 100644 index 38695404..00000000 --- a/MSVC_NMake/test_ptr_fun.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {8B6734FD-DCB8-43E3-B507-A2B9127DD055} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_ptr_fun.vcxproj.filters b/MSVC_NMake/test_ptr_fun.vcxproj.filters deleted file mode 100644 index 0e4643ba..00000000 --- a/MSVC_NMake/test_ptr_fun.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_retype.vcxproj b/MSVC_NMake/test_retype.vcxproj deleted file mode 100644 index a36b8fc3..00000000 --- a/MSVC_NMake/test_retype.vcxproj +++ /dev/null @@ -1,167 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {5329DFD2-DAFB-4AED-BC1F-09393ACF8EAD} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_retype.vcxproj.filters b/MSVC_NMake/test_retype.vcxproj.filters deleted file mode 100644 index 48381d1e..00000000 --- a/MSVC_NMake/test_retype.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_retype_return.vcxproj b/MSVC_NMake/test_retype_return.vcxproj deleted file mode 100644 index a42ca5dd..00000000 --- a/MSVC_NMake/test_retype_return.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {D5835BCA-D0F1-45FF-81B6-147B9FC75123} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_retype_return.vcxproj.filters b/MSVC_NMake/test_retype_return.vcxproj.filters deleted file mode 100644 index 02c440b9..00000000 --- a/MSVC_NMake/test_retype_return.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_signal.vcxproj b/MSVC_NMake/test_signal.vcxproj deleted file mode 100644 index 4cdca701..00000000 --- a/MSVC_NMake/test_signal.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {11AA4900-467B-4F60-BC36-BB1EB6F91EC0} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_signal.vcxproj.filters b/MSVC_NMake/test_signal.vcxproj.filters deleted file mode 100644 index 02cf369f..00000000 --- a/MSVC_NMake/test_signal.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_size.vcxproj b/MSVC_NMake/test_size.vcxproj deleted file mode 100644 index fb3cad2e..00000000 --- a/MSVC_NMake/test_size.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {93940E33-A1DE-4354-AF7A-995916693849} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_size.vcxproj.filters b/MSVC_NMake/test_size.vcxproj.filters deleted file mode 100644 index aba69af7..00000000 --- a/MSVC_NMake/test_size.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_slot.vcxproj b/MSVC_NMake/test_slot.vcxproj deleted file mode 100644 index 762f52d4..00000000 --- a/MSVC_NMake/test_slot.vcxproj +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {498094C5-7A52-4EDA-8870-FF1F4D22CE62} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_slot.vcxproj.filters b/MSVC_NMake/test_slot.vcxproj.filters deleted file mode 100644 index a28922be..00000000 --- a/MSVC_NMake/test_slot.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_slot_disconnect.vcxproj b/MSVC_NMake/test_slot_disconnect.vcxproj deleted file mode 100644 index 290ce23f..00000000 --- a/MSVC_NMake/test_slot_disconnect.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {354A2B5F-9F1A-48BB-B9C4-6E7E9A6C8043} - test_slot_disconnect - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_slot_disconnect.vcxproj.filters b/MSVC_NMake/test_slot_disconnect.vcxproj.filters deleted file mode 100644 index 2c28719e..00000000 --- a/MSVC_NMake/test_slot_disconnect.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_track_obj.vcxproj b/MSVC_NMake/test_track_obj.vcxproj deleted file mode 100644 index 078466dd..00000000 --- a/MSVC_NMake/test_track_obj.vcxproj +++ /dev/null @@ -1,165 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {4F5F838F-2DCD-4FB6-87B5-9BF87A8671BA} - test_track_obj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_track_obj.vcxproj.filters b/MSVC_NMake/test_track_obj.vcxproj.filters deleted file mode 100644 index fc429cc9..00000000 --- a/MSVC_NMake/test_track_obj.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_trackable.vcxproj b/MSVC_NMake/test_trackable.vcxproj deleted file mode 100644 index 2ef65add..00000000 --- a/MSVC_NMake/test_trackable.vcxproj +++ /dev/null @@ -1,171 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {3FAD81D2-0F42-4444-9BD6-9ADF10EBD38E} - Win32Proj - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - false - - - - - - - - - diff --git a/MSVC_NMake/test_trackable.vcxproj.filters b/MSVC_NMake/test_trackable.vcxproj.filters deleted file mode 100644 index 6bc2407a..00000000 --- a/MSVC_NMake/test_trackable.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx - - - - Source Files - Source Files - - - Header Files - - diff --git a/MSVC_NMake/test_visit_each.vcxproj b/MSVC_NMake/test_visit_each.vcxproj deleted file mode 100644 index 13ff62a8..00000000 --- a/MSVC_NMake/test_visit_each.vcxproj +++ /dev/null @@ -1,166 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B775AB39-C59C-4DA0-875C-BCCCB87CD5B0} - test_visit_each - - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - Application - MultiByte - v120 - - - - - - - - - - - - - - - - - - - - - - - true - true - false - false - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - EditAndContinue - - - Console - false - - - MachineX86 - - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - Console - false - - - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - MachineX86 - - - - - %(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - Console - true - true - false - - - - - - - - - - - - - - {83997ef6-02d6-4cdb-8b3c-dbca3018cc72} - - - - - - diff --git a/MSVC_NMake/test_visit_each.vcxproj.filters b/MSVC_NMake/test_visit_each.vcxproj.filters deleted file mode 100644 index 33e7acd6..00000000 --- a/MSVC_NMake/test_visit_each.vcxproj.filters +++ /dev/null @@ -1,24 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - Source Files - Source Files - - - Header Files - - From e153981de0db9496efe6babcd77819a2747bf597 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Mon, 10 Sep 2018 12:16:24 +0800 Subject: [PATCH 077/145] builds: Add README file for MSVC builds Let people know how Visual Studio builds can be done and the options that can be used for the builds. --- MSVC_NMake/README.txt | 47 ++++++++++++++++++++++++++++++++++++++++++ MSVC_NMake/filelist.am | 1 + 2 files changed, 48 insertions(+) create mode 100644 MSVC_NMake/README.txt diff --git a/MSVC_NMake/README.txt b/MSVC_NMake/README.txt new file mode 100644 index 00000000..bb0281c4 --- /dev/null +++ b/MSVC_NMake/README.txt @@ -0,0 +1,47 @@ +Instructions for building libsigc++ on Visual Studio +==================================================== +Building the libsigc++ on Windows is now supported using Visual Studio +versions 2013 or later in both 32-bit and 64-bit (x64) flavors, +via NMake Makefiles. Due to C++-11 usage, Visual Studio 2012 or +earlier is not supported. + +libsigc++ itself has no external dependencies, but building the +benchmark test program will require an installation of the Boost +C++ libraries. + +The following describes what items are built with the following +targets: + +-all (or no target specified): The libsigc++ DLL and the example programs. +-test: The libsigc++ DLL and the test programs. +-benchmark: The libsigc++ DLL and the benchmark program. + +The following are instructions for performing such a build. A 'clean' target is +provided-it is recommended that one cleans the build and redo the build if any +configuration option changed. An +'install' target is also provided to copy the built items in their appropriate +locations under $(PREFIX), which is described below. + +Invoke the build by issuing the command: +nmake /f Makefile.vc CFG=[release|debug] [PREFIX=...] +where: + +CFG: Required. Choose from a release or debug build. Note that + all builds generate a .pdb file for each .dll and .exe built--this refers + to the C/C++ runtime that the build uses. + +PREFIX: Optional. Base directory of where the third-party headers, libraries + and needed tools can be found, i.e. headers in $(PREFIX)\include, + libraries in $(PREFIX)\lib and tools in $(PREFIX)\bin. If not + specified, $(PREFIX) is set as $(srcroot)\..\vs$(X)\$(platform), where + $(platform) is win32 for 32-bit builds or x64 for 64-bit builds, and + $(X) is the short version of the Visual Studio used, as follows: + 2017: 15 + +Explanation of options, set by