diff --git a/.gitignore b/.gitignore
index 14155c15..0fe2211c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,8 +7,8 @@ Makefile.in
*.l[ao]
*~
/INSTALL
-/MSVC_Net201?/sigc.rc
-/MSVC_Net201?/sigc++config.h
+/MSVC_NMake/sigc.rc
+/MSVC_NMake/sigc++config.h
/aclocal.m4
/autom4te.cache/
/config.h
@@ -23,3 +23,6 @@ Makefile.in
/sigc++config.h
/sigc++-*.pc
/stamp-h?
+untracked/build_scripts/
+untracked/docs/
+untracked/sigc++/
diff --git a/MSVC_NMake/Makefile.vc b/MSVC_NMake/Makefile.vc
new file mode 100644
index 00000000..9798e0ac
--- /dev/null
+++ b/MSVC_NMake/Makefile.vc
@@ -0,0 +1,64 @@
+# 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"
+
+!ifdef GENERATE_VERSIONED_FILES
+!include pkg-ver.mak
+DO_REAL_GEN = 1
+!endif
+
+all: $(LIBSIGC_LIB) examples all-build-info
+
+# 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
+
+examples: $(libsigc_examples)
+
+tests: $(libsigc_tests) all-build-info
+
+benchmark: all $(libsigc_benchmark) 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/README.txt b/MSVC_NMake/README.txt
new file mode 100644
index 00000000..e523bb4c
--- /dev/null
+++ b/MSVC_NMake/README.txt
@@ -0,0 +1,54 @@
+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.
+-prep-git-build: Prepare to build directly from a GIT checkout. You
+ will at least need PERL for this, and m4 if building from a
+ GIT checkout or when building after running the 'forceclean'
+ target.
+
+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 provided to copy the
+built items in their appropriate locations under $(PREFIX), which is described below.
+
+A 'forceclean' target is also provided to cover the actions under the target 'clean',
+but also to remove any traces of the headers and sources that were generated. This
+may be useful if one wants to re-generate the sources and headers from the m4 templates.
+
+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 =1:
+------------------------------------------
+BOOST_DLL: When building the benchmark, link to a DLL build of the Boost
+ libraries. Required if your installation of the Boost libraries
+ are built as DLLs. Note that debug builds must link to debug
+ builds of Boost and release builds must link to releease builds
+ of Boost.
diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak
new file mode 100644
index 00000000..3a55eb4d
--- /dev/null
+++ b/MSVC_NMake/build-rules-msvc.mak
@@ -0,0 +1,123 @@
+# 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{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.obj:
+ @for %f in ($(base_built_cc) $(base_built_h)) do @if not exist ..\sigc++\%f if not exist ..\untracked\sigc++\%f if not exist $(@D)\sigc++\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(functors_built_cc) $(functors_built_h)) do @if not exist ..\sigc++\functors\%f if not exist ..\untracked\sigc++\functors\%f if not exist $(@D)\sigc++\functors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(adaptors_built_cc) $(adaptors_built_h)) do @if not exist ..\sigc++\adaptors\%f if not exist ..\untracked\sigc++\adaptors\%f if not exist $(@D)\sigc++\adaptors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(lambda_built_cc) $(lambda_built_h)) do @if not exist ..\sigc++\adaptors\lambda\%f if not exist ..\untracked\sigc++\adaptors\lambda\%f if not exist $(@D)\sigc++\adaptors\lambda\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @if not exist .\sigc++config.h if not exist ..\untracked\MSVC_NMake\sigc++config.h $(MAKE) /f Makefile.vc CFG=$(CFG) sigc++config.h
+ @if not exist $(@D)\ md $(@D)
+ $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(@D)\ /Fd$(@D)\ /c @<<
+$<
+<<
+
+{..\sigc++\adaptors\lambda\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.obj:
+ @for %f in ($(base_built_cc) $(base_built_h)) do @if not exist ..\sigc++\%f if not exist ..\untracked\sigc++\%f if not exist $(@D)\sigc++\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(functors_built_cc) $(functors_built_h)) do @if not exist ..\sigc++\functors\%f if not exist ..\untracked\sigc++\functors\%f if not exist $(@D)\sigc++\functors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(adaptors_built_cc) $(adaptors_built_h)) do @if not exist ..\sigc++\adaptors\%f if not exist ..\untracked\sigc++\adaptors\%f if not exist $(@D)\sigc++\adaptors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(lambda_built_cc) $(lambda_built_h)) do @if not exist ..\sigc++\adaptors\lambda\%f if not exist ..\untracked\sigc++\adaptors\lambda\%f if not exist $(@D)\sigc++\adaptors\lambda\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @if not exist .\sigc++config.h if not exist ..\untracked\MSVC_NMake\sigc++config.h $(MAKE) /f Makefile.vc CFG=$(CFG) sigc++config.h
+ @if not exist $(@D)\ md $(@D)
+ $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(@D)\ /Fd$(@D)\ /c @<<
+$<
+<<
+
+{..\sigc++\functors\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.obj:
+ @for %f in ($(base_built_cc) $(base_built_h)) do @if not exist ..\sigc++\%f if not exist ..\untracked\sigc++\%f if not exist $(@D)\sigc++\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(functors_built_cc) $(functors_built_h)) do @if not exist ..\sigc++\functors\%f if not exist ..\untracked\sigc++\functors\%f if not exist $(@D)\sigc++\functors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(adaptors_built_cc) $(adaptors_built_h)) do @if not exist ..\sigc++\adaptors\%f if not exist ..\untracked\sigc++\adaptors\%f if not exist $(@D)\sigc++\adaptors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(lambda_built_cc) $(lambda_built_h)) do @if not exist ..\sigc++\adaptors\lambda\%f if not exist ..\untracked\sigc++\adaptors\lambda\%f if not exist $(@D)\sigc++\adaptors\lambda\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @if not exist .\sigc++config.h if not exist ..\untracked\MSVC_NMake\sigc++config.h $(MAKE) /f Makefile.vc CFG=$(CFG) sigc++config.h
+ @if not exist $(@D)\ md $(@D)
+ $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(@D)\ /Fd$(@D)\ /c @<<
+$<
+<<
+
+{..\untracked\sigc++\adaptors\lambda\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.obj:
+ @for %f in ($(base_built_cc) $(base_built_h)) do @if not exist ..\sigc++\%f if not exist ..\untracked\sigc++\%f if not exist $(@D)\sigc++\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(functors_built_cc) $(functors_built_h)) do @if not exist ..\sigc++\functors\%f if not exist ..\untracked\sigc++\functors\%f if not exist $(@D)\sigc++\functors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(adaptors_built_cc) $(adaptors_built_h)) do @if not exist ..\sigc++\adaptors\%f if not exist ..\untracked\sigc++\adaptors\%f if not exist $(@D)\sigc++\adaptors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(lambda_built_cc) $(lambda_built_h)) do @if not exist ..\sigc++\adaptors\lambda\%f if not exist ..\untracked\sigc++\adaptors\lambda\%f if not exist $(@D)\sigc++\adaptors\lambda\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @if not exist .\sigc++config.h if not exist ..\untracked\MSVC_NMake\sigc++config.h $(MAKE) /f Makefile.vc CFG=$(CFG) sigc++config.h
+ @if not exist $(@D)\ md $(@D)
+ $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(@D)\ /Fd$(@D)\ /c @<<
+$<
+<<
+
+{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\adaptors\lambda\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.obj:
+ @for %f in ($(base_built_cc) $(base_built_h)) do @if not exist ..\sigc++\%f if not exist ..\untracked\sigc++\%f if not exist $(@D)\sigc++\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(functors_built_cc) $(functors_built_h)) do @if not exist ..\sigc++\functors\%f if not exist ..\untracked\sigc++\functors\%f if not exist $(@D)\sigc++\functors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(adaptors_built_cc) $(adaptors_built_h)) do @if not exist ..\sigc++\adaptors\%f if not exist ..\untracked\sigc++\adaptors\%f if not exist $(@D)\sigc++\adaptors\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @for %f in ($(lambda_built_cc) $(lambda_built_h)) do @if not exist ..\sigc++\adaptors\lambda\%f if not exist ..\untracked\sigc++\adaptors\lambda\%f if not exist $(@D)\sigc++\adaptors\lambda\%f $(MAKE) /f Makefile.vc CFG=$(CFG) generate-sources
+ @if not exist .\sigc++config.h if not exist ..\untracked\MSVC_NMake\sigc++config.h $(MAKE) /f Makefile.vc CFG=$(CFG) sigc++config.h
+ $(CXX) $(LIBSIGCPP_CFLAGS) /Fo$(@D)\ /Fd$(@D)\ /c @<<
+$<
+<<
+
+# Rules for building .lib files
+$(LIBSIGC_LIB): $(LIBSIGC_DLL)
+
+{.}.rc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.res:
+ rc /fo$@ $<
+
+{..\untracked\MSVC_NMake\}.rc{vs$(VSVER)\$(CFG)\$(PLAT)\sigc\}.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): $(sigc_dll_OBJS)
+ link /DLL $(LDFLAGS) /implib:$(LIBSIGC_LIB) -out:$@ @<<
+$(sigc_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
+
+clean:
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.exe
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.dll
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.pdb
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.ilk
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.exp
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.lib
+ @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests\*.obj
+ @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests\*.pdb
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-ex\*.obj
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc-ex\*.pdb
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\*.res
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\*.obj
+ @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\*.pdb
+ @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc-tests
+ @-rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc-ex
+ @-for %d in ($(sigc_m4_srcdirs)) do @for %x in (cc h) do @if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d\ del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d\*.%x
+ @-for %x in (cc h) do @if exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\ del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\*.%x
+ @-for %d in ($(sigc_m4_srcdirs)) do @rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d
+ @-rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++
+ @-rd vs$(VSVER)\$(CFG)\$(PLAT)\sigc
+
+forceclean: clean
+ @-for %d in (. adaptors\lambda adaptors functors) do @for %t in (.. ..\untracked) do @for %x in (cc h) do @for %f in (..\sigc++\%d\macros\*.%x.m4) do @del %t\sigc++\%d\%~nf
diff --git a/MSVC_NMake/config-msvc.mak b/MSVC_NMake/config-msvc.mak
new file mode 100644
index 00000000..9b5011ec
--- /dev/null
+++ b/MSVC_NMake/config-msvc.mak
@@ -0,0 +1,56 @@
+# NMake Makefile portion for enabling features for Windows builds
+
+# These are the base minimum libraries required for building libsigc++.
+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"
+DEBUG_SUFFIX = -d
+!else
+DEBUG_SUFFIX =
+!endif
+
+!ifndef M4
+M4 = m4
+!endif
+
+LIBSIGCPP_DEFINES = /DSIGC_BUILD /D_WINDLL
+
+SIGCPP_BASE_CFLAGS = \
+ /Ivs$(VSVER)\$(CFG)\$(PLAT)\sigc \
+ /I..\untracked /I.. /I..\untracked\MSVC_NMake /I. \
+ /EHsc $(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
+
+!ifdef USE_MESON_LIBS
+LIBSIGC_LIBNAME = sigc-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)
+LIBSIGC_DLLNAME = $(LIBSIGC_LIBNAME)-0
+!else
+LIBSIGC_LIBNAME = sigc-vc$(PDBVER)0$(DEBUG_SUFFIX)-$(LIBSIGC_MAJOR_VERSION)_$(LIBSIGC_MINOR_VERSION)
+LIBSIGC_DLLNAME = $(LIBSIGC_LIBNAME)
+!endif
+
+LIBSIGC_DLL = vs$(VSVER)\$(CFG)\$(PLAT)\$(LIBSIGC_DLLNAME).dll
+LIBSIGC_LIB = vs$(VSVER)\$(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).lib
+
+# Note that building the benchmark requires Boost!
+libsigc_bench = vs$(VSVER)\$(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..5fd39a60
--- /dev/null
+++ b/MSVC_NMake/create-lists-msvc.mak
@@ -0,0 +1,80 @@
+# 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 sigc.mak sigc_dll_OBJS]
+!endif
+
+!if [for %c in ($(sigc_sources_cc)) do @if "%~xc" == ".cc" @call create-lists.bat file sigc.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc\%~nc.obj]
+!endif
+
+!if [@call create-lists.bat file sigc.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc\sigc.res]
+!endif
+
+!if [call create-lists.bat footer sigc.mak]
+!endif
+
+!if [call create-lists.bat header sigc.mak sigc_m4_srcdirs]
+!endif
+
+!if [for %d in (adaptors\lambda adaptors functors) do @call create-lists.bat file sigc.mak %d]
+!endif
+
+!if [call create-lists.bat footer sigc.mak]
+!endif
+
+!if [for %d in (examples tests) do @call create-lists.bat header sigc.mak libsigc_%d & @(for %s in (..\%d\*.cc) do @if not "%~ns" == "testutilities" if not "%~ns" == "benchmark" call create-lists.bat file sigc.mak vs$(VSVER)\$(CFG)\$(PLAT)\%~ns.exe) & @call create-lists.bat footer sigc.mak]
+!endif
+
+!if [call create-lists.bat header sigc.mak libsigc_benchmark & @for %s in (..\tests\benchmark.cc) do @(call create-lists.bat file sigc.mak vs$(VSVER)\$(CFG)\$(PLAT)\%~ns.exe) & @call create-lists.bat footer sigc.mak]
+!endif
+
+!if [for %d in (examples tests) do @for %s in (..\%d\*.cc) do @if not "%~ns" == "benchmark" echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-%d\%~ns.obj: %s>>sigc.mak & @echo. @if not exist ^$(@D)\ md ^$(@D)>>sigc.mak & @echo. ^$(CXX) ^$(SIGCPP_CFLAGS) /Fo^$(@D)\ /Fd^$(@D)\ ^$** /c>>sigc.mak & @echo.>>sigc.mak]
+!endif
+
+!if [for %s in (..\tests\benchmark.cc) do @echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-tests\%~ns.obj: %s>>sigc.mak & @echo. @if not exist ^$(@D)\ md ^$(@D)>>sigc.mak & @echo. ^$(CXX) ^$(SIGCPP_BENCHMARK_CFLAGS) /Fo^$(@D)\ /Fd^$(@D)\ ^$** /c>>sigc.mak & @echo.>>sigc.mak]
+!endif
+
+!if [for %s in (..\examples\*.cc) do @echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\%~ns.exe: ^$(LIBSIGC_LIB) vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-examples\%~ns.obj>>sigc.mak & @echo. link ^$(LDFLAGS) ^$** /out:^$@>>sigc.mak & @echo.>>sigc.mak]
+!endif
+
+!if [for %s in (..\tests\*.cc) do @if not "%~ns" == "testutilities" echo vs^$(VSVER)\^$(CFG)\^$(PLAT)\%~ns.exe: ^$(LIBSIGC_LIB) vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-tests\%~ns.obj vs^$(VSVER)\^$(CFG)\^$(PLAT)\sigc-tests\testutilities.obj>>sigc.mak & @echo. link ^$(LDFLAGS) ^$** /out:^$@>>sigc.mak & @echo.>>sigc.mak]
+!endif
+
+!include sigc.mak
+
+!if [del /f /q sigc.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..d40b1b18
--- /dev/null
+++ b/MSVC_NMake/detectenv-msvc.mak
@@ -0,0 +1,154 @@
+# 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)elif defined(_M_ARM64) >> vercl.x] \
+ && ![echo PLAT=arm64 >> 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) < 1920
+VSVER = 15
+!elseif $(VCVERSION) > 1919 && $(VCVERSION) < 1930
+VSVER = 16
+!elseif $(VCVERSION) > 1929 && $(VCVERSION) < 2000
+VSVER = 17
+!else
+VSVER = 0
+!endif
+
+!if "$(VSVER)" == "0"
+MSG = ^
+This NMake Makefile set supports Visual Studio^
+9 (2008) through 16 (2019). 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
+!elseif "$(PLAT)" == "arm64"
+LDFLAGS_ARCH = /machine:arm64
+!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
new file mode 100644
index 00000000..bc6ff4ba
--- /dev/null
+++ b/MSVC_NMake/filelist.am
@@ -0,0 +1,15 @@
+## This file is part of libsigc++.
+
+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 \
+ README.txt \
+ 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..55778181
--- /dev/null
+++ b/MSVC_NMake/generate-msvc.mak
@@ -0,0 +1,53 @@
+# 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 versioned files
+
+prep-git-build: pkg-ver.mak generate-sources
+
+sigc.rc: ..\configure.ac sigc.rc.in
+ @if not "$(DO_REAL_GEN)" == "1" if exist pkg-ver.mak del pkg-ver.mak
+ @if not exist pkg-ver.mak $(MAKE) /f Makefile.vc CFG=$(CFG) pkg-ver.mak
+ @if "$(DO_REAL_GEN)" == "1" echo Generating $@...
+ @if "$(DO_REAL_GEN)" == "1" copy $@.in $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@SIGCXX_MAJOR_VERSION\@/$(PKG_MAJOR_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@SIGCXX_MINOR_VERSION\@/$(PKG_MINOR_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@SIGCXX_MICRO_VERSION\@/$(PKG_MICRO_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@PACKAGE_VERSION\@/$(PKG_MAJOR_VERSION).$(PKG_MINOR_VERSION).$(PKG_MICRO_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@SIGCXX_API_VERSION\@/$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" del $@.bak
+
+# You may change SIGCXX_DISABLE_DEPRECATED if you know what you are doing
+sigc++config.h: ..\configure.ac ..\sigc++config.h.in
+ @if not "$(DO_REAL_GEN)" == "1" if exist pkg-ver.mak del pkg-ver.mak
+ @if not exist pkg-ver.mak $(MAKE) /f Makefile.vc CFG=$(CFG) pkg-ver.mak
+ @if "$(DO_REAL_GEN)" == "1" echo Generating $@...
+ @if "$(DO_REAL_GEN)" == "1" copy "..\$(@F).in" "$@"
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef SIGCXX_DISABLE_DEPRECATED/\/\* \#undef SIGCXX_DISABLE_DEPRECATED \*\//g" $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef SIGCXX_MAJOR_VERSION/\#define SIGCXX_MAJOR_VERSION $(PKG_MAJOR_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef SIGCXX_MINOR_VERSION/\#define SIGCXX_MINOR_VERSION $(PKG_MINOR_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef SIGCXX_MICRO_VERSION/\#define SIGCXX_MICRO_VERSION $(PKG_MICRO_VERSION)/g" $@
+ @if "$(DO_REAL_GEN)" == "1" del $@.bak
+
+pkg-ver.mak: ..\configure.ac
+ @echo Generating version info Makefile Snippet...
+ @$(PERL) -00 -ne "print if /AC_INIT\(/" $** | \
+ $(PERL) -pe "tr/, /\n/s" | \
+ $(PERL) -ne "print if 2 .. 2" | \
+ $(PERL) -ne "print /\[(.*)\]/" > ver.txt
+ @echo @echo off>pkg-ver.bat
+ @echo.>>pkg-ver.bat
+ @echo set /p sigc_ver=^>pkg-ver.bat
+ @echo for /f "tokens=1,2,3 delims=." %%%%a IN ("%%sigc_ver%%") do (echo PKG_MAJOR_VERSION=%%%%a^& echo PKG_MINOR_VERSION=%%%%b^& echo PKG_MICRO_VERSION=%%%%c)^>$@>>pkg-ver.bat
+ @pkg-ver.bat
+ @del ver.txt pkg-ver.bat
+ $(MAKE) /f Makefile.vc CFG=$(CFG) GENERATE_VERSIONED_FILES=1 sigc.rc sigc++config.h
+
+generate-sources:
+ @for %f in ($(base_built_cc) $(base_built_h)) do @if not exist ..\sigc++\%f if not exist ..\untracked\sigc++\%f if not exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\ md vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++
+ @for %d in ($(sigc_m4_srcdirs)) do @for %x in (cc h) do @for %f in (..\sigc++\%d\macros\*.%x.m4) do @if not exist ..\sigc++\%d\%~nf if not exist ..\untracked\sigc++\%d\%~nf if not exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d\ md vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d
+ @for %f in ($(base_built_cc) $(base_built_h)) do @if not exist ..\sigc++\%f if not exist ..\untracked\sigc++\%f if not exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%f @echo Generating vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%f... & $(M4) -I ../sigc++/macros ../sigc++/macros/%f.m4 >vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%f
+ @for %d in ($(sigc_m4_srcdirs:adaptors\lambda=)) do @for %x in (cc h) do @for %f in (..\sigc++\%d\macros\*.%x.m4) do @if not exist ..\sigc++\%d\%~nf if not exist ..\untracked\sigc++\%d\%~nf if not exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d\%~nf @echo Generating vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d\%~nf... & $(M4) -I ../sigc++/%d/macros -I ../sigc++/macros ../sigc++/%d/macros/%~nxf >vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\%d\%~nf
+ @for %x in (cc h) do @for %f in (..\sigc++\adaptors\lambda\macros\*.%x.m4) do @if not exist ..\sigc++\adaptors\lambda\%~nf if not exist ..\untracked\sigc++\adaptors\lambda\%~nf if not exist vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\adaptors\lambda\%~nf @echo Generating vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\adaptors\lambda\%~nf... & $(M4) -I ../sigc++/adaptors/lambda/macros -I ../sigc++/macros ../sigc++/adaptors/lambda/macros/%~nxf >vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++\adaptors\lambda\%~nf
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..53732b22
--- /dev/null
+++ b/MSVC_NMake/install.mak
@@ -0,0 +1,20 @@
+# NMake Makefile snippet for copying the built libraries, utilities and headers to
+# a path under $(PREFIX).
+
+install: all
+ @if not exist $(PREFIX)\bin\ md $(PREFIX)\bin
+ @if not exist $(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\ md $(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\ @md $(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\ @md $(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\ @md $(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\tuple-utils
+ @copy /b vs$(VSVER)\$(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).dll "$(PREFIX)\bin"
+ @copy /b vs$(VSVER)\$(CFG)\$(PLAT)\$(LIBSIGC_LIBNAME).pdb "$(PREFIX)\bin"
+ @copy /b vs$(VSVER)\$(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 %d in (..\sigc++ ..\untracked\sigc++ vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++) do @(for %h in ($(base_built_h)) do @if exist %d\%h copy "%d\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\%h")
+ @for %d in (..\sigc++ ..\untracked\sigc++ vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++) do @(for %h in ($(functors_built_h)) do @if exist %d\functors\%h copy "%d\functors\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\functors\%h")
+ @for %d in (..\sigc++ ..\untracked\sigc++ vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++) do @(for %h in ($(adaptors_built_h)) do @if exist %d\adaptors\%h copy "%d\adaptors\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\adaptors\%h")
+ @for %d in (..\sigc++ ..\untracked\sigc++ vs$(VSVER)\$(CFG)\$(PLAT)\sigc\sigc++) do @(for %h in ($(lambda_built_h)) do @if exist %d\adaptors\lambda\%h copy "%d\adaptors\lambda\%h" "$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\sigc++\adaptors\lambda\%h")
+ @if exist sigc++config.h copy "sigc++config.h" "$(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\"
+ @if exist ..\untracked\MSVC_NMake\sigc++config.h copy "..\untracked\MSVC_NMake\sigc++config.h" "$(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include\"
diff --git a/MSVC_NMake/meson.build b/MSVC_NMake/meson.build
new file mode 100644
index 00000000..09078b37
--- /dev/null
+++ b/MSVC_NMake/meson.build
@@ -0,0 +1,32 @@
+# MSVC_NMake
+
+# Input: pkg_conf_data, sigcxxconfig_h, project_build_root, python3,
+# can_add_dist_script
+# Output: sigc_rc
+
+sigc_rc = configure_file(
+ input: 'sigc.rc.in',
+ output: '@BASENAME@',
+ configuration: pkg_conf_data,
+)
+
+# Copy the generated configuration header into the MSVC project directory.
+configure_file(
+ input: sigcxxconfig_h,
+ output: 'sigc++config.h',
+ copy: true,
+)
+
+untracked_msvc_nmake = 'untracked' / 'MSVC_NMake'
+handle_built_files = project_source_root / 'tools' / 'handle-built-files.py'
+
+if can_add_dist_script
+ # Distribute built files.
+ meson.add_dist_script(
+ python3, handle_built_files, 'dist_gen_msvc_files',
+ meson.current_build_dir(),
+ untracked_msvc_nmake,
+ project_build_root / 'sigc++config.h',
+ meson.current_build_dir() / 'sigc.rc',
+ )
+endif
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/filelist.am b/MSVC_Net2013/filelist.am
deleted file mode 100644
index 3ebcc77d..00000000
--- a/MSVC_Net2013/filelist.am
+++ /dev/null
@@ -1,70 +0,0 @@
-## 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
diff --git a/MSVC_Net2013/libsigc++2.sln b/MSVC_Net2013/libsigc++2.sln
deleted file mode 100644
index 21b38fd2..00000000
--- a/MSVC_Net2013/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_Net2013/libsigc++2.vcxproj b/MSVC_Net2013/libsigc++2.vcxproj
deleted file mode 100644
index a3d03e18..00000000
--- a/MSVC_Net2013/libsigc++2.vcxproj
+++ /dev/null
@@ -1,179 +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_Net2013/libsigc++2.vcxproj.filters b/MSVC_Net2013/libsigc++2.vcxproj.filters
deleted file mode 100644
index 7ce0335e..00000000
--- a/MSVC_Net2013/libsigc++2.vcxproj.filters
+++ /dev/null
@@ -1,67 +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
- 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
-
-
- Resource Files
-
-
diff --git a/MSVC_Net2013/sigc-build-defines.props b/MSVC_Net2013/sigc-build-defines.props
deleted file mode 100644
index 3f8a80cc..00000000
--- a/MSVC_Net2013/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_Net2013/sigc-debug-dll-build-defines.props b/MSVC_Net2013/sigc-debug-dll-build-defines.props
deleted file mode 100644
index a113184b..00000000
--- a/MSVC_Net2013/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_Net2013/sigc-install.props b/MSVC_Net2013/sigc-install.props
deleted file mode 100644
index c3aa67c9..00000000
--- a/MSVC_Net2013/sigc-install.props
+++ /dev/null
@@ -1,78 +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"
-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++\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_Net2013/sigc-install.vcxproj b/MSVC_Net2013/sigc-install.vcxproj
deleted file mode 100644
index 1238f930..00000000
--- a/MSVC_Net2013/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_Net2013/sigc-release-dll-build-defines.props b/MSVC_Net2013/sigc-release-dll-build-defines.props
deleted file mode 100644
index 66879688..00000000
--- a/MSVC_Net2013/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_Net2013/sigc-version-paths.props b/MSVC_Net2013/sigc-version-paths.props
deleted file mode 100644
index ef72893f..00000000
--- a/MSVC_Net2013/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_Net2013/test_accum_iter.vcxproj b/MSVC_Net2013/test_accum_iter.vcxproj
deleted file mode 100644
index a700caa1..00000000
--- a/MSVC_Net2013/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_Net2013/test_accum_iter.vcxproj.filters b/MSVC_Net2013/test_accum_iter.vcxproj.filters
deleted file mode 100644
index f2e52281..00000000
--- a/MSVC_Net2013/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_Net2013/test_accumulated.vcxproj b/MSVC_Net2013/test_accumulated.vcxproj
deleted file mode 100644
index 814863e6..00000000
--- a/MSVC_Net2013/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_Net2013/test_accumulated.vcxproj.filters b/MSVC_Net2013/test_accumulated.vcxproj.filters
deleted file mode 100644
index ac70a9e1..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind.vcxproj b/MSVC_Net2013/test_bind.vcxproj
deleted file mode 100644
index 8d3910dc..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind.vcxproj.filters b/MSVC_Net2013/test_bind.vcxproj.filters
deleted file mode 100644
index 62686f5d..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind_ref.vcxproj b/MSVC_Net2013/test_bind_ref.vcxproj
deleted file mode 100644
index 7a47daca..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind_ref.vcxproj.filters b/MSVC_Net2013/test_bind_ref.vcxproj.filters
deleted file mode 100644
index 5302de5a..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind_refptr.vcxproj b/MSVC_Net2013/test_bind_refptr.vcxproj
deleted file mode 100644
index f7f785f0..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind_refptr.vcxproj.filters b/MSVC_Net2013/test_bind_refptr.vcxproj.filters
deleted file mode 100644
index 1f1aba4f..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind_return.vcxproj b/MSVC_Net2013/test_bind_return.vcxproj
deleted file mode 100644
index c0cbb947..00000000
--- a/MSVC_Net2013/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_Net2013/test_bind_return.vcxproj.filters b/MSVC_Net2013/test_bind_return.vcxproj.filters
deleted file mode 100644
index b98b9558..00000000
--- a/MSVC_Net2013/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_Net2013/test_compose.vcxproj b/MSVC_Net2013/test_compose.vcxproj
deleted file mode 100644
index 24ecb347..00000000
--- a/MSVC_Net2013/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_Net2013/test_compose.vcxproj.filters b/MSVC_Net2013/test_compose.vcxproj.filters
deleted file mode 100644
index d0bcf8c6..00000000
--- a/MSVC_Net2013/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_Net2013/test_copy_invalid_slot.vcxproj b/MSVC_Net2013/test_copy_invalid_slot.vcxproj
deleted file mode 100644
index f83d10bf..00000000
--- a/MSVC_Net2013/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_Net2013/test_copy_invalid_slot.vcxproj.filters b/MSVC_Net2013/test_copy_invalid_slot.vcxproj.filters
deleted file mode 100644
index 827e9b5b..00000000
--- a/MSVC_Net2013/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_Net2013/test_cpp11_lambda.vcxproj b/MSVC_Net2013/test_cpp11_lambda.vcxproj
deleted file mode 100644
index 1bbf8513..00000000
--- a/MSVC_Net2013/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_Net2013/test_cpp11_lambda.vcxproj.filters b/MSVC_Net2013/test_cpp11_lambda.vcxproj.filters
deleted file mode 100644
index 489cf964..00000000
--- a/MSVC_Net2013/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_Net2013/test_custom.vcxproj b/MSVC_Net2013/test_custom.vcxproj
deleted file mode 100644
index 9c5feda5..00000000
--- a/MSVC_Net2013/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_Net2013/test_custom.vcxproj.filters b/MSVC_Net2013/test_custom.vcxproj.filters
deleted file mode 100644
index fbefe5fb..00000000
--- a/MSVC_Net2013/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_Net2013/test_deduce_result_type.vcxproj b/MSVC_Net2013/test_deduce_result_type.vcxproj
deleted file mode 100644
index 008537a0..00000000
--- a/MSVC_Net2013/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_Net2013/test_deduce_result_type.vcxproj.filters b/MSVC_Net2013/test_deduce_result_type.vcxproj.filters
deleted file mode 100644
index 8b4879a3..00000000
--- a/MSVC_Net2013/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_Net2013/test_disconnect.vcxproj b/MSVC_Net2013/test_disconnect.vcxproj
deleted file mode 100644
index 639b1360..00000000
--- a/MSVC_Net2013/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_Net2013/test_disconnect.vcxproj.filters b/MSVC_Net2013/test_disconnect.vcxproj.filters
deleted file mode 100644
index 898c30c4..00000000
--- a/MSVC_Net2013/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_Net2013/test_disconnect_during_emit.vcxproj b/MSVC_Net2013/test_disconnect_during_emit.vcxproj
deleted file mode 100644
index ce838709..00000000
--- a/MSVC_Net2013/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_Net2013/test_disconnect_during_emit.vcxproj.filters b/MSVC_Net2013/test_disconnect_during_emit.vcxproj.filters
deleted file mode 100644
index 0ca73712..00000000
--- a/MSVC_Net2013/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_Net2013/test_exception_catch.vcxproj b/MSVC_Net2013/test_exception_catch.vcxproj
deleted file mode 100644
index 81fa0c0e..00000000
--- a/MSVC_Net2013/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_Net2013/test_exception_catch.vcxproj.filters b/MSVC_Net2013/test_exception_catch.vcxproj.filters
deleted file mode 100644
index a0092023..00000000
--- a/MSVC_Net2013/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_Net2013/test_functor_trait.vcxproj b/MSVC_Net2013/test_functor_trait.vcxproj
deleted file mode 100644
index 4a7b238f..00000000
--- a/MSVC_Net2013/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_Net2013/test_functor_trait.vcxproj.filters b/MSVC_Net2013/test_functor_trait.vcxproj.filters
deleted file mode 100644
index 2bc14f2f..00000000
--- a/MSVC_Net2013/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_Net2013/test_hide.vcxproj b/MSVC_Net2013/test_hide.vcxproj
deleted file mode 100644
index b891ea46..00000000
--- a/MSVC_Net2013/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_Net2013/test_hide.vcxproj.filters b/MSVC_Net2013/test_hide.vcxproj.filters
deleted file mode 100644
index 7ec4e336..00000000
--- a/MSVC_Net2013/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_Net2013/test_limit_reference.vcxproj b/MSVC_Net2013/test_limit_reference.vcxproj
deleted file mode 100644
index dd8d553d..00000000
--- a/MSVC_Net2013/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_Net2013/test_limit_reference.vcxproj.filters b/MSVC_Net2013/test_limit_reference.vcxproj.filters
deleted file mode 100644
index 8dbd2613..00000000
--- a/MSVC_Net2013/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_Net2013/test_mem_fun.vcxproj b/MSVC_Net2013/test_mem_fun.vcxproj
deleted file mode 100644
index 23716199..00000000
--- a/MSVC_Net2013/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_Net2013/test_mem_fun.vcxproj.filters b/MSVC_Net2013/test_mem_fun.vcxproj.filters
deleted file mode 100644
index 8a2f60f2..00000000
--- a/MSVC_Net2013/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_Net2013/test_ptr_fun.vcxproj b/MSVC_Net2013/test_ptr_fun.vcxproj
deleted file mode 100644
index 38695404..00000000
--- a/MSVC_Net2013/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_Net2013/test_ptr_fun.vcxproj.filters b/MSVC_Net2013/test_ptr_fun.vcxproj.filters
deleted file mode 100644
index 0e4643ba..00000000
--- a/MSVC_Net2013/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_Net2013/test_retype.vcxproj b/MSVC_Net2013/test_retype.vcxproj
deleted file mode 100644
index a36b8fc3..00000000
--- a/MSVC_Net2013/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_Net2013/test_retype.vcxproj.filters b/MSVC_Net2013/test_retype.vcxproj.filters
deleted file mode 100644
index 48381d1e..00000000
--- a/MSVC_Net2013/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_Net2013/test_retype_return.vcxproj b/MSVC_Net2013/test_retype_return.vcxproj
deleted file mode 100644
index a42ca5dd..00000000
--- a/MSVC_Net2013/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_Net2013/test_retype_return.vcxproj.filters b/MSVC_Net2013/test_retype_return.vcxproj.filters
deleted file mode 100644
index 02c440b9..00000000
--- a/MSVC_Net2013/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_Net2013/test_signal.vcxproj b/MSVC_Net2013/test_signal.vcxproj
deleted file mode 100644
index 4cdca701..00000000
--- a/MSVC_Net2013/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_Net2013/test_signal.vcxproj.filters b/MSVC_Net2013/test_signal.vcxproj.filters
deleted file mode 100644
index 02cf369f..00000000
--- a/MSVC_Net2013/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_Net2013/test_size.vcxproj b/MSVC_Net2013/test_size.vcxproj
deleted file mode 100644
index fb3cad2e..00000000
--- a/MSVC_Net2013/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_Net2013/test_size.vcxproj.filters b/MSVC_Net2013/test_size.vcxproj.filters
deleted file mode 100644
index aba69af7..00000000
--- a/MSVC_Net2013/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_Net2013/test_slot.vcxproj b/MSVC_Net2013/test_slot.vcxproj
deleted file mode 100644
index 762f52d4..00000000
--- a/MSVC_Net2013/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_Net2013/test_slot.vcxproj.filters b/MSVC_Net2013/test_slot.vcxproj.filters
deleted file mode 100644
index a28922be..00000000
--- a/MSVC_Net2013/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_Net2013/test_slot_disconnect.vcxproj b/MSVC_Net2013/test_slot_disconnect.vcxproj
deleted file mode 100644
index 290ce23f..00000000
--- a/MSVC_Net2013/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_Net2013/test_slot_disconnect.vcxproj.filters b/MSVC_Net2013/test_slot_disconnect.vcxproj.filters
deleted file mode 100644
index 2c28719e..00000000
--- a/MSVC_Net2013/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_Net2013/test_track_obj.vcxproj b/MSVC_Net2013/test_track_obj.vcxproj
deleted file mode 100644
index 078466dd..00000000
--- a/MSVC_Net2013/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_Net2013/test_track_obj.vcxproj.filters b/MSVC_Net2013/test_track_obj.vcxproj.filters
deleted file mode 100644
index fc429cc9..00000000
--- a/MSVC_Net2013/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_Net2013/test_trackable.vcxproj b/MSVC_Net2013/test_trackable.vcxproj
deleted file mode 100644
index 2ef65add..00000000
--- a/MSVC_Net2013/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_Net2013/test_trackable.vcxproj.filters b/MSVC_Net2013/test_trackable.vcxproj.filters
deleted file mode 100644
index 6bc2407a..00000000
--- a/MSVC_Net2013/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_Net2013/test_visit_each.vcxproj b/MSVC_Net2013/test_visit_each.vcxproj
deleted file mode 100644
index 13ff62a8..00000000
--- a/MSVC_Net2013/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_Net2013/test_visit_each.vcxproj.filters b/MSVC_Net2013/test_visit_each.vcxproj.filters
deleted file mode 100644
index 33e7acd6..00000000
--- a/MSVC_Net2013/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
-
-
diff --git a/Makefile.am b/Makefile.am
index 1ae3b2ef..0d9e4e1b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -33,11 +33,32 @@ 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_nmake_data))
-DISTCLEANFILES = MSVC_Net2013/sigc++config.h
+DISTCLEANFILES = MSVC_NMake/sigc++config.h
+
+# Distribute files needed when building libsigc++ with meson.
+EXTRA_DIST = \
+ meson.build \
+ meson_options.txt \
+ sigc++config.h.meson \
+ MSVC_NMake/meson.build \
+ docs/manual/can_use_xmllint.xml \
+ docs/manual/meson.build \
+ docs/reference/meson.build \
+ examples/meson.build \
+ sigc++/meson.build \
+ subprojects/mm-common.wrap \
+ tests/meson.build \
+ tools/handle-built-files.py \
+ tools/tutorial-custom-cmd.py \
+ tools/gcc_template_specialization_operator_overload.cc \
+ tools/have_sun_reverse_iterator.cc \
+ tools/msvc_template_specialization_operator_overload.cc \
+ tools/pragma_push_pop_macro.cc \
+ untracked/README
# Optional: auto-generate the ChangeLog file from the git log on make dist
include $(top_srcdir)/build/dist-changelog.am
diff --git a/NEWS b/NEWS
old mode 100644
new mode 100755
index 13518a8c..f72e4996
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,186 @@
+2.10.8 (stable)
+
+Build:
+* Meson build: Perl is not required by new versions of mm-common
+ (Kjell Ahlstedt)
+* NMake Makefiles: Support building with VS2022
+ (Chun-wei Fan)
+
+Documentation:
+* Upgrade the manual from DocBook 4.1 to DocBook 5.0
+ (Kjell Ahlstedt)
+
+
+2.10.7 (stable)
+
+Meson build:
+* Make it possible to use sigc++ as a subproject
+ (Kjell Ahlstedt)
+* Fix dependency on files generated from .h.m4 files
+ (Kjell Ahlstedt)
+* No implicit_include_directories
+ (Kjell Ahlstedt)
+* Make quiet installations possible
+ (Kjell Ahlstedt)
+* Fix build as subproject without building documentation
+ (Kjell Ahlstedt) Issue #71 (Xavier Claessens)
+
+Documentation:
+* Links to *.gnome.org refer to sigc++-2.0 and gtkmm-3.0 versions
+ instead of latest versions
+ (Kjell Ahlstedt)
+
+
+2.10.6 (stable)
+
+Build:
+* Meson build: Fix versioning on macOS
+ (Tom Schoonjans) Pull request #65
+
+Documentation:
+* sigc++/sigc++.h: Describe how to use libsigc++ with Meson
+ (Kjell Ahlstedt)
+* Update links to the web page, now at
+ libsigcplusplus.github.io/libsigcplusplus
+ (Kjell Ahlstedt)
+
+
+2.10.4 (stable)
+
+Build:
+* Meson build: Set default value of the 'warnings' option to 'min'
+ (Kjell Ahlstedt)
+* NMake Makefiles: Several improvements
+ (Chun-Wei Fan) Pull request #58
+* docs/reference/: Update for Doxygen >= 1.8.16
+ (Kjell Ahlstedt)
+
+Documentation:
+* docs/manual/libsigc_manual.xml: Update signal and slot syntax
+ (Kjell Ahlstedt) Issue #59 (Denis Washington)
+
+The tarball for 2.10.4 has been created with 'meson dist'.
+If you build with Autotools from the tarball, please read the relevant
+part of README.
+
+
+2.10.3 (stable)
+
+Build:
+* Add Meson build, alongside the existing Autotools build.
+ (Kjell Ahlstedt, Chun-Wei Fan) Pull request #47, #50
+* Improve MSVC builds on Windows
+ (Chun-Wei Fan) Pull request #50
+* meson.build: Check if .git is a directory or file
+ (Kjell Ahlstedt) Merge request pangomm!8 (Ting-Wei Lan)
+* docs/reference/meson.build: Check if perl is found
+ (Kjell Ahlstedt) Issue #53 (Rasmus Thomsen)
+* README: Describe building with Meson and Autotools
+ (Kjell Ahlstedt)
+
+Tests:
+* Make test_track_obj.cc compile with clang++
+ (Kjell Ahlstedt)
+
+
+2.10.2: (stable)
+
+This release is identical to 2.10.1, except for:
+* Reference docs generated by Doxygen 1.8.11.
+ Hopefully it will show up at
+ https://developer.gnome.org/libsigc++/stable/
+
+
+2.10.1: (stable)
+
+* signal_impl::clear(): Don't clear the slot list during signal emission,
+ to prevent a segfault. And add a test for this.
+ (Kjell Ahlstedt) Bug #784550 (Andrejs Hanins)
+* slot_base::set_parent(): Create a dummy slot_rep if necessary
+ (Kjell Ahlstedt) Bug #167714 (Gerald Britton)
+* Avoid compiler warnings from function pointer conversions
+ (Kjell Ahlstedt) Issue #1 (sharkcz)
+ (Kjell Ahlstedt) Issue #8 (db0451)
+
+Build:
+* Make --disable-benchmark work.
+ (Christophe Lermytte) Bug #774732
+* Replace the Visual Studio project files with MSVC NMake project files
+ Add MSVC_NMake/README.txt for Visual Studio builds
+ (Chun-wei Fan) Pull request #11
+
+Documentation:
+* signal_base: Warn against deletion during emission
+ (Kjell Ahlstedt) Bug #167714 (Gerald Britton)
+* Update links in README, configure.ac, libsigcplusplus.doap
+ (Kjell Ahlstedt)
+
+2.10.0 (stable):
+
+* Build: Fix silent builds.
+ (Kjell Ahlstedt) Bug #768797
+
+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.
+ (Murray Cumming)
+* Some more minor uses of C++11 syntax.
+ (Murray Cumming)
+
+
+2.9.1 (unstable):
+
+* 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.
+
+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/README b/README
index d5c52b28..a6e36d21 100644
--- a/README
+++ b/README
@@ -1,6 +1,5 @@
libsigc++ -- The Typesafe Callback Framework for C++
-
General information:
libsigc++ implements a typesafe callback system for standard C++. It
@@ -12,50 +11,110 @@ 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:
Distribution of library and components is under the LGPL as listed in the
file COPYING. Examples and tests are Public Domain.
-
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/
-
-
-Overview of the distribution:
-
- docs/ documentation on the signal system
- docs/reference/ reference documentation
-
- examples/ examples of various signal functions
-
- sigc++/ source for library
- sigc++/macros/ .m4 files used to auto-generate source files
- sigc++/functors/ source for library (various functors)
- sigc++/functors/macros/ .m4 files used to auto-generate source files
- sigc++/adaptors/ source for library (various adaptors)
- sigc++/adaptors/macros/ .m4 files used to auto-generate source files
-
- build/ auxiliary files for building
-
- tests/ programs testing and verifying proper behaviour
-
- MSVC_Net2013/ project files for building the library with MSVC++ 2013
-
+ Git: https://github.com/libsigcplusplus/libsigcplusplus
+ Bug reports: https://github.com/libsigcplusplus/libsigcplusplus/issues
Compatibility:
Compatible compilers must support C++11, such as the decltype() specifier.
All releases are tested with the gcc (g++) compiler.
- Release 2.3.2 has been tested with gcc 4.8.2, clang 3.4 and MS Visual C++ 2010.
- Release 2.5.1 has been tested with gcc 4.9.2, clang 3.6.0 and MS Visual C++ 2013.
+
+# Building
+
+Whenever possible, you should use the official binary packages approved by the
+supplier of your operating system, such as your Linux distribution.
+
+## Building on Windows
+
+See MSVC_NMake/README.txt.
+
+## Building from a release tarball
+
+It's easiest to build with Meson, if the tarball was made with Meson,
+and to build with Autotools, if the tarball was made with Autotools.
+Then you don't have to use maintainer-mode.
+
+How do you know how the tarball was made? If it was made with Meson,
+it contains files in untracked/build_scripts/, untracked/docs/ and possibly
+other subdirectories of untracked/.
+
+### Building from a tarball with Meson
+
+Don't call the builddir 'build'. There is a directory called 'build' with
+files used by Autotools.
+
+If the tarball was made with Autotools, you must enable maintainer-mode:
+ $ meson --prefix=/some_directory --libdir=lib -Dmaintainer-mode=true your_builddir .
+If the tarball was made with Meson:
+ $ meson --prefix=/some_directory --libdir=lib your_builddir .
+
+Then
+ $ cd your_builddir
+ $ ninja
+ $ ninja install
+You can run the tests like so:
+ $ ninja test
+
+### Building from a tarball with Autotools
+
+If the tarball was made with Autotools:
+ $ ./configure --prefix=/some_directory
+If the tarball was made with Meson, you must enable maintainer-mode:
+ $ ./autogen.sh --prefix=/some_directory
+
+Then
+ $ make
+ $ make install
+You can build the examples and tests, and run the tests, like so:
+ $ make check
+
+## Building from git
+
+Building from git can be difficult so you should prefer building from
+a release tarball unless you need to work on the libsigc++ code itself.
+
+jhbuild can be a good help
+ https://gitlab.gnome.org/GNOME/jhbuild
+ https://wiki.gnome.org/Projects/Jhbuild
+
+### Building from git with Meson
+
+Maintainer-mode is enabled by default when you build from a git clone.
+
+Don't call the builddir 'build'. There is a directory called 'build' with
+files used by Autotools.
+
+ $ meson --prefix=/some_directory --libdir=lib your_builddir .
+ $ cd your_builddir
+ $ ninja
+ $ ninja install
+You can run the tests like so:
+ $ ninja test
+You can create a tarball like so:
+ $ ninja dist
+
+### Building from git with Autotools
+
+ $ ./autogen.sh --prefix=/some_directory
+ $ make
+ $ make install
+You can build the examples and tests, and run the tests, like so:
+ $ make check
+You can create a tarball like so:
+ $ make distcheck
+or
+ $ make dist
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 d89b1398..b2850e9a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -15,9 +15,9 @@
## 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],
- [http://bugzilla.gnome.org/enter_bug.cgi?product=libsigc%2B%2B],
- [libsigc++], [http://libsigc.sourceforge.net/])
+AC_INIT([libsigc++], [2.10.8],
+ [https://github.com/libsigcplusplus/libsigcplusplus/issues/],
+ [libsigc++], [https://libsigcplusplus.github.io/libsigcplusplus/])
AC_PREREQ([2.59])
AC_CONFIG_SRCDIR([sigc++/sigc++.h])
@@ -25,17 +25,19 @@ AC_CONFIG_AUX_DIR([build])
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])
+AM_INIT_AUTOMAKE([1.9 -Wno-portability check-news no-dist-gzip dist-xz tar-ustar no-define nostdinc])
+# 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])
@@ -66,6 +68,21 @@ 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])
+)
+
+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
@@ -74,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
diff --git a/docs/doc-manual.am b/docs/doc-manual.am
index 8650987f..a7e64a4d 100644
--- a/docs/doc-manual.am
+++ b/docs/doc-manual.am
@@ -20,11 +20,22 @@ DOCBOOK_STYLESHEET ?= http://docbook.sourceforge.net/release/xsl/current/html/ch
html_tutorialdir = $(libdocdir)/tutorial/html
dist_html_tutorial_DATA = $(sort manual/html/index.html $(call vpath_listall,manual/html/*.html))
-dist_noinst_DATA += manual/README manual/libsigc_manual.xml
+dist_noinst_DATA += manual/libsigc_manual.xml
DISTCLEANFILES += $(addprefix manual/libsigc_manual.,dvi pdf ps)
MAINTAINERCLEANFILES += manual/html/*
+# Set the use.id.as.filename param so that we don't use the chapter / section
+# number as the filename, otherwise the url will change every time anything is
+# re-ordered or inserted in the documentation
+xslt_params = $(strip \
+ --param toc.section.depth 1 \
+ --stringparam chunker.output.indent 'yes' \
+ --stringparam chunker.output.encoding 'UTF-8' \
+ --stringparam toc.list.type 'ul' \
+ --stringparam use.id.as.filename '1' \
+ )
+
manual_srcfile = $(srcdir)/manual/libsigc_manual.xml
# Make sure that the documentation will always have been generated before
@@ -34,7 +45,7 @@ reference/html/%: | manual/html/index.html
manual/html/index.html: $(manual_srcfile)
-$(AM_V_at)rm -f manual/html/*
$(AM_V_at)$(MKDIR_P) manual/html
- $(AM_V_GEN)xsltproc -o manual/html/ --catalogs '$(DOCBOOK_STYLESHEET)' $(manual_srcfile)
+ $(AM_V_GEN)xsltproc $(xslt_params) -o manual/html/ --catalogs '$(DOCBOOK_STYLESHEET)' $(manual_srcfile)
manual/libsigc_manual.dvi: $(manual_srcfile)
$(AM_V_GEN)db2dvi -o manual $(manual_srcfile)
diff --git a/docs/manual/README b/docs/manual/README
deleted file mode 100644
index e69de29b..00000000
diff --git a/docs/manual/can_use_xmllint.xml b/docs/manual/can_use_xmllint.xml
new file mode 100644
index 00000000..8ff1b0d4
--- /dev/null
+++ b/docs/manual/can_use_xmllint.xml
@@ -0,0 +1,15 @@
+
+
+
+xmllint test
+
+
+Introduction
+
+ This is a short DocBook V5.0 document. It can be used for testing if the installed
+ version of xmllint or a similar program can validate a DocBook V5.0 document.
+
+
+
+
diff --git a/docs/manual/libsigc_manual.xml b/docs/manual/libsigc_manual.xml
index d21468c0..aabdb935 100644
--- a/docs/manual/libsigc_manual.xml
+++ b/docs/manual/libsigc_manual.xml
@@ -1,26 +1,26 @@
-
-
-
-
-
- libsigc++
-
- Ainsley
- Pereira
-
-
- September 2002. Updated January 2004 by Murray Cumming
-
-
- libsigc++ is a C++ template library implementing typesafe callbacks. This is an intro to libsigc++.
-
-
-
-
-Introduction
-
-
-Motivation
+
+
+
+
+ libsigc++
+
+ Ainsley
+ Pereira
+
+ September 2002
+ September 2002. Updated January 2004 by Murray Cumming
+
+ libsigc++ is a C++ template library implementing typesafe callbacks. This is an intro to libsigc++.
+
+
+
+
+Introduction
+
+
+Motivation
There are many situations in which it is desirable to decouple code that
detects an event, and the code that deals with it. This is especially common in
@@ -29,24 +29,24 @@
application using that toolkit should handle the user clicking on it.
In C the callbacks are generally handled by the application calling a
- 'register' function and passing a pointer to a function and a void *
+ 'register' function and passing a pointer to a function and a void*
argument, eg.
-void clicked(void *data);
+void clicked(void* data);
-button * okbutton = create_button("ok");
+button* okbutton = create_button("ok");
static char somedata[] = "This is some data I want the clicked() function to have";
register_click_handler(okbutton, clicked, somedata);
When clicked, the toolkit will call clicked() with the data pointer passed
- to the register_click_handler function.
+ to the register_click_handler() function.
This works in C, but is not typesafe. There is no compile-time way of
ensuring that clicked() isn't expecting a struct of some sort instead of a
- char * .
+ char* .
As C++ programmers, we want type safety. We also want to be able to use
things other than free-standing functions as callbacks.
@@ -54,10 +54,11 @@ register_click_handler(okbutton, clicked, somedata);
libsigc++ provides the concept of a slot, which holds a reference to one of
the things that can be used as a callback:
- A free-standing function as in the example
- A functor objects that defines operator()
- A pointer-to-a-member-function and an instance of an object on which to invoke it (the
- object should inherit from sigc::trackable )
+ A free-standing function as in the example
+ A functor object that defines operator() (a lambda expression
+ is such an object)
+ A pointer-to-a-member-function and an instance of an object on which to invoke it (the
+ object should inherit from sigc::trackable )
All of which can take different numbers and types of arguments.
@@ -68,14 +69,15 @@ register_click_handler(okbutton, clicked, somedata);
For the other side of the fence, libsigc++ provides signal s, to which the
client can attach slot s. When the signal is emitted, all the connected
slot s are called.
-
+
-
-Connecting your code to signals
+
+Connecting your code to signals
+
+
+A simple example
-
-A simple example
So to get some experience, lets look at a simple example...
Lets say you and I are writing an application which informs the user when
@@ -96,7 +98,7 @@ public:
void run();
- sigc::signal<void> signal_detected;
+ sigc::signal<void()> signal_detected;
};
@@ -107,7 +109,7 @@ public:
void warn_people()
{
- cout << "There are aliens in the carpark!" << endl;
+ std::cout << "There are aliens in the carpark!" << std::endl;
}
int main()
@@ -121,6 +123,11 @@ int main()
}
+ You can use a lambda expression instead of sigc::ptr_fun().
+
+ mydetector.signal_detected.connect( [](){ warn_people(); } );
+
+
Pretty simple really - you call the connect() method on the signal to
connect your function. connect() takes a slot parameter (remember slots
are capable of holding any type of callback), so you convert your
@@ -132,10 +139,10 @@ int main()
./example1
(Try not to panic when the aliens land!)
-
+
-
-Using a member function
+
+Using a member function
Suppose you found a more sophisticated alien alerter class on the web,
such as this:
@@ -175,10 +182,16 @@ int main()
This code is in example2.cc, which can be compiled in the same way as
example1.cc
-
-
-Signals with parameters
+ It's possible to use a lambda expression instead of sigc::mem_fun(),
+ but it's not recommended, if the class derives from sigc::trackable .
+ With a lambda expression you would lose the automatic disconnection that the
+ combination of sigc::trackable and sigc::mem_fun()
+ offers.
+
+
+
+Signals with parameters
Functions taking no parameters and returning void are quite useful,
especially when they're members of classes that can store unlimited amounts of
@@ -198,7 +211,7 @@ public:
void run();
- sigc::signal<void, std::string> signal_detected; // changed
+ sigc::signal<void(std::string)> signal_detected; // changed
};
@@ -206,14 +219,17 @@ public:
my code to supply the argument when I emit the signal too, but that's not shown
here).
- The name of the type is 'sigc::signal '. The template parameters are the return type, then the argument types.
+ The name of the type is 'sigc::signal '.
+ The template parameters are the return type, then the argument types in parentheses.
+ (libsigc++2 also accepts a different syntax, with a comma between the return type
+ and the parameter types. That syntax is deprecated, though.)
The types in the function signature are in the same order as the template
parameters, eg:
-sigc::signal<void, std::string>
- void function(std::string foo);
+sigc::signal<void(std::string)>
+ void function(std::string foo);
So now you can update your alerter (for simplicity, lets go back to the
@@ -222,7 +238,7 @@ sigc::signal<void, std::string>
void warn_people(std::string where)
{
- cout << "There are aliens in " << where << "!" << endl;
+ std::cout << "There are aliens in " << where << "!" << std::endl;
}
int main()
@@ -237,10 +253,10 @@ int main()
Easy.
-
+
-
-Disconnecting
+
+Disconnecting
If you decide you no longer want your code to be called whenever a signal is
emitted, you must remember the return value of connect() , which we've been
@@ -248,14 +264,15 @@ int main()
connect() returns a sigc::connection object, which has a disconnect() member method. This does just what you think it does.
-
+
-
-Writing your own signals
+
+Writing your own signals
+
+
+Quick recap
-
-Quick recap
If all you want to do is use gtkmm, and connect your functionality to its
signals, you can probably stop reading here.
@@ -269,7 +286,7 @@ int main()
A signal is an instance of a template, named sigc::signal .
The template arguments are the types,
in the order they appear in the function signature that can be connected to that
- signal; that is the return type, then the argument types.
+ signal; that is the return type, then the argument types in parentheses.
To provide a signal for people to connect to, you must make available an
instance of that sigc::signal . In AlienDetector this was done
@@ -297,30 +314,32 @@ void AlienDetector::run()
{
sleep(3); // wait for aliens
signal_detected("the carpark"); // this is the std::string version, looks like
- // they landed in the carpark afterall.
+ // they landed in the carpark after all.
}
-
+
+
+
+What about return values?
-
-What about return values?
If you only ever have one slot connected to a signal, or if you only care
about the return value of the last registered one, it's quite straightforward:
-sigc::signal<int> somesignal;
+sigc::signal<int()> somesignal;
int a_return_value;
a_return_value = somesignal.emit();
-
+
-
-Advanced topics
+
+Advanced topics
+
+
+Rebinding
-
-Rebinding
Suppose you already have a function that you want to be called when a
signal is emitted, but it takes the wrong argument types. For example, lets try
to attach the warn_people(std::string) function to the detected signal
@@ -383,35 +402,35 @@ myaliendetector.signal_detected.connect( sigc::hide<std::string>( sigc::pt
hide the first argument of 3, for example, only the last).
sigc::hide_return effectively makes the return type void.
-
+
+
+
+Retyping
-
-Retyping
A similar topic is retyping. Perhaps you have a signal that takes an int , but
you want to connect a function that takes a double .
- This can be achieved with the sigc::retype template. retype has template arguments
- just like sigc::signal - return value, signal types.
-
- It's a function template that takes a sigc::slot , and returns a sigc::slot . eg.
+ This can be achieved with the sigc::retype() template.
+ It takes a sigc::slot , and returns a sigc::slot . eg.
void dostuff(double foo)
{
}
-sigc::signal<void,int> asignal;
+sigc::signal<void(int)> asignal;
-asignal.connect( sigc::retype<void, int>( slot(&dostuff) ) );
+asignal.connect( sigc::retype( sigc::ptr_fun(&dostuff) ) );
- If you only want to change the return type, you can use sigc::retype_return .
- retype_return needs only one template argument.
-
+ If you only want to change the return type, you can use sigc::retype_return() .
+ retype_return() needs one template argument, the new return type.
+
-
-Reference
- See the reference documentation online
+
+Reference
+
+ See the reference documentation online
diff --git a/docs/manual/meson.build b/docs/manual/meson.build
new file mode 100644
index 00000000..2442ddfa
--- /dev/null
+++ b/docs/manual/meson.build
@@ -0,0 +1,110 @@
+# docs/manual
+
+# input: install_datadir, sigcxx_pcname, tutorial_custom_cmd, python3,
+# build_documentation, install_docdir, can_add_dist_script, xsltproc
+# output: can_parse_and_validate, build_pdf_by_default, can_build_pdf,
+# install_tutorialdir
+
+xmllint = find_program('xmllint', required: false)
+can_parse_and_validate = xmllint.found()
+
+validate = get_option('validation') ? 'true' : 'false'
+
+dblatex = find_program('dblatex', required: false)
+can_build_pdf = dblatex.found() or (xsltproc.found() and \
+ find_program('fop', required: false).found())
+build_pdf_by_default = get_option('build-pdf')
+
+# Installation directories are relative to {prefix}.
+install_tutorialdir = install_docdir / 'tutorial'
+
+if not build_documentation
+ # Documentation shall not be built or installed.
+ # Return to the calling meson.build file.
+ subdir_done()
+endif
+
+# Check if xmllint can be used.
+if xmllint.found()
+ can_parse_and_validate = run_command(
+ python3, tutorial_custom_cmd, 'xmllint',
+ validate,
+ meson.current_source_dir() / 'can_use_xmllint.xml',
+ meson.current_build_dir() / 'can_use_xmllint.stamp',
+ check: false,
+ ).returncode() == 0
+ if not can_parse_and_validate
+ # The DocBook V5.0 package is called docbook5-xml in Ubuntu,
+ # docbook5-schemas in Fedora. It may have other names in other distros.
+ warning('Can\'t validate XML file.\n' +
+ 'xmllint does not support Relax NG schemas and DocBook V5.0.\n' +
+ 'DocBook V5.0 support may require docbook5-xml, docbook5-schemas or a similar package.'
+ )
+ endif
+endif
+
+install_data('..' / 'index.html', install_dir: install_docdir)
+install_data('..' / 'images' / 'libsigc_logo.gif',
+ '..' / 'images' / 'top.gif',
+ install_dir: install_docdir / 'images')
+
+doc_dist_dir = 'untracked' / 'docs' / 'manual' # Relative to MESON_DIST_ROOT
+
+sigc_manual_xml = 'libsigc_manual.xml'
+sigc_manual_pdf = 'libsigc_manual.pdf'
+
+# Create an html version of the DocBook.
+custom_target('manual_html',
+ input: sigc_manual_xml,
+ output: 'html',
+ command: [
+ python3, tutorial_custom_cmd, 'html',
+ '@INPUT@',
+ '@OUTPUT@',
+ ],
+ build_by_default: true,
+ install: true,
+ install_dir: install_tutorialdir
+)
+
+if can_parse_and_validate
+ # Parse and possibly validate the DocBook.
+ custom_target('manual_xmllint',
+ input: sigc_manual_xml,
+ output: 'manual_xmllint.stamp',
+ command: [
+ python3, tutorial_custom_cmd, 'xmllint',
+ validate,
+ '@INPUT@',
+ '@OUTPUT@'
+ ],
+ build_by_default: true,
+ )
+endif
+
+if can_build_pdf
+ # Create a PDF file of the DocBook.
+ # Prefer dblatex, if both dblatex and fop are available.
+ custom_target('manual_pdf',
+ input: sigc_manual_xml,
+ output: sigc_manual_pdf,
+ command: [
+ python3, tutorial_custom_cmd,
+ dblatex.found() ? 'dblatex' : 'fop',
+ '@INPUT@',
+ '@OUTPUT@'
+ ],
+ build_by_default: build_pdf_by_default,
+ )
+endif
+
+if can_add_dist_script
+ # Distribute built files.
+ meson.add_dist_script(
+ python3, tutorial_custom_cmd, 'dist_doc',
+ doc_dist_dir,
+ meson.current_build_dir(),
+ meson.current_source_dir() / sigc_manual_xml,
+ meson.current_build_dir() / sigc_manual_pdf,
+ )
+endif
diff --git a/docs/reference/Doxyfile.in b/docs/reference/Doxyfile.in
index 3909facd..b4676875 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@
#---------------------------------------------------------------------------
@@ -32,7 +32,6 @@ SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES = "newin{2}=\xrefitem since_\1_\2 \"Since @PACKAGE_NAME@ \1.\2\" \"New API in @PACKAGE_NAME@ \1.\2\"" \
"newin{3}=\xrefitem since_\1_\2_\3 \"Since @PACKAGE_NAME@ \1.\2.\3\" \"New API in @PACKAGE_NAME@ \1.\2.\3\""
-TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
@@ -45,6 +44,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 +93,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,11 +141,12 @@ 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
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
-COLS_IN_ALPHA_INDEX = 1
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
@@ -212,7 +214,7 @@ LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
-PAPER_TYPE = a4wide
+PAPER_TYPE = a4
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
@@ -224,6 +226,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 +284,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 \
@@ -295,12 +298,10 @@ GENERATE_TAGFILE = "reference/libsigc++-@SIGCXX_API_VERSION@.tag"
ALLEXTERNALS = NO
EXTERNAL_GROUPS = NO
EXTERNAL_PAGES = YES
-PERL_PATH = @PERL@
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
-MSCGEN_PATH =
DIA_PATH =
HIDE_UNDOC_RELATIONS = NO
HAVE_DOT = YES
diff --git a/docs/reference/README b/docs/reference/README
deleted file mode 100644
index ce164350..00000000
--- a/docs/reference/README
+++ /dev/null
@@ -1,6 +0,0 @@
-You need to have doxygen installed.
-
-make targets:
-
-all: builds the reference documentation
-post-html: uploads it to the sourceforge site.
\ No newline at end of file
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
new file mode 100644
index 00000000..eeb1ad1e
--- /dev/null
+++ b/docs/reference/meson.build
@@ -0,0 +1,166 @@
+# docs/reference
+
+# Input: built_files_root, project_source_root, sigcxx_pcname,
+# sigcxx_api_version, build_documentation, source_h_files,
+# built_h_files, install_datadir, python3, doc_reference,
+# built_h_file_targets, can_add_dist_script
+# Output: install_docdir, install_devhelpdir, if build_documentation: tag_file
+
+tag_file_modules = [
+ 'mm-common-libstdc++',
+]
+doxygen_tagfiles = ''
+doxygen_tag_targets = []
+docinstall_flags = []
+foreach module : tag_file_modules
+ depmod = dependency(module, required: false)
+ if depmod.found()
+ doxytagfile = depmod.get_variable(pkgconfig: 'doxytagfile', internal: 'doxytagfile', default_value: '')
+ if doxytagfile != ''
+ if depmod.type_name() == 'internal'
+ # Subprojects must build their tag files before doxygen is called.
+ if module.startswith('mm-common')
+ doxygen_tag_targets += subproject('mm-common').get_variable('global_tag_file_target')
+ else
+ doxygen_tag_targets += subproject(module).get_variable('global_tag_file_target')
+ endif
+ endif
+ htmlrefpub = depmod.get_variable(pkgconfig: 'htmlrefpub', internal: 'htmlrefpub', default_value: '')
+ htmlrefdir = depmod.get_variable(pkgconfig: 'htmlrefdir', internal: 'htmlrefdir', default_value: '')
+ if htmlrefpub == ''
+ htmlrefpub = htmlrefdir
+ elif htmlrefdir == ''
+ htmlrefdir = htmlrefpub
+ endif
+ doxygen_tagfiles += ' "' + doxytagfile + '=' + htmlrefpub + '"'
+
+ # Doxygen <= 1.8.15
+ docinstall_flags += ['-l', doxytagfile.split('/')[-1] + '@' + htmlrefdir]
+ if htmlrefpub != htmlrefdir
+ # Doxygen >= 1.8.16
+ docinstall_flags += ['-l', 's@' + htmlrefpub + '@' + htmlrefdir]
+ endif
+ endif
+ endif
+endforeach
+
+book_name = 'lib' + sigcxx_pcname
+book_title = meson.project_name() + ' Reference Manual'
+
+# Configuration data for Doxyfile.
+doc_conf_data = configuration_data()
+doc_conf_data.set('configure_input',
+ 'docs/docs/reference/Doxyfile. Generated from Doxyfile.in by meson.configure_file().')
+doc_conf_data.set('PACKAGE_NAME', meson.project_name())
+doc_conf_data.set('PACKAGE_VERSION', meson.project_version())
+doc_conf_data.set('abs_top_builddir', built_files_root)
+doc_conf_data.set('abs_top_srcdir', project_source_root)
+doc_conf_data.set('SIGCXX_API_VERSION', sigcxx_api_version)
+doc_conf_data.set('DOXYGEN_TAGFILES', doxygen_tagfiles)
+
+doxyfile = configure_file(
+ input: 'Doxyfile.in',
+ output: '@BASENAME@',
+ configuration: doc_conf_data,
+)
+
+# Installation directories relative to {prefix}.
+install_docdir = install_datadir / 'doc' / book_name
+install_reference_docdir = install_docdir / 'reference'
+install_devhelpdir = install_datadir / 'devhelp' / 'books' / book_name
+
+if not build_documentation
+ # Documentation shall not be built or installed.
+ # Return to the calling meson.build file.
+ subdir_done()
+endif
+
+
+# Built input .h files to Doxygen.
+blt_h_files = []
+foreach file : built_h_files
+ blt_h_files += built_files_root / 'sigc++' / file
+endforeach
+
+# Hand-coded input .h files to Doxygen.
+src_h_files = []
+foreach file : source_h_files
+ src_h_files += project_source_root / 'sigc++' / file
+endforeach
+src_h_files += project_source_root / 'sigc++' / 'sigc++.h'
+
+doctool_dir = project_source_root / 'untracked' / 'docs' # MMDOCTOOLDIR
+doctool_dist_dir = 'untracked' / 'docs' # Relative to MESON_DIST_ROOT
+
+if built_h_file_targets.length() > 0
+ # .h files have been generated from .hg files (maintainer mode).
+ tag_file = custom_target('html_and_tag',
+ input: src_h_files,
+ output: book_name + '.tag',
+ command: [
+ python3, doc_reference, 'doxygen',
+ doctool_dir,
+ '@OUTPUT@',
+ blt_h_files,
+ '@INPUT@',
+ ],
+ depend_files: doxyfile,
+ depends: built_h_file_targets + doxygen_tag_targets,
+ build_by_default: build_documentation,
+ install: true,
+ install_dir: install_reference_docdir,
+ )
+else
+ # All .h files are stored in the source tree (not maintainer mode).
+ tag_file = custom_target('html_and_tag',
+ input: src_h_files + blt_h_files,
+ output: book_name + '.tag',
+ command: [
+ python3, doc_reference, 'doxygen',
+ doctool_dir,
+ '@OUTPUT@',
+ '@INPUT@',
+ ],
+ depend_files: doxyfile,
+ depends: doxygen_tag_targets,
+ build_by_default: build_documentation,
+ install: true,
+ install_dir: install_reference_docdir,
+ )
+endif
+
+devhelp_file = custom_target('devhelp',
+ input: tag_file,
+ output: book_name + '.devhelp2',
+ command: [
+ python3, doc_reference, 'devhelp',
+ doctool_dir,
+ '@INPUT@',
+ '@OUTPUT@',
+ book_name,
+ book_title,
+ ],
+ build_by_default: build_documentation,
+)
+
+# Install Devhelp file and html files.
+meson.add_install_script(
+ python3, doc_reference, 'install_doc',
+ doctool_dir,
+ devhelp_file.full_path(),
+ install_devhelpdir,
+ install_reference_docdir / 'html',
+ docinstall_flags
+)
+
+if can_add_dist_script
+ # Distribute built files and files copied by mm-common-get.
+ meson.add_dist_script(
+ python3, doc_reference, 'dist_doc',
+ doctool_dir,
+ doctool_dist_dir,
+ meson.current_build_dir(),
+ tag_file.full_path(),
+ devhelp_file.full_path(),
+ )
+endif
diff --git a/docs/website/devel.shtml b/docs/website/devel.shtml
index 105fc3f6..0b38c9d3 100644
--- a/docs/website/devel.shtml
+++ b/docs/website/devel.shtml
@@ -20,17 +20,16 @@ There is an archive of messages,
Patches
-Patches should be added to bugzilla bugs.
+Patches should be added to GitHub's issue tracker.
-Open libsigc++ bugs
-Submit a new libsigc++ bug here
+Open libsigc++ issues .
Version Control
-libsigc++ is in the libsigcplusplus module in GNOME's git repository.
+libsigc++ is in the libsigcplusplus module in GitHub's git repository.
diff --git a/docs/website/fragments/footer.html_fragment b/docs/website/fragments/footer.html_fragment
index 7657dd94..0ca69669 100644
--- a/docs/website/fragments/footer.html_fragment
+++ b/docs/website/fragments/footer.html_fragment
@@ -4,7 +4,7 @@
libsigc++ mailing list
|
-website source
+website source
|
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
diff --git a/examples/member_method.cc b/examples/member_method.cc
index 574b1fc8..d7c1f6b8 100644
--- a/examples/member_method.cc
+++ b/examples/member_method.cc
@@ -16,7 +16,7 @@ class Something : public sigc::trackable
protected:
- virtual void on_print(int a);
+ void on_print(int a);
typedef sigc::signal type_signal_print;
type_signal_print signal_print;
@@ -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);
@@ -36,7 +36,7 @@ Something::Something()
void Something::on_print(int a)
{
- std::cout << "on_print recieved: " << a << std::endl;
+ std::cout << "on_print received: " << a << std::endl;
}
int main()
diff --git a/examples/meson.build b/examples/meson.build
new file mode 100644
index 00000000..3c575aec
--- /dev/null
+++ b/examples/meson.build
@@ -0,0 +1,28 @@
+# examples
+
+# input: sigcxx_own_dep, build_examples
+
+examples = [
+# [[dir-name], exe-name, [sources]]
+ [[], 'hello_world', ['hello_world.cc']],
+ [[], 'member_method', ['member_method.cc']],
+]
+
+foreach ex : examples
+ dir = ''
+ foreach dir_part : ex[0]
+ dir = dir / dir_part
+ endforeach
+ ex_name = (dir / ex[1]).underscorify()
+ ex_sources = []
+ foreach src : ex[2]
+ ex_sources += dir / src
+ endforeach
+
+ exe_file = executable(ex_name, ex_sources,
+ cpp_args: '-DSIGCXX_DISABLE_DEPRECATED=1',
+ dependencies: sigcxx_own_dep,
+ implicit_include_directories: false,
+ build_by_default: build_examples
+ )
+endforeach
diff --git a/libsigc++2.doap b/libsigcplusplus.doap
similarity index 79%
rename from libsigc++2.doap
rename to libsigcplusplus.doap
index ac695d2c..cd69f0c4 100644
--- a/libsigc++2.doap
+++ b/libsigcplusplus.doap
@@ -11,9 +11,9 @@ 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.
+
+
C++
@@ -29,7 +29,7 @@ libsigc++ is used by glibmm and gtkmm to wrap Glib and GTK+ signals.
Kjell Ahlstedt
-
+
kjellahl
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..79e6c67c
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,334 @@
+# This file is part of libsigc++.
+
+project('libsigc++', 'cpp',
+ version: '2.10.8',
+ license: 'LGPLv2.1+',
+ default_options: [
+ 'cpp_std=c++11',
+ 'warning_level=0',
+ ],
+ meson_version: '>= 0.55.0', # required for meson.add_dist_script(python3, ...)
+ # and meson.add_install_script(python3, ...)
+)
+
+sigcxx_api_version = '2.0'
+sigcxx_pcname = 'sigc++-' + sigcxx_api_version
+
+sigcxx_version_array = meson.project_version().split('.')
+sigcxx_major_version = sigcxx_version_array[0].to_int()
+sigcxx_minor_version = sigcxx_version_array[1].to_int()
+sigcxx_micro_version = sigcxx_version_array[2].to_int()
+
+# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+# The relation between libtool's current:revison:age interface versioning
+# and the .so filename, .so.x.y.z, is
+# x = current - age
+# y = age
+# z = revision
+# If libtool_soversion is updated as described in libtool's documentation,
+# x.y.z will usually *not* be equal to meson.project_version().
+libtool_soversion = [0, 0, 0]
+sigcxx_libversion = '@0@.@1@.@2@'.format(
+ libtool_soversion[0] - libtool_soversion[2],
+ libtool_soversion[2],
+ libtool_soversion[1])
+darwin_versions = [libtool_soversion[0] + 1, '@0@.@1@'.format(libtool_soversion[0] + 1, libtool_soversion[1])]
+
+# Use these instead of meson.source_root() and meson.build_root() in subdirectories.
+# source_root() and build_root() are not useful, if this is a subproject.
+project_source_root = meson.current_source_dir()
+project_build_root = meson.current_build_dir()
+
+cpp_compiler = meson.get_compiler('cpp')
+is_msvc = cpp_compiler.get_id() == 'msvc'
+python3 = import('python').find_installation()
+
+python_version = python3.language_version()
+python_version_req = '>= 3.5'
+if not python_version.version_compare(python_version_req)
+ error('Requires Python @0@, found @1@.'.format(python_version_req, python_version))
+endif
+
+# Do we build from a git repository?
+# Suppose we do if and only if a '.git' directory or file exists.
+cmd_py = '''
+import os
+import sys
+sys.exit(os.path.isdir("@0@") or os.path.isfile("@0@"))
+'''.format(project_source_root / '.git')
+is_git_build = run_command(python3, '-c', cmd_py, check: false).returncode() != 0
+
+# Are we testing a dist tarball while it's being built?
+# There ought to be a better way. https://github.com/mesonbuild/meson/issues/6866
+is_dist_check = project_source_root.contains('dist-unpack') and \
+ project_build_root.contains('dist-build')
+
+# Options.
+maintainer_mode_opt = get_option('maintainer-mode')
+maintainer_mode = maintainer_mode_opt == 'true' or \
+ (maintainer_mode_opt == 'if-git-build' and is_git_build)
+if is_dist_check
+ message('Looks like a tarball is being tested. ' + \
+ 'Option "dist-warnings" is used instead of "warnings".')
+ warning_level = get_option('dist-warnings')
+else
+ warning_level = get_option('warnings')
+endif
+build_deprecated_api = get_option('build-deprecated-api')
+build_documentation_opt = get_option('build-documentation')
+build_documentation = build_documentation_opt == 'true' or \
+ (build_documentation_opt == 'if-maintainer-mode' and maintainer_mode)
+build_examples = get_option('build-examples')
+do_benchmark = get_option('benchmark')
+
+# Installation directories are relative to {prefix}.
+install_prefix = get_option('prefix')
+install_includedir = get_option('includedir')
+install_libdir = get_option('libdir')
+install_datadir = get_option('datadir')
+install_pkgconfigdir = install_libdir / 'pkgconfig'
+
+# Dependencies.
+# sigcxx_build_dep: Dependencies when building the libsigc++ library.
+# sigcxx_dep (created in sigc++/meson.build):
+# Dependencies when using the libsigc++ library.
+sigcxx_build_dep = [] # No dependencies
+
+benchmark_dep = dependency('boost', modules: ['system', 'timer'],
+ version: '>=1.20.0', required: do_benchmark)
+can_benchmark = benchmark_dep.found()
+
+# We must have Visual Studio 2015 or later...
+if is_msvc and cpp_compiler.version().version_compare('<19')
+ error('Visual Studio 2015 or later is required')
+endif
+
+# Some dependencies are required only in maintainer mode and/or
+# if documentation shall be built.
+mm_common_get = find_program('mm-common-get', required: false)
+if maintainer_mode and not mm_common_get.found()
+ message('Maintainer mode requires the \'mm-common-get\' command. If it is not found,\n' +
+ 'install the \'mm-common\' package, version 1.0.0 or higher.')
+ # If meson --wrap-mode != forcefallback, Meson falls back to the mm-common
+ # subproject only if mm-common-get is required.
+ mm_common_get = find_program('mm-common-get', required: true)
+endif
+m4 = find_program('m4', required: maintainer_mode) # For building C++ code
+doxygen = find_program('doxygen', required: build_documentation)
+dot = find_program('dot', required: build_documentation) # Used by Doxygen
+xsltproc = find_program('xsltproc', required: build_documentation)
+
+script_dir = project_source_root / 'untracked' / 'build_scripts'
+doc_reference = script_dir / 'doc-reference.py'
+dist_changelog = script_dir / 'dist-changelog.py'
+dist_build_scripts = script_dir / 'dist-build-scripts.py'
+tutorial_custom_cmd = project_source_root / 'tools' / 'tutorial-custom-cmd.py'
+
+if maintainer_mode
+ # Copy files to untracked/build_scripts and untracked/docs.
+ run_command(mm_common_get, '--force', script_dir,
+ project_source_root / 'untracked' / 'docs',
+ check: true,
+ )
+else
+ cmd_py = '''
+import os
+import sys
+sys.exit(os.path.isfile("@0@"))
+'''.format(doc_reference)
+ file_exists = run_command(python3, '-c', cmd_py, check: false).returncode() != 0
+ if not file_exists
+ warning('Missing files in untracked/. You may have to enable maintainer-mode.')
+ endif
+endif
+
+# Check if perl is required and available.
+doc_perl_prop = run_command(
+ python3, doc_reference, 'get_script_property',
+ '', # MMDOCTOOLDIR is not used
+ 'requires_perl',
+ check: false,
+)
+if not (doc_perl_prop.returncode() == 0 and doc_perl_prop.stdout() == 'false')
+ # Perl is required, if documentation shall be built.
+ perl = find_program('perl', required: build_documentation)
+endif
+
+# Set compiler warnings.
+warning_flags = []
+if warning_level == 'min'
+ if is_msvc
+ warning_flags = ['/W3']
+ else
+ warning_flags = ['-Wall']
+ endif
+elif warning_level == 'max' or warning_level == 'fatal'
+ if is_msvc
+ warning_flags = ['/W4']
+ else
+ warning_flags = '-pedantic -Wall -Wextra -Wsuggest-override -Wshadow -Wzero-as-null-pointer-constant -Wformat-security'.split()
+ endif
+ if warning_level == 'fatal'
+ if is_msvc
+ warning_flags += ['/WX']
+ else
+ warning_flags += ['-Werror']
+ endif
+ endif
+endif
+
+warning_flags = cpp_compiler.get_supported_arguments(warning_flags)
+add_project_arguments(warning_flags, language: 'cpp')
+
+# MSVC: Ignore warnings that aren't really harmful, but make those
+# that should not be overlooked stand out.
+if is_msvc
+ foreach wd : ['/FImsvc_recommended_pragmas.h', '/EHsc', '/wd4267']
+ disabled_warning = cpp_compiler.get_supported_arguments(wd)
+ add_project_arguments(disabled_warning, language: 'cpp')
+ endforeach
+endif
+
+# Configure files
+pkg_conf_data = configuration_data()
+pkg_conf_data.set('prefix', install_prefix)
+pkg_conf_data.set('exec_prefix', '${prefix}')
+pkg_conf_data.set('libdir', '${exec_prefix}' / install_libdir)
+pkg_conf_data.set('datarootdir', '${prefix}' / install_datadir)
+pkg_conf_data.set('datadir', '${datarootdir}')
+pkg_conf_data.set('includedir', '${prefix}' / install_includedir)
+pkg_conf_data.set('top_srcdir', project_source_root)
+pkg_conf_data.set('PACKAGE_VERSION', meson.project_version())
+pkg_conf_data.set('SIGCXX_API_VERSION', sigcxx_api_version)
+
+if not build_deprecated_api
+ pkg_conf_data.set('SIGCXX_DISABLE_DEPRECATED', 1)
+endif
+pkg_conf_data.set('SIGCXX_MAJOR_VERSION', sigcxx_major_version)
+pkg_conf_data.set('SIGCXX_MINOR_VERSION', sigcxx_minor_version)
+pkg_conf_data.set('SIGCXX_MICRO_VERSION', sigcxx_micro_version)
+foreach conf_test : ['gcc_template_specialization_operator_overload',
+ 'msvc_template_specialization_operator_overload',
+ 'have_sun_reverse_iterator',
+ 'pragma_push_pop_macro']
+ if cpp_compiler.compiles(files('tools' / conf_test + '.cc'))
+ pkg_conf_data.set('SIGC_' + conf_test.to_upper(), true)
+ endif
+endforeach
+
+configure_file(
+ input: 'sigc++.pc.in',
+ output: sigcxx_pcname + '.pc',
+ configuration: pkg_conf_data,
+ install_dir: install_pkgconfigdir,
+)
+
+configure_file(
+ input: 'sigc++-uninstalled.pc.in',
+ output: sigcxx_pcname + '-uninstalled.pc',
+ configuration: pkg_conf_data,
+)
+
+install_includeconfigdir = install_libdir / sigcxx_pcname / 'include'
+sigcxxconfig_h = configure_file(
+ input: 'sigc++config.h.meson',
+ output: 'sigc++config.h',
+ configuration: pkg_conf_data,
+ install_dir: install_includeconfigdir,
+)
+
+# add_dist_script() is not allowed in a subproject if meson.version() < 0.58.0.
+can_add_dist_script = not meson.is_subproject() or meson.version().version_compare('>= 0.58.0')
+
+subdir('MSVC_NMake')
+subdir('sigc++')
+subdir('examples')
+subdir('tests')
+subdir('docs/reference')
+subdir('docs/manual')
+
+if can_add_dist_script
+ # Add a ChangeLog file to the distribution directory.
+ meson.add_dist_script(
+ python3, dist_changelog,
+ project_source_root,
+ )
+ # Add build scripts to the distribution directory, and delete .gitignore
+ # files and an empty $MESON_PROJECT_DIST_ROOT/build/ directory.
+ meson.add_dist_script(
+ python3, dist_build_scripts,
+ project_source_root,
+ 'untracked' / 'build_scripts',
+ )
+endif
+
+if meson.is_subproject()
+ pkgconfig_vars = {
+ 'htmlrefdir': install_prefix / install_docdir / 'reference' / 'html',
+ 'htmlrefpub': 'http://library.gnome.org/devel/libsigc++/2.10/'
+ }
+ if build_documentation
+ pkgconfig_vars += {'doxytagfile': tag_file.full_path()}
+ # May be used in a main project.
+ global_tag_file_target = tag_file
+ endif
+ sigcxx_dep = declare_dependency(
+ dependencies: sigcxx_own_dep,
+ variables: pkgconfig_vars,
+ )
+
+ # A main project that looks for sigcxx_pcname.pc shall find sigcxx_dep.
+ meson.override_dependency(sigcxx_pcname, sigcxx_dep)
+endif
+
+# Print a summary.
+real_maintainer_mode = ''
+if maintainer_mode_opt == 'if-git-build'
+ real_maintainer_mode = ' (@0@)'.format(maintainer_mode)
+endif
+
+real_build_documentation = ''
+if build_documentation_opt == 'if-maintainer-mode'
+ real_build_documentation = ' (@0@)'.format(build_documentation)
+endif
+
+validate = get_option('validation') and can_parse_and_validate
+explain_val = ''
+if get_option('validation') and not validate
+ explain_val = ' (requires xmllint with Relax NG and DocBook V5.0 support)'
+endif
+
+build_pdf = build_pdf_by_default and can_build_pdf
+explain_pdf = ''
+if build_pdf_by_default and not build_pdf
+ explain_pdf = ' (requires dblatex or (xsltproc and fop))'
+endif
+
+summary = [
+ '',
+ '------',
+ meson.project_name() + ' ' + meson.project_version(),
+ '',
+ ' Maintainer mode: @0@@1@'.format(maintainer_mode_opt, real_maintainer_mode),
+ ' Compiler warnings: @0@'.format(warning_level),
+ ' Build deprecated API: @0@'.format(build_deprecated_api),
+ 'Build HTML documentation: @0@@1@'.format(build_documentation_opt, real_build_documentation),
+ ' XML validation: @0@@1@'.format(validate, explain_val),
+ ' Build PDF: @0@@1@'.format(build_pdf, explain_pdf),
+ ' Build example programs: @0@'.format(build_examples),
+ ' Benchmark: @0@'.format(do_benchmark),
+ 'Directories:',
+ ' prefix: @0@'.format(install_prefix),
+ ' includedir: @0@'.format(install_prefix / install_includedir),
+ ' includesigcxxdir: @0@'.format(install_prefix / install_includedir / sigcxx_pcname),
+ ' libdir: @0@'.format(install_prefix / install_libdir),
+ ' includeconfigdir: @0@'.format(install_prefix / install_includeconfigdir),
+ ' pkgconfigdir: @0@'.format(install_prefix / install_pkgconfigdir),
+ ' datadir: @0@'.format(install_prefix / install_datadir),
+ ' docdir: @0@'.format(install_prefix / install_docdir),
+ ' devhelpdir: @0@'.format(install_prefix / install_devhelpdir),
+ ' tutorialdir: @0@'.format(install_prefix / install_tutorialdir),
+ '------'
+]
+
+message('\n'.join(summary))
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..843f0a03
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,18 @@
+option('maintainer-mode', type: 'combo', choices: ['false', 'if-git-build', 'true'],
+ value: 'if-git-build', description: 'Generate source code from .m4 files')
+option('warnings', type: 'combo', choices: ['no', 'min', 'max', 'fatal'],
+ value: 'min', description: 'Compiler warning level')
+option('dist-warnings', type: 'combo', choices: ['no', 'min', 'max', 'fatal'],
+ value: 'fatal', description: 'Compiler warning level when a tarball is created')
+option('build-deprecated-api', type: 'boolean', value: true,
+ description: 'Build deprecated API and include it in the library')
+option('build-documentation', type: 'combo', choices: ['false', 'if-maintainer-mode', 'true'],
+ value: 'if-maintainer-mode', description: 'Build and install the documentation')
+option('validation', type: 'boolean', value: true,
+ description: 'Validate the tutorial XML file')
+option('build-pdf', type: 'boolean', value: false,
+ description: 'Build tutorial PDF file')
+option('build-examples', type: 'boolean', value: true,
+ description: 'Build example programs')
+option('benchmark', type: 'boolean', value: false,
+ description: 'Build and test benchmark program')
diff --git a/sigc++-uninstalled.pc.in b/sigc++-uninstalled.pc.in
index 9a9fde1a..0205215d 100644
--- a/sigc++-uninstalled.pc.in
+++ b/sigc++-uninstalled.pc.in
@@ -1,9 +1,9 @@
doxytagfile=${pc_top_builddir}/docs/reference/libsigc++-@SIGCXX_API_VERSION@.tag
-htmlrefpub=http://library.gnome.org/devel/libsigc++/unstable/
+htmlrefpub=http://library.gnome.org/devel/libsigc++/2.10/
Name: libsigc++
Description: Typesafe signal and callback system for C++, not installed
Version: @PACKAGE_VERSION@
-URL: http://libsigc.sourceforge.net/
+URL: https://libsigcplusplus.github.io/libsigcplusplus/
Libs: ${pc_top_builddir}/sigc++/libsigc-@SIGCXX_API_VERSION@.la
Cflags: -I${pc_top_builddir} -I${pc_top_builddir}/@top_srcdir@
diff --git a/sigc++.pc.in b/sigc++.pc.in
index c03a1ddc..d4cd2449 100644
--- a/sigc++.pc.in
+++ b/sigc++.pc.in
@@ -8,11 +8,11 @@ includedir=@includedir@
docdir=${datarootdir}/doc/libsigc++-@SIGCXX_API_VERSION@
doxytagfile=${docdir}/reference/libsigc++-@SIGCXX_API_VERSION@.tag
htmlrefdir=${docdir}/reference/html
-htmlrefpub=http://library.gnome.org/devel/libsigc++/unstable/
+htmlrefpub=http://library.gnome.org/devel/libsigc++/2.10/
Name: libsigc++
Description: Typesafe signal and callback system for C++
Version: @PACKAGE_VERSION@
-URL: http://libsigc.sourceforge.net/
+URL: https://libsigcplusplus.github.io/libsigcplusplus/
Libs: -L${libdir} -lsigc-@SIGCXX_API_VERSION@
Cflags: -I${includedir}/sigc++-@SIGCXX_API_VERSION@ -I${libdir}/sigc++-@SIGCXX_API_VERSION@/include
diff --git a/sigc++/Makefile.am b/sigc++/Makefile.am
index caa9e154..c064cae4 100644
--- a/sigc++/Makefile.am
+++ b/sigc++/Makefile.am
@@ -29,14 +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.cc \
- signal_base.cc \
- trackable.cc \
- connection.cc \
- functors/slot.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++/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()
diff --git a/sigc++/adaptors/lambda/meson.build b/sigc++/adaptors/lambda/meson.build
new file mode 100644
index 00000000..907f123e
--- /dev/null
+++ b/sigc++/adaptors/lambda/meson.build
@@ -0,0 +1,44 @@
+# sigc++/adaptors/lambda
+
+# Input: maintainer_mode, python3, handle_built_files, m4_template, m4_include_dir
+# Input and output: built_h_files, built_cc_files, built_h_file_targets,
+# built_cc_file_targets
+
+# .m4 files to build .h and .cc files from.
+adaptors_lambda_cc_m4_files = [
+ 'lambda.cc',
+]
+adaptors_lambda_h_m4_files = [
+ 'base.h',
+ 'select.h',
+]
+foreach file : adaptors_lambda_h_m4_files
+ built_h_files += 'adaptors' / 'lambda' / file
+endforeach
+foreach file : adaptors_lambda_cc_m4_files
+ built_cc_files += 'adaptors' / 'lambda' / file
+endforeach
+
+if maintainer_mode
+ # Maintainer mode. Generate .h and .cc files from .m4 files in macros/ directory.
+ foreach file : adaptors_lambda_cc_m4_files + adaptors_lambda_h_m4_files
+ built_file_target = custom_target('adaptors_lambda_' + file,
+ input: 'macros' / file + '.m4',
+ output: file,
+ command: [
+ python3, handle_built_files, 'build_from_m4',
+ m4_include_dir,
+ '@INPUT@',
+ '@OUTPUT@',
+ ],
+ depend_files: m4_template,
+ build_by_default: maintainer_mode,
+ install: false,
+ )
+ if file.endswith('.cc')
+ built_cc_file_targets += built_file_target
+ else
+ built_h_file_targets += built_file_target
+ endif
+ endforeach
+endif
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++/adaptors/meson.build b/sigc++/adaptors/meson.build
new file mode 100644
index 00000000..cea6831b
--- /dev/null
+++ b/sigc++/adaptors/meson.build
@@ -0,0 +1,40 @@
+# sigc++/adaptors
+
+# Input: maintainer_mode, python3, handle_built_files, m4_template, m4_include_dir
+# Input and output: built_h_files, built_h_file_targets
+
+# .m4 files to build .h files from.
+adaptors_h_m4_files = [
+ 'adaptor_trait.h',
+ 'bind.h',
+ 'bind_return.h',
+ 'compose.h',
+ 'deduce_result_type.h',
+ 'exception_catch.h',
+ 'hide.h',
+ 'retype.h',
+ 'retype_return.h',
+ 'track_obj.h',
+]
+foreach file : adaptors_h_m4_files
+ built_h_files += 'adaptors' / file
+endforeach
+
+if maintainer_mode
+ # Maintainer mode. Generate .h files from .m4 files in macros/ directory.
+ foreach file : adaptors_h_m4_files
+ built_h_file_targets += custom_target('adaptors_' + file,
+ input: 'macros' / file + '.m4',
+ output: file,
+ command: [
+ python3, handle_built_files, 'build_from_m4',
+ m4_include_dir,
+ '@INPUT@',
+ '@OUTPUT@',
+ ],
+ depend_files: m4_template,
+ build_by_default: maintainer_mode,
+ install: false,
+ )
+ endforeach
+endif
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
diff --git a/sigc++/functors/macros/mem_fun.h.m4 b/sigc++/functors/macros/mem_fun.h.m4
index 90d1889d..2824c353 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.
@@ -196,13 +213,15 @@ _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.
*
- * @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.
diff --git a/sigc++/functors/macros/slot.h.m4 b/sigc++/functors/macros/slot.h.m4
index 5c6436ca..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 (reinterpret_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();
}
@@ -185,22 +185,34 @@ 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
*/
-template ],[dnl
+template
+class slot],[dnl
/** 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.
+ *
+ * @deprecated Please use the syntax similar to that used by std::function<>:
+ * @code
+ * sigc::slot some_slot;
+ * @endcode
+ *
dnl *
dnl * @ingroup slot
*/
-template ])
-class slot ifelse($1, $2,,[])
+template
+class slot ])
: public slot$1
{
public:
@@ -343,7 +355,7 @@ ifelse($1,0,[
* @return A function pointer formed from call_it().
*/
static hook address()
- { return reinterpret_cast(&call_it); }
+ { return sigc::internal::function_pointer_cast(&call_it); }
};
])
@@ -366,6 +378,28 @@ 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
+// https://github.com/libsigcplusplus/libsigcplusplus/issues/8
+/** Returns the supplied function pointer, cast to a pointer to another function type.
+ *
+ * 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::function_pointer_cast<>().
+ * If you don't, indirect calls from another library that also contains a
+ * function_pointer_cast<>() (perhaps glibmm), can be ambiguous due to ADL
+ * (argument-dependent lookup).
+ */
+template
+inline T_out function_pointer_cast(T_in in)
+{
+ // 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.
* A typed slot_rep holds a functor that can be invoked from
* slot::operator()(). visit_each() is used to visit the functor's
@@ -438,8 +472,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_).SIGC_WORKAROUND_OPERATOR_PARENTHESES...>
+ (a_...);
+ }
+
+ /** Forms a function pointer from call_it().
+ * @return A function pointer formed from call_it().
+ */
+ static hook address()
+ { return sigc::internal::function_pointer_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 sigc::internal::function_pointer_cast(&call_it); }
+};
+
} /* namespace internal */
@@ -447,6 +547,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 (sigc::internal::function_pointer_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
diff --git a/sigc++/functors/meson.build b/sigc++/functors/meson.build
new file mode 100644
index 00000000..b04fa294
--- /dev/null
+++ b/sigc++/functors/meson.build
@@ -0,0 +1,34 @@
+# sigc++/functors
+
+# Input: maintainer_mode, python3, handle_built_files, m4_template, m4_include_dir
+# Input and output: built_h_files, built_h_file_targets
+
+# .m4 files to build .h files from.
+functors_h_m4_files = [
+ 'functor_trait.h',
+ 'mem_fun.h',
+ 'ptr_fun.h',
+ 'slot.h',
+]
+foreach file : functors_h_m4_files
+ built_h_files += 'functors' / file
+endforeach
+
+if maintainer_mode
+ # Maintainer mode. Generate .h files from .m4 files in macros/ directory.
+ foreach file : functors_h_m4_files
+ built_h_file_targets += custom_target('functors_' + file,
+ input: 'macros' / file + '.m4',
+ output: file,
+ command: [
+ python3, handle_built_files, 'build_from_m4',
+ m4_include_dir,
+ '@INPUT@',
+ '@OUTPUT@',
+ ],
+ depend_files: m4_template,
+ build_by_default: maintainer_mode,
+ install: false,
+ )
+ endforeach
+endif
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 */
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
diff --git a/sigc++/functors/slot_base.h b/sigc++/functors/slot_base.h
index d9697519..4a0f5ff6 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,13 @@ 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
* not slots.
* @code
@@ -209,6 +218,12 @@ 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
* wrapped in a slot, if it is connected to a signal.
* @code
diff --git a/sigc++/macros/signal.h.m4 b/sigc++/macros/signal.h.m4
index b9e2a2bb..9489256e 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;
@@ -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 (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)); }
@@ -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_;])
@@ -112,7 +117,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;
@@ -138,25 +143,26 @@ 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;
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_ = (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_ = (reinterpret_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)));
}
}
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)))
{
@@ -193,17 +201,18 @@ 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_ = (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_ = (reinterpret_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)));
}
}
return r_;
}
+_DEPRECATE_IFDEF_END
};
/** Abstracts signal emission.
@@ -216,7 +225,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);
@@ -234,14 +243,15 @@ FOR(1, $1,[
signal_exec exec(impl);
temp_slot_list slots(impl->slots_);
- for (iterator_type 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)));
+ (sigc::internal::function_pointer_cast(slot.rep_->call_))(LIST(slot.rep_, LOOP(_A_a%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)))
{
@@ -262,13 +274,14 @@ 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;
- (reinterpret_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
};
])
@@ -285,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
@@ -310,7 +319,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;
@@ -363,11 +372,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)); }
@@ -379,11 +396,14 @@ 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); }
+_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()); }
@@ -391,9 +411,12 @@ FOR(1, $1,[
/** 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() {}
@@ -433,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
@@ -453,21 +472,32 @@ 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 ],[dnl
+template
+class signal],[dnl
/** Convenience wrapper for the numbered sigc::signal$1 template.
* 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
])dnl
*/
-template ])
-class signal ifelse($1, $2,,[])
+template
+class signal ifelse($1, $2,,[])])
: public signal$1
{
public:
@@ -555,6 +585,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)
@@ -722,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
*/
@@ -1022,7 +1144,7 @@ struct slot_reverse_iterator_buf
result_type operator*() const
{
- iterator_type __tmp(i_);
+ auto __tmp(i_);
--__tmp;
if (!__tmp->empty() && !__tmp->blocked() && !invoked_)
{
@@ -1101,7 +1223,7 @@ struct slot_reverse_iterator_buf
void operator*() const
{
- iterator_type __tmp(i_);
+ auto __tmp(i_);
--__tmp;
if (!__tmp->empty() && !__tmp->blocked() && !invoked_)
{
diff --git a/sigc++/meson.build b/sigc++/meson.build
new file mode 100644
index 00000000..7f382512
--- /dev/null
+++ b/sigc++/meson.build
@@ -0,0 +1,194 @@
+# sigc++
+
+# Input: sigcxx_build_dep, sigcxx_pcname, sigcxx_libversion, sigcxx_api_version,
+# install_includedir, project_source_root, sigc_res, python3,
+# handle_built_files, maintainer_mode, can_add_dist_script
+# Output: source_h_files, built_h_files, sigcxx_own_dep, built_files_root,
+# built_h_file_targets
+
+source_cc_files = [
+ 'connection.cc',
+ 'signal_base.cc',
+ 'trackable.cc',
+ 'functors' / 'slot_base.cc',
+]
+
+sigc_h_files = [
+ 'bind.h',
+ 'bind_return.h',
+ 'connection.h',
+ 'reference_wrapper.h',
+ 'retype_return.h',
+ 'signal_base.h',
+ 'slot.h',
+ 'trackable.h',
+ 'type_traits.h',
+ 'visit_each.h',
+]
+adaptors_h_files = [
+ 'adaptors' / 'adaptors.h',
+ 'adaptors' / 'bound_argument.h',
+]
+functors_h_files = [
+ 'functors' / 'functors.h',
+ 'functors' / 'slot_base.h',
+]
+
+# .m4 files to build .h files from.
+sigc_h_m4_files = [
+ 'limit_reference.h',
+ 'signal.h',
+]
+
+m4_template = files('macros' / 'template.macros.m4')
+m4_include_dir = meson.current_source_dir() / 'macros'
+
+source_h_files = sigc_h_files + adaptors_h_files + functors_h_files
+
+built_h_files = sigc_h_m4_files
+built_cc_files = []
+
+# Force meson+ninja to generate source files before anything is compiled.
+# Compilation must depend on these targets.
+built_cc_file_targets = []
+built_h_file_targets = []
+
+subdir('adaptors')
+subdir('adaptors/lambda')
+subdir('functors')
+
+install_headers('sigc++.h', subdir: sigcxx_pcname / 'sigc++')
+install_headers(sigc_h_files, subdir: sigcxx_pcname / 'sigc++')
+install_headers(adaptors_h_files, subdir: sigcxx_pcname / 'sigc++' / 'adaptors')
+install_headers(functors_h_files, subdir: sigcxx_pcname / 'sigc++' / 'functors')
+
+untracked_sigcxx = 'untracked' / 'sigc++'
+src_untracked_sigcxx = project_source_root / untracked_sigcxx
+
+extra_sigc_cppflags = []
+extra_sigc_objects = []
+
+# Make sure we are exporting the symbols from the DLL
+if is_msvc
+ extra_sigc_cppflags += ['-DSIGC_BUILD', '-D_WINDLL']
+endif
+
+# Build the .rc file for Windows builds and link to it
+if host_machine.system() == 'windows'
+ windows = import('windows')
+ sigc_res = windows.compile_resources(sigc_rc)
+ extra_sigc_objects += sigc_res
+endif
+
+if maintainer_mode
+
+ # Maintainer mode. Generate .h and .cc files from .m4 files in macros/ directory.
+ # .h and .cc files are also generated in subdirectories.
+
+ # docs/reference/meson.build needs this.
+ built_files_root = project_build_root
+
+ foreach file : sigc_h_m4_files
+ built_h_file_targets += custom_target(file,
+ input: 'macros' / file + '.m4',
+ output: file,
+ command: [
+ python3, handle_built_files, 'build_from_m4',
+ m4_include_dir,
+ '@INPUT@',
+ '@OUTPUT@',
+ ],
+ depend_files: m4_template,
+ build_by_default: maintainer_mode,
+ install: false,
+ )
+ endforeach
+
+ extra_include_dirs = ['..']
+ sigcxx_library = library('sigc-' + sigcxx_api_version,
+ source_cc_files, built_cc_file_targets, built_h_file_targets,
+ extra_sigc_objects,
+ version: sigcxx_libversion,
+ darwin_versions: darwin_versions,
+ cpp_args: extra_sigc_cppflags,
+ implicit_include_directories: false,
+ include_directories: extra_include_dirs,
+ dependencies: sigcxx_build_dep,
+ install: true,
+ )
+
+ built_h_cc_dir = meson.current_build_dir()
+
+else # not maintainer_mode
+
+ # Not maintainer mode. Compile built source code files in
+ # project_source_root/untracked/sigc++.
+
+ # docs/reference/meson.build needs this.
+ built_files_root = project_source_root / 'untracked'
+
+ # Two cases:
+ # 1. The source code comes from a tarball, where the built files
+ # are stored in project_source_root/untracked.
+ # There are no built files in the build tree.
+ # 2. Files have been built in the build tree. Then maintainer_mode has
+ # been changed from true to false. Files that are missing or not up to date
+ # in project_source_root/untracked are copied from the build tree.
+
+ # Try to copy built source code files to the source tree.
+ run_command(
+ python3, handle_built_files, 'copy_built_files',
+ meson.current_build_dir(),
+ src_untracked_sigcxx,
+ built_h_files + built_cc_files,
+ check: true,
+ )
+
+ untracked_built_cc_files = []
+ foreach file : built_cc_files
+ untracked_built_cc_files += '..' / 'untracked' / 'sigc++' / file
+ endforeach
+
+ extra_include_dirs = [ '..', '..' / 'untracked' ]
+ sigcxx_library = library('sigc-' + sigcxx_api_version,
+ source_cc_files, untracked_built_cc_files,
+ extra_sigc_objects,
+ version: sigcxx_libversion,
+ darwin_versions: darwin_versions,
+ cpp_args: extra_sigc_cppflags,
+ implicit_include_directories: false,
+ include_directories: extra_include_dirs,
+ dependencies: sigcxx_build_dep,
+ install: true,
+ )
+
+ built_h_cc_dir = src_untracked_sigcxx
+
+endif
+
+# Install built .h files.
+meson.add_install_script(
+ python3, handle_built_files, 'install_built_h_files',
+ built_h_cc_dir,
+ install_includedir / sigcxx_pcname / 'sigc++', # subdir below {prefix}
+ built_h_files,
+)
+
+if can_add_dist_script
+ # Distribute built files.
+ meson.add_dist_script(
+ python3, handle_built_files, 'dist_built_files',
+ built_h_cc_dir,
+ untracked_sigcxx,
+ built_h_files + built_cc_files,
+ )
+endif
+
+# This is used when building example programs and test programs.
+# It's also a part of sigcxx_dep, when libsigc++ is a subproject.
+sigcxx_own_dep = declare_dependency(
+ sources: built_h_file_targets,
+ link_with: sigcxx_library,
+ include_directories: extra_include_dirs,
+ dependencies: sigcxx_build_dep
+)
diff --git a/sigc++/reference_wrapper.h b/sigc++/reference_wrapper.h
index 5a57e916..c04fa4d7 100644
--- a/sigc++/reference_wrapper.h
+++ b/sigc++/reference_wrapper.h
@@ -19,10 +19,16 @@
#ifndef _SIGC_REFERENCE_WRAPPER_H_
#define _SIGC_REFERENCE_WRAPPER_H_
+#include // For std::reference_wrapper.
+
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 +44,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 +68,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 +84,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 +125,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_ */
diff --git a/sigc++/sigc++.h b/sigc++/sigc++.h
index 24d34242..7acb5493 100644
--- a/sigc++/sigc++.h
+++ b/sigc++/sigc++.h
@@ -34,9 +34,9 @@
* @ref slot "Slots" and @ref adaptors "Adaptors".
*
* See also the
- * libsigc++ tutorial ,
- * the libsigc++ website , and
- * the Signals appendix of the Programming with gtkmm book .
+ * libsigc++ tutorial ,
+ * the libsigc++ website , and
+ * the Signals appendix of the Programming with gtkmm book .
*
* @section features Features
*
@@ -64,18 +64,55 @@
* @code
* g++ program.cc -o program `pkg-config --cflags --libs sigc++-2.0`
* @endcode
+ * If your version of g++ is not C++11-compliant by default,
+ * add the @c -std=c++11 option.
+ *
+ * @subsection meson Using Meson
+ *
+ * If using Meson , include the following
+ * in @c meson.build:
+ * @code
+ * sigc_dep = dependency('sigc++-2.0')
+ * program_name = 'program'
+ * cpp_sources = [ 'program.cc' ]
+ * executable(program_name,
+ * cpp_sources,
+ * dependencies: sigc_dep
+ * )
+ * @endcode
+ *
+ * Your @c dependencies: keyword argument should also mention any other libraries
+ * that you need to use.
+ *
+ * @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,
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 */
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
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
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/sigc++config.h.meson b/sigc++config.h.meson
new file mode 100644
index 00000000..30576487
--- /dev/null
+++ b/sigc++config.h.meson
@@ -0,0 +1,89 @@
+/* This file is part of libsigc++. */
+#ifndef SIGCXXCONFIG_H_INCLUDED
+#define SIGCXXCONFIG_H_INCLUDED
+
+/* Define to omit deprecated API from the library. */
+#mesondefine SIGCXX_DISABLE_DEPRECATED
+
+/* Major version number of sigc++. */
+#mesondefine SIGCXX_MAJOR_VERSION
+
+/* Minor version number of sigc++. */
+#mesondefine SIGCXX_MINOR_VERSION
+
+/* Micro version number of sigc++. */
+#mesondefine SIGCXX_MICRO_VERSION
+
+/* Detect Win32 platform */
+#ifdef _WIN32
+# if defined(_MSC_VER)
+# define SIGC_MSC 1
+# define SIGC_WIN32 1
+# define SIGC_DLL 1
+# elif defined(__CYGWIN__)
+# define SIGC_CONFIGURE 1
+# elif defined(__MINGW32__)
+# define SIGC_WIN32 1
+# define SIGC_CONFIGURE 1
+# else
+# error "libsigc++ config: Unknown win32 architecture (send me gcc --dumpspecs or equiv)"
+# endif
+#else /* !_WIN32 */
+# define SIGC_CONFIGURE 1
+#endif /* !_WIN32 */
+
+#ifdef SIGC_MSC
+/*
+ * MS VC7 Warning 4251 says that the classes to any member objects in an
+ * exported class must also be exported. Some of the libsigc++
+ * template classes contain std::list members. MS KB article 168958 says
+ * that it's not possible to export a std::list instantiation due to some
+ * wacky class nesting issues, so our only options are to ignore the
+ * warning or to modify libsigc++ to remove the std::list dependency.
+ * AFAICT, the std::list members are used internally by the library code
+ * and don't need to be used from the outside, and ignoring the warning
+ * seems to have no adverse effects, so that seems like a good enough
+ * solution for now.
+ */
+# pragma warning(disable:4251)
+
+# define SIGC_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD 1
+# define SIGC_NEW_DELETE_IN_LIBRARY_ONLY 1 /* To keep ABI compatibility */
+# define SIGC_PRAGMA_PUSH_POP_MACRO 1
+
+#if (_MSC_VER < 1900) && !defined (noexcept)
+#define _ALLOW_KEYWORD_MACROS 1
+#define noexcept _NOEXCEPT
+#endif
+
+#else /* SIGC_MSC */
+
+/* does the C++ compiler support the use of a particular specialization when
+ calling operator() template methods. */
+#mesondefine SIGC_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+
+/* Define if the non-standard Sun reverse_iterator must be used. */
+#mesondefine SIGC_HAVE_SUN_REVERSE_ITERATOR
+
+/* does the C++ compiler support the use of a particular specialization when
+ calling operator() template methods omitting the template keyword. */
+#mesondefine SIGC_MSVC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
+
+/* does the C++ preprocessor support pragma push_macro() and pop_macro(). */
+#mesondefine SIGC_PRAGMA_PUSH_POP_MACRO
+
+#endif /* !SIGC_MSC */
+
+#ifdef SIGC_DLL
+# if defined(SIGC_BUILD) && defined(_WINDLL)
+# define SIGC_API __declspec(dllexport)
+# elif !defined(SIGC_BUILD)
+# define SIGC_API __declspec(dllimport)
+# else
+# define SIGC_API
+# endif
+#else /* !SIGC_DLL */
+# define SIGC_API
+#endif /* !SIGC_DLL */
+
+#endif /* !SIGCXXCONFIG_H_INCLUDED */
diff --git a/subprojects/mm-common.wrap b/subprojects/mm-common.wrap
new file mode 100644
index 00000000..296109fa
--- /dev/null
+++ b/subprojects/mm-common.wrap
@@ -0,0 +1,9 @@
+[wrap-git]
+directory=mm-common
+url=https://gitlab.gnome.org/GNOME/mm-common.git
+revision=master
+depth=1
+
+[provide]
+dependency_names = mm-common-libstdc++
+program_names = mm-common-get
diff --git a/tests/.gitignore b/tests/.gitignore
index be803fcb..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,3 +32,4 @@
/test_trackable_move
/test_track_obj
/test_visit_each
+/benchmark
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
new file mode 100644
index 00000000..a9b5945f
--- /dev/null
+++ b/tests/benchmark.cc
@@ -0,0 +1,114 @@
+/* Copyright 2003 - 2016, The libsigc++ Development Team
+ * Assigned to public domain. Use as you wish without restriction.
+ */
+
+#include
+#include
+#include
+#include
+
+const int COUNT = 10000000;
+
+struct foo : public sigc::trackable
+{
+ int bar(int a);
+ int c;
+};
+
+int foo::bar(int a)
+{
+ int b = c;
+ c = a;
+ return b;
+}
+
+void test_slot_call()
+{
+ foo foobar1;
+ sigc::signal::iterator it;
+
+ // slot benchmark ...
+
+ 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;
+
+ for (int i=0; i < COUNT; ++i)
+ slot(i);
+}
+
+void test_signal_emit()
+{
+ sigc::signal emitter;
+
+ 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);
+}
+
+void test_connected_signal_emit()
+{
+ foo foobar1;
+ sigc::signal emitter;
+ emitter.connect(mem_fun(foobar1, &foo::bar));
+
+ 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);
+}
+
+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));
+
+ 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);
+}
+
+void test_connect_disconnect()
+{
+ foo foobar1;
+ sigc::signal emitter;
+ sigc::signal::iterator it;
+
+ 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();
+ }
+}
+
+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();
+}
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 00000000..7e9a2b38
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,92 @@
+# tests
+
+# input: sigcxx_own_dep, do_benchmark, can_benchmark, benchmark_dep
+
+benchmark_timeout = 100
+
+test_programs = [
+# [[dir-name], exe-name, [sources]]
+ [[], 'test_accum_iter', ['test_accum_iter.cc', 'testutilities.cc']],
+ [[], 'test_accumulated', ['test_accumulated.cc', 'testutilities.cc']],
+ [[], 'test_bind', ['test_bind.cc', 'testutilities.cc']],
+ [[], 'test_bind_as_slot', ['test_bind_as_slot.cc', 'testutilities.cc']],
+ [[], 'test_bind_ref', ['test_bind_ref.cc', 'testutilities.cc']],
+ [[], 'test_bind_refptr', ['test_bind_refptr.cc', 'testutilities.cc']],
+ [[], 'test_bind_return', ['test_bind_return.cc', 'testutilities.cc']],
+ [[], 'test_compose', ['test_compose.cc', 'testutilities.cc']],
+ [[], 'test_copy_invalid_slot', ['test_copy_invalid_slot.cc', 'testutilities.cc']],
+ [[], 'test_cpp11_lambda', ['test_cpp11_lambda.cc', 'testutilities.cc']],
+ [[], 'test_custom', ['test_custom.cc', 'testutilities.cc']],
+ [[], 'test_deduce_result_type', ['test_deduce_result_type.cc', 'testutilities.cc']],
+ [[], 'test_disconnect', ['test_disconnect.cc', 'testutilities.cc']],
+ [[], 'test_disconnect_during_emit', ['test_disconnect_during_emit.cc', 'testutilities.cc']],
+ [[], 'test_exception_catch', ['test_exception_catch.cc', 'testutilities.cc']],
+ [[], 'test_functor_trait', ['test_functor_trait.cc', 'testutilities.cc']],
+ [[], 'test_hide', ['test_hide.cc', 'testutilities.cc']],
+ [[], 'test_limit_reference', ['test_limit_reference.cc', 'testutilities.cc']],
+ [[], 'test_mem_fun', ['test_mem_fun.cc', 'testutilities.cc']],
+ [[], 'test_ptr_fun', ['test_ptr_fun.cc', 'testutilities.cc']],
+ [[], 'test_retype', ['test_retype.cc', 'testutilities.cc']],
+ [[], 'test_retype_return', ['test_retype_return.cc', 'testutilities.cc']],
+ [[], 'test_signal', ['test_signal.cc', 'testutilities.cc']],
+ [[], 'test_signal_move', ['test_signal_move.cc', 'testutilities.cc']],
+ [[], 'test_size', ['test_size.cc', 'testutilities.cc']],
+ [[], 'test_slot', ['test_slot.cc', 'testutilities.cc']],
+ [[], 'test_slot_disconnect', ['test_slot_disconnect.cc', 'testutilities.cc']],
+ [[], 'test_slot_move', ['test_slot_move.cc', 'testutilities.cc']],
+ [[], 'test_trackable', ['test_trackable.cc', 'testutilities.cc']],
+ [[], 'test_trackable_move', ['test_trackable_move.cc', 'testutilities.cc']],
+ [[], 'test_track_obj', ['test_track_obj.cc', 'testutilities.cc']],
+ [[], 'test_visit_each', ['test_visit_each.cc', 'testutilities.cc']],
+]
+
+benchmark_programs = [
+# [[dir-name], exe-name, [sources]]
+ [[], 'benchmark1', ['benchmark.cc']],
+]
+
+foreach ex : test_programs
+ dir = ''
+ foreach dir_part : ex[0]
+ dir = dir / dir_part
+ endforeach
+ ex_name = (dir / ex[1]).underscorify()
+ ex_sources = []
+ foreach src : ex[2]
+ ex_sources += dir / src
+ endforeach
+
+ exe_file = executable(ex_name, ex_sources,
+ dependencies: sigcxx_own_dep,
+ implicit_include_directories: false,
+ build_by_default: true
+ )
+
+ test(ex_name, exe_file)
+endforeach
+
+if can_benchmark
+ foreach ex : benchmark_programs
+ dir = ''
+ foreach dir_part : ex[0]
+ dir = dir / dir_part
+ endforeach
+ ex_name = (dir / ex[1]).underscorify()
+ ex_sources = []
+ foreach src : ex[2]
+ ex_sources += dir / src
+ endforeach
+
+ exe_file = executable(ex_name, ex_sources,
+ dependencies: [sigcxx_own_dep, benchmark_dep],
+ implicit_include_directories: false,
+ build_by_default: do_benchmark
+ )
+
+ if do_benchmark
+ test(ex_name, exe_file,
+ timeout: benchmark_timeout,
+ )
+ endif
+ endforeach
+endif
diff --git a/tests/test_accumulated.cc b/tests/test_accumulated.cc
index adbc2956..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::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;
}
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_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_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_disconnect.cc b/tests/test_disconnect.cc
index 048acbd0..2d040d89 100644
--- a/tests/test_disconnect.cc
+++ b/tests/test_disconnect.cc
@@ -2,6 +2,12 @@
* Assigned to public domain. Use as you wish without restriction.
*/
+// sigc::signal<>.slots() is deprecated, but let's keep the test if possible.
+// If libsigc++ is configured with -Dbuild-deprecated-api=false
+// (--disable-deprecated-api), SIGCXX_DISABLE_DEPRECATED is defined in
+// sigc++config.h. An undef at the start of this file has no effect.
+#undef SIGCXX_DISABLE_DEPRECATED
+
#include "testutilities.h"
#include
#include
@@ -50,8 +56,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 +95,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,11 +109,20 @@ 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));
+#ifndef SIGCXX_DISABLE_DEPRECATED
+ cona = sig.slots().insert(conbar, sigc::mem_fun1(a, &A::foo));
+#else
+ cona = sig.connect(sigc::mem_fun1(a, &A::foo));
+#endif
result_stream << "sig is connected to foo, A::foo, bar (size=" << sig.size() << "): ";
sig(3);
+#ifndef SIGCXX_DISABLE_DEPRECATED
util->check_result(result_stream,
"sig is connected to foo, A::foo, bar (size=3): foo(3) A::foo(3) bar(3) ");
+#else
+ util->check_result(result_stream,
+ "sig is connected to foo, A::foo, bar (size=3): foo(3) bar(3) A::foo(3) ");
+#endif
conbar->disconnect(); // manual disconnection
result_stream << "sig is connected to foo, A::foo (size=" << sig.size() << "): ";
@@ -128,7 +143,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 +154,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 +166,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_exception_catch.cc b/tests/test_exception_catch.cc
index f8f6e02e..7fd41fa2 100644
--- a/tests/test_exception_catch.cc
+++ b/tests/test_exception_catch.cc
@@ -1,4 +1,3 @@
-// -*- c++ -*-
/* Copyright 2002, The libsigc++ Development Team
* Assigned to public domain. Use as you wish without restriction.
*/
@@ -54,7 +53,7 @@ struct my_catch
{
throw;
}
- catch (std::range_error e) // catch what types we know
+ catch (const std::range_error& e) // catch what types we know
{
result_stream << "caught " << e.what();
}
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..3f56ded5 100644
--- a/tests/test_limit_reference.cc
+++ b/tests/test_limit_reference.cc
@@ -40,17 +40,17 @@ 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()");
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_mem_fun.cc b/tests/test_mem_fun.cc
index 32e568bf..403abba9 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,146 @@ 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
+}
+
+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[])
+{
+ 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();
+
+ test_auto_disconnect();
+
return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/test_retype.cc b/tests/test_retype.cc
index 848731f5..95de57c2 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,86 @@ 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");
+}
+
+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[])
+{
+ 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();
+
+ test_std_function_style_syntax();
return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/test_signal.cc b/tests/test_signal.cc
index 163eb113..801e0bda 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,27 +38,41 @@ 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, "");
+}
+
+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 << ") ";
+ return 1;
+}
+
+void test_auto_disconnection()
+{
+ // signal
+ sigc::signal sig;
// connect some slots before emitting & test auto-disconnection
{
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();
@@ -73,22 +83,87 @@ 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");
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");
+}
+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) ");
+}
+
+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) ");
+}
+
+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[])
+{
+ 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_simple();
+ test_auto_disconnection();
+ 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;
}
diff --git a/tests/test_slot.cc b/tests/test_slot.cc
index 07b35806..40e55dc9 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,49 +38,85 @@ class foo
}
};
-} // end anonymous namespace
-
-int main(int argc, char* argv[])
+void test_simple()
{
- auto util = TestUtilities::get_instance();
+ // simple test
+ sigc::slot s1 = foo();
+ s1(1);
+ util->check_result(result_stream, "foo(int 1)");
- if (!util->check_command_args(argc, argv))
- return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
+ s1 = foo();
+ s1(2);
+ util->check_result(result_stream, "foo(int 2)");
+}
+void test_std_function_style_syntax()
+{
// simple test
- sigc::slot s1 = foo();
+ 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
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_std_function_style_syntax();
+ test_implicit_conversion();
+ test_reference();
+ test_operator_equals();
+ test_copy_ctor();
return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/tests/test_track_obj.cc b/tests/test_track_obj.cc
index a6ce6edf..6c1fa249 100644
--- a/tests/test_track_obj.cc
+++ b/tests/test_track_obj.cc
@@ -21,8 +21,8 @@
// - Show that a slot with a C++11 lambda expression can be automatically
// disconnected when an object derived from sigc::trackable is deleted,
// provided sigc::track_obj() is used.
-// It's shown here as a preparation for deprecating and eventually
-// deleting the libsigc++ lambda expressions.
+// It shows that C++11 lambda expressions can replace the libsigc++ lambda
+// expressions, which have been removed.
// See https://bugzilla.gnome.org/show_bug.cgi?id=672555
// - Test the code example in the documentation in sigc++/adaptors/track_obj.h.
//
@@ -72,7 +72,8 @@ class Functor1 : public sigc::functor_base
return (i<0) ? "negative" : ((i>0) ? "positive" : "zero");
}
-private:
+protected:
+ // Don't make it private. clang++ does not like unused private data.
const bar_group4& bar_;
};
@@ -92,8 +93,10 @@ class Functor2 : public sigc::functor_base
return result;
}
-private:
+protected:
+ // Don't make it private. clang++ does not like unused private data.
const bar_group4& bar_;
+private:
const book& aBook_;
};
@@ -202,10 +205,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_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");
diff --git a/tools/gcc_template_specialization_operator_overload.cc b/tools/gcc_template_specialization_operator_overload.cc
new file mode 100644
index 00000000..81ab8602
--- /dev/null
+++ b/tools/gcc_template_specialization_operator_overload.cc
@@ -0,0 +1,37 @@
+// Configuration-time test program, used in Meson build.
+// Corresponds to the M4 macro SIGC_CXX_GCC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD.
+
+#include
+
+class Thing
+{
+ public:
+ Thing()
+ {}
+
+ template
+ void operator()(T a, T b)
+ {
+ T c = a + b;
+ std::cout << c << std::endl;
+ }
+};
+
+template
+class OtherThing
+{
+public:
+ void do_something()
+ {
+ Thing thing_;
+ thing_.template operator()(1, 2);
+ //This fails with or without the template keyword, on SUN Forte C++ 5.3, 5.4, and 5.5:
+ }
+};
+
+int main()
+{
+ OtherThing thing;
+ thing.do_something();
+ return 0;
+}
diff --git a/tools/handle-built-files.py b/tools/handle-built-files.py
new file mode 100755
index 00000000..eab3a46a
--- /dev/null
+++ b/tools/handle-built-files.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python3
+
+# External command, intended to be called with run_command(), custom_target(),
+# meson.add_install_script() and meson.add_dist_script().
+
+# argv[1] argv[2:]
+# handle-built-files.py ...
+
+import os
+import sys
+import shutil
+import subprocess
+from pathlib import Path
+
+subcommand = sys.argv[1]
+
+# Invoked from custom_target() in meson.build.
+def build_from_m4():
+ # argv[2] argv[3] argv[4]
+ #
+
+ include_dir = sys.argv[2]
+ input_file = sys.argv[3]
+ output_file = sys.argv[4]
+
+ # Create the destination directory, if it does not exist.
+ output_dir = os.path.dirname(output_file)
+ os.makedirs(output_dir, exist_ok=True)
+
+ cmd = [
+ 'm4',
+ '-I', include_dir,
+ input_file,
+ ]
+ with open(output_file, mode='w') as output_file_obj:
+ return subprocess.run(cmd, stdout=output_file_obj).returncode
+
+# Invoked from meson.add_install_script().
+def install_built_h_files():
+ # argv[2] argv[3] argv[4:]
+ # ...
+
+ # is an absolute path in the build directory or source directory.
+ # is an installation directory, relative to {prefix}.
+ built_h_dir = sys.argv[2]
+ install_dir_root = os.path.join(os.getenv('MESON_INSTALL_DESTDIR_PREFIX'), sys.argv[3])
+
+ quiet = bool(os.getenv('MESON_INSTALL_QUIET'))
+ for file in sys.argv[4:]:
+ path_h = os.path.join(built_h_dir, file)
+ rel_dir = os.path.dirname(file)
+ if rel_dir:
+ install_dir = os.path.join(install_dir_root, rel_dir)
+ else:
+ install_dir = install_dir_root
+ if not quiet:
+ print('Installing ', path_h, ' to ', install_dir)
+
+ # Create the installation directory, if it does not exist.
+ os.makedirs(install_dir, exist_ok=True)
+
+ # shutil.copy2() copies timestamps and some other file metadata.
+ shutil.copy2(path_h, install_dir)
+ return 0
+
+# Invoked from meson.add_dist_script().
+def dist_built_files(is_msvc_files=False):
+ # argv[2] argv[3] argv[4:]
+ # ...
+
+ # is an absolute path in the build directory or source directory.
+ # is a distribution directory, relative to MESON_PROJECT_DIST_ROOT.
+
+ # MESON_PROJECT_DIST_ROOT is set only if meson.version() >= 0.58.0.
+ project_dist_root = os.getenv('MESON_PROJECT_DIST_ROOT', os.getenv('MESON_DIST_ROOT'))
+ built_h_cc_dir = sys.argv[2]
+ dist_dir_root = os.path.join(project_dist_root, sys.argv[3])
+ dist_dir = dist_dir_root
+
+ # Distribute .h and .cc files built from .m4 files, or generated MSVC files.
+ for file in sys.argv[4:]:
+ if not is_msvc_files:
+ dist_dir = os.path.join(dist_dir_root, os.path.dirname(file))
+
+ # Create the distribution directory, if it does not exist.
+ os.makedirs(dist_dir, exist_ok=True)
+
+ shutil.copy(os.path.join(built_h_cc_dir, file), dist_dir)
+ return 0
+
+# Invoked from run_command() in meson.build.
+def copy_built_files():
+ # argv[2] argv[3] argv[4:]
+ #