Edouard LEFIZELIER 2 سال پیش
والد
کامیت
0df39645df
97فایلهای تغییر یافته به همراه5739 افزوده شده و 2914 حذف شده
  1. 1 12
      .gitignore
  2. 12 5
      ChangeLog
  3. 293 36
      Makefile.am
  4. 14 0
      NEWS
  5. 532 221
      configure.ac
  6. 0 20
      contrib/autotools-patches/0003-Pass-various-flags-to-GCC.patch
  7. 0 30
      contrib/autotools-patches/0003-Pass-various-runtime-library-flags-to-GCC.mingw-mod.patch
  8. 0 443
      contrib/autotools-patches/0009-libtool-2.4.2.418-msysize-mod.patch
  9. 0 38
      contrib/autotools-patches/apply-all.sh
  10. 53 0
      contrib/fixes-autoconf/apply-all.sh
  11. 565 0
      contrib/fixes-autoconf/c_backported.m4
  12. 31 0
      contrib/fixes-libtool/0003-Pass-various-runtime-library-flags-to-GCC.mingw.mod.patch
  13. 5 5
      contrib/fixes-libtool/0006-Fix-strict-ansi-vs-posix.patch
  14. 1403 0
      contrib/fixes-libtool/0009-libtool-2.4.2.418-msysize.patch
  15. 12 0
      contrib/fixes-libtool/0010-libtool-2.4.2-include-process-h.patch
  16. 0 0
      contrib/fixes-libtool/0011-Pick-up-clang_rt-static-archives-compiler-internal-l.patch
  17. 3 3
      contrib/fixes-libtool/0012-Prefer-response-files-over-linker-scripts-for-mingw-.patch
  18. 3 3
      contrib/fixes-libtool/0013-Allow-statically-linking-compiler-support-libraries-.patch
  19. 3 3
      contrib/fixes-libtool/0014-Support-llvm-objdump-f-output.patch
  20. 65 0
      contrib/fixes-libtool/apply-all.sh
  21. 96 0
      contrib/make-dist.sh
  22. 1 0
      m4/.gitignore
  23. 124 0
      m4/ax_check_openssl.m4
  24. 7 4
      m4/libcurl.m4
  25. 63 38
      m4/mhd_check_func.m4
  26. 53 0
      m4/mhd_check_func_gettimeofday.m4
  27. 4 4
      m4/mhd_check_link_run.m4
  28. 142 0
      m4/mhd_find_lib.m4
  29. 4 6
      m4/mhd_shutdown_socket_trigger.m4
  30. 0 66
      m4/search_h.m4
  31. 0 64
      m4/tsearch.m4
  32. 4 0
      po/.gitignore
  33. 1 0
      po/ABOUT-NLS
  34. 2 13
      po/Makefile.in.in
  35. 31 0
      po/Makevars
  36. 82 0
      po/Makevars.template
  37. 3 3
      po/build-aux/config.rpath
  38. 15 15
      po/m4/gettext.m4
  39. 7 4
      po/m4/host-cpu-c-abi.m4
  40. 3 3
      po/m4/lib-ld.m4
  41. 4 4
      po/m4/lib-link.m4
  42. 3 3
      po/m4/lib-prefix.m4
  43. 8 4
      po/m4/po.m4
  44. 20 8
      po/po-configure.ac.in
  45. 113 71
      src/include/autoinit_funcs.h
  46. 55 55
      src/include/microhttpd.h
  47. 1 1
      src/lib/Makefile.am
  48. 5 5
      src/microhttpd/Makefile.am
  49. 22 9
      src/microhttpd/connection.c
  50. 30 0
      src/microhttpd/connection_https_openssl.c
  51. 20 4
      src/microhttpd/connection_https_openssl.h
  52. 18 5
      src/microhttpd/daemon.c
  53. 9 0
      src/microhttpd/internal.h
  54. 11 6
      src/microhttpd/md5_ext.c
  55. 2 5
      src/microhttpd/md5_ext.h
  56. 119 5
      src/microhttpd/memorypool.c
  57. 18 0
      src/microhttpd/memorypool.h
  58. 1 1
      src/microhttpd/postprocessor.c
  59. 63 43
      src/microhttpd/response.c
  60. 8 2
      src/microhttpd/sha256_ext.c
  61. 90 0
      src/microhttpd/tls_plugin.h
  62. 36 50
      src/microhttpd/tsearch.c
  63. 11 20
      src/microhttpd/tsearch.h
  64. 1 34
      w32/VS-Any-Version/hellobrowser.vcxproj
  65. 1 34
      w32/VS-Any-Version/largepost.vcxproj
  66. 144 72
      w32/VS-Any-Version/libmicrohttpd.sln
  67. 1 34
      w32/VS-Any-Version/libmicrohttpd.vcxproj
  68. 1 34
      w32/VS-Any-Version/simplepost.vcxproj
  69. 1 34
      w32/VS2013/hellobrowser.vcxproj
  70. 1 34
      w32/VS2013/largepost.vcxproj
  71. 281 145
      w32/VS2013/libmicrohttpd.sln
  72. 2 66
      w32/VS2013/libmicrohttpd.vcxproj
  73. 1 34
      w32/VS2013/simplepost.vcxproj
  74. 1 34
      w32/VS2015/hellobrowser.vcxproj
  75. 1 34
      w32/VS2015/largepost.vcxproj
  76. 281 145
      w32/VS2015/libmicrohttpd.sln
  77. 2 66
      w32/VS2015/libmicrohttpd.vcxproj
  78. 1 34
      w32/VS2015/simplepost.vcxproj
  79. 1 34
      w32/VS2017/hellobrowser.vcxproj
  80. 1 34
      w32/VS2017/largepost.vcxproj
  81. 281 145
      w32/VS2017/libmicrohttpd.sln
  82. 2 66
      w32/VS2017/libmicrohttpd.vcxproj
  83. 1 34
      w32/VS2017/simplepost.vcxproj
  84. 1 34
      w32/VS2019/hellobrowser.vcxproj
  85. 1 34
      w32/VS2019/largepost.vcxproj
  86. 144 72
      w32/VS2019/libmicrohttpd.sln
  87. 1 34
      w32/VS2019/libmicrohttpd.vcxproj
  88. 1 34
      w32/VS2019/simplepost.vcxproj
  89. 1 34
      w32/VS2022/hellobrowser.vcxproj
  90. 1 34
      w32/VS2022/largepost.vcxproj
  91. 144 72
      w32/VS2022/libmicrohttpd.sln
  92. 1 34
      w32/VS2022/libmicrohttpd.vcxproj
  93. 1 34
      w32/VS2022/simplepost.vcxproj
  94. 26 11
      w32/common/common-build-settings.vcxproj
  95. 1 0
      w32/common/libmicrohttpd-build-settings.vcxproj
  96. 37 0
      w32/common/project-configs-xp.vcxproj
  97. 69 0
      w32/common/project-configs.vcxproj

+ 1 - 12
.gitignore

@@ -13,17 +13,7 @@ Makefile
 /config.log
 /app.info
 /debug
-/build-aux/texinfo.tex
-/build-aux/config.sub
-/build-aux/depcomp
-/build-aux/install-sh
-/build-aux/ltmain.sh
-/build-aux/mdate-sh
-/build-aux/test-driver
-/build-aux/config.guess
-/build-aux/config.rpath
-/build-aux/compile
-/build-aux/missing
+/build-aux/*
 /exclude
 /autom4te.cache
 /scripts
@@ -43,7 +33,6 @@ Makefile
 /.settings
 /.vs
 po/configure.acT
-po/Makevars.template
 po/POTFILES
 po/configargs.stamp
 **~

+ 12 - 5
ChangeLog

@@ -1,3 +1,10 @@
+Web 29 Mar 2023 20:56:00 CEST
+    Bumped version as the hotfix was released based on the separate branch. -EG
+
+Sun Feb 26 05:49:30 PM CET 2023
+    Fix potential DoS vector in MHD_PostProcessor discovered
+    by Gynvael Coldwind and Dejan Alvadzijevic (CVE-2023-27371). -CG
+
 Sun 26 Dec 2021 20:30:00 MSK
     Releasing GNU libmicrohttpd 0.9.75 -EG
 
@@ -23,7 +30,7 @@ December 2021
     Some code improvements for new test test_client_put_stop.
     Added special log message if thread creation failed due to system limits.
     Fully restructured new_connection_process_() to correctly handle errors,
-    fixed missing decrement of number of daemon connections if any error 
+    fixed missing decrement of number of daemon connections if any error
     encountered, fixed app notification of connection termination when app has
     not been notified about connection start, fixed (highly unlikely) reset of
     the list of connections if reached daemon's connections limit.
@@ -67,7 +74,7 @@ November 2021
     for testing of MHD.
     Renamed 'early_response' connection flag to 'discard_request' and reworked
     handling of connection's flags.
-    Clarified request termination reasons doxy, fixed reporting of 
+    Clarified request termination reasons doxy, fixed reporting of
     MHD_REQUEST_TERMINATED_READ_ERROR (previously this code was not really used
     in reporting).
     Enforce all libcurl tests exit code to be zero or one.
@@ -76,7 +83,7 @@ November 2021
     of the last LF in termination chunk, handle correctly chunk sizes with more
     than 16 digits (leading zeros are valid according to HTTP RFC), fixed
     handling of CRCR, LFCR, LFLF, and bare CR as single line delimiters, report
-    error when invalid chunk format is received without waiting to receive 
+    error when invalid chunk format is received without waiting to receive
     (possibly missing) end of the line, reply to the client with special error
     if chunk size is too large to be handled by MHD (>16 EiB).
     Added error reply if client used too large request payload (>16 EiB).
@@ -92,7 +99,7 @@ October 2021
     Added test family test_toolarge to check correct handling of the buffers
     when the size of data is larger than free space.
     Fixed missing updated of read and write buffers sizes.
-    Added detection and use of supported "noreturn" keyword for function 
+    Added detection and use of supported "noreturn" keyword for function
     declaration. It should help compiler and static analyser.
     Added support for leak sanitizer.
     Fixed analyser errors on W32.
@@ -290,7 +297,7 @@ June 2021
     used for the next request data.
     Fixed completely broken calculation of request header size.
     Chunked response: do not ask app callback for more data then
-    it is possible to process (more than 16 MBytes). 
+    it is possible to process (more than 16 MBytes).
     Check and report if app used wrong response code (>999 or <100)
     Refuse to add second "Transfer-Encoding" header.
     HTTPS tests: check whether all libcurl function succeeded.

+ 293 - 36
Makefile.am

@@ -48,7 +48,7 @@ pkgconfig_DATA = libmicrohttpd.pc
 EXTRA_DIST += pre-dist-hook-dummy
 MOSTLYCLEANFILES = pre-dist-hook-dummy
 DISTCLEANFILES = 
-MAINTAINERCLEANFILES = 
+MAINTAINERCLEANFILES = m4/c_backported.m4
 
 pre-dist-hook-dummy: pre-dist-hook Makefile
 	@echo "dummy" > $@
@@ -57,6 +57,15 @@ dist-hook: dist-po
 	@chmod u+w '$(distdir)/pre-dist-hook-dummy' && \
 	  rm -f '$(distdir)/pre-dist-hook-dummy'
 	@rm -f pre-dist-hook-dummy
+	@if test -w '$(distdir)/m4/c_backported.m4'; then \
+	  echo "Use empty m4/c_backported.m4 for dist target"; \
+	  touch -r '$(distdir)/m4/c_backported.m4' '$(distdir)/m4/c_backported.m4-tmst' && \
+	    echo '# Not used for distribution' > '$(distdir)/m4/c_backported.m4' && \
+	    touch -r '$(distdir)/m4/c_backported.m4-tmst' '$(distdir)/m4/c_backported.m4' && \
+	    rm -f '$(distdir)/m4/c_backported.m4-tmst'; \
+	else \
+	  true; \
+	fi
 
 pre-dist-hook: pre-dist-hook-doc
 	@echo "Preparing to make dist"
@@ -71,37 +80,73 @@ pre-dist-hook-doc:
 
 .PHONY: pre-dist-hook pre-dist-hook-doc
 
+# Works with old automake versions (<1.12.2) as "false"
+MHD_V = $(AM_V_P) false
+
 distclean-local: distclean-po
 
 maintainer-clean-local: maintainer-clean-po
 
-PO_ACLOCAL_M4 = $(top_srcdir)/po/aclocal.m4
+srcdir_po = $(top_srcdir)/po
+
+PO_ACLOCAL_M4 = $(srcdir_po)/aclocal.m4
+
+PO_MAIN_FILES = $(srcdir_po)/Makefile.in.in $(srcdir_po)/remove-potcdate.sin \
+  $(srcdir_po)/quot.sed $(srcdir_po)/boldquot.sed \
+  $(srcdir_po)/[email protected] $(srcdir_po)/[email protected] \
+  $(srcdir_po)/insert-header.sin $(srcdir_po)/Rules-quot
+
+PO_EXTRA_FILES = $(srcdir_po)/Makevars.template
+
+PO_ROOT_FILES = $(srcdir_po)/ABOUT-NLS
+
+PO_M4_FILES = $(srcdir_po)/m4/gettext.m4 $(srcdir_po)/m4/host-cpu-c-abi.m4 \
+  $(srcdir_po)/m4/iconv.m4 $(srcdir_po)/m4/intlmacosx.m4 \
+  $(srcdir_po)/m4/lib-ld.m4 $(srcdir_po)/m4/lib-link.m4 \
+  $(srcdir_po)/m4/lib-prefix.m4 $(srcdir_po)/m4/nls.m4 \
+  $(srcdir_po)/m4/po.m4 $(srcdir_po)/m4/progtest.m4
 
-PO_M4_FILES = $(top_srcdir)/po/m4/gettext.m4 $(top_srcdir)/po/m4/host-cpu-c-abi.m4 \
-  $(top_srcdir)/po/m4/iconv.m4 $(top_srcdir)/po/m4/intlmacosx.m4 \
-  $(top_srcdir)/po/m4/lib-ld.m4 $(top_srcdir)/po/m4/lib-link.m4 \
-  $(top_srcdir)/po/m4/lib-prefix.m4 $(top_srcdir)/po/m4/nls.m4 \
-  $(top_srcdir)/po/m4/po.m4 $(top_srcdir)/po/m4/progtest.m4
+PO_AUX_FILES = $(srcdir_po)/$(MHD_AUX_DIR)/config.rpath
 
-am__po_aclocal_m4_deps = $(PO_M4_FILES) $(top_srcdir)/po/configure.ac
+# All autopoint-created files
+PO_ALL_FILES = $(PO_MAIN_FILES) $(PO_EXTRA_FILES) $(PO_ROOT_FILES) \
+  $(PO_M4_FILES) $(PO_AUX_FILES)
+
+am__po_aclocal_m4_deps = $(PO_M4_FILES) $(srcdir_po)/configure.ac
 am__po_configure_deps = $(am__po_aclocal_m4_deps) $(PO_ACLOCAL_M4)
 
 $(PO_ACLOCAL_M4): $(am__po_aclocal_m4_deps)
-	@echo "Building $@"
-	$(am__cd) '$(top_srcdir)/po' && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+	@{ $(MHD_V) && echo "Building $@" ; } || true
+	@echo "cd $(srcdir_po) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)" && \
+	  $(am__cd) '$(srcdir_po)' && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 
 # Do update po/configure.ac only if template files updated
-$(top_srcdir)/po/configure.ac: $(top_srcdir)/po/po-configure.ac.in $(top_srcdir)/configure.ac
-	@echo "Building $@"
-	@$(am__cd) '$(top_builddir)' && $(MAKE) $(AM_MAKEFLAGS) po/po-configure.ac
-	@rm -f '$@' && cp -f po/po-configure.ac '$@'
+$(srcdir_po)/configure.ac: $(srcdir_po)/po-configure.ac.in $(top_srcdir)/configure.ac
+	@{ $(MHD_V) && echo "Building $@" ; } || true
+	@$(MAKE) $(AM_MAKEFLAGS) po/po-configure.ac
+	@cp -f po/po-configure.ac '$@'
+
+$(top_srcdir)/po-configure: $(srcdir_po)/configure.ac $(PO_ACLOCAL_M4) $(PO_AUX_FILES) $(srcdir_po)/$(MHD_AUX_DIR)/install-sh
+	@{ $(MHD_V) && echo "Building $@" ; } || true
+	@echo "cd $(srcdir_po) && $(AUTOCONF)" && \
+	  ( $(am__cd) '$(srcdir_po)' && $(AUTOCONF) )
+	mv -f '$(srcdir_po)/configure' '$@'
+	-chmod a-x '$@'
+
+EXTRA_DIST += $(top_srcdir)/$(MHD_AUX_DIR)/config.rpath $(srcdir_po)/$(MHD_AUX_DIR)/install-sh \
+  $(PO_ALL_FILES) \
+  $(PO_ACLOCAL_M4) \
+  $(srcdir_po)/po-configure.ac.in $(srcdir_po)/configure.ac \
+  $(top_srcdir)/po-configure \
+  $(srcdir_po)/stamp-m.in
+
+DISTCLEANFILES += config.main.log po-config.log po/stamp-m
+MAINTAINERCLEANFILES += $(srcdir_po)/configure.ac
 
-$(top_srcdir)/po-configure: $(top_srcdir)/po/configure.ac $(PO_ACLOCAL_M4)
-	@echo "Building $@"
-	@$(am__cd) '$(top_srcdir)/po' && $(AUTOCONF)
-	@mv -f '$(top_srcdir)/po/configure' '$@'
+$(srcdir_po)/stamp-m.in:
+	@: > '$@'
 
-po-config.status: $(top_srcdir)/po-configure
+po-config.status: $(top_srcdir)/po-configure $(top_srcdir)/$(MHD_AUX_DIR)/install-sh $(top_srcdir)/$(MHD_AUX_DIR)/config.rpath
 	@if test -f config.log; then \
 	  mv -f config.log config.main.log; \
 	else \
@@ -115,40 +160,252 @@ po-config.status: $(top_srcdir)/po-configure
 	  true; \
 	fi
 
-po/Makefile: $(top_srcdir)/po/Makefile.in.in $(top_srcdir)/po/Makevars $(top_builddir)/po-config.status $(top_srcdir)/po/POTFILES.in
-	@$(am__cd) $(top_builddir) \
-	  && @SHELL@ ./po-config.status po/Makefile.in po-directories
+po/Makefile: $(srcdir_po)/Makefile.in.in $(srcdir_po)/Makevars po-config.status $(srcdir_po)/POTFILES.in $(srcdir_po)/stamp-m.in
+	@: && @SHELL@ ./po-config.status po/stamp-m po/Makefile.in po-directories
 
-dist-po: po/Makefile
+dist-po: po/Makefile $(PO_MAIN_FILES)
 	@dir1="po"; dir2="$(distdir)/po"; \
 	$(am__relativize); \
 	rel_distsubdir=$$reldir; \
 	echo "cd po && $(MAKE) $(AM_MAKEFLAGS) distdir='$$rel_distsubdir' distdir" && \
 	$(am__cd) po && $(MAKE) $(AM_MAKEFLAGS) distdir="$$rel_distsubdir" distdir
 
-$(top_srcdir)/po/POTFILES.in: $(top_srcdir)/src/microhttpd/Makefile.am
-	@echo "cd src/microhttpd && $(MAKE) $(AM_MAKEFLAGS) update-po-POTFILES.in" && \
-	$(am__cd) src/microhttpd && $(MAKE) $(AM_MAKEFLAGS) update-po-POTFILES.in
+$(srcdir_po)/POTFILES.in: $(top_srcdir)/src/microhttpd/Makefile.am
+	@echo "cd $(top_builddir)/src/microhttpd && $(MAKE) $(AM_MAKEFLAGS) update-po-POTFILES.in" && \
+	$(am__cd) '$(top_builddir)/src/microhttpd' && $(MAKE) $(AM_MAKEFLAGS) update-po-POTFILES.in
+
+AUTOPOINT = autopoint
+AUTOPOINT_FLAGS = 
+
+APIM_LOCK_BASE = autopoint-updating-lock
+APIM_TMSTMP_BASE = autopoint-timestamp
+APIM_TMSTMP_TMP_BASE = $(APIM_TMSTMP_BASE)-tmp
+APIM_TRIGGER_BASE = autopoint-trigger
+APIM_LOCK = $(srcdir_po)/$(APIM_LOCK_BASE)
+APIM_TMSTMP = $(srcdir_po)/$(APIM_TMSTMP_BASE)
+APIM_TMSTMP_TMP = $(srcdir_po)/$(APIM_TMSTMP_TMP_BASE)
+APIM_TRIGGER = $(srcdir_po)/$(APIM_TRIGGER_BASE)
+# Run 'autopoint' even if no file missing
+FORCE_AUTOPOINT_CHECK = no
+
+LOCK_TIMEOUT_VALUE = 120
+
+EXTRA_DIST += $(APIM_TMSTMP) $(APIM_TRIGGER)
 
-EXTRA_DIST += $(am__po_configure_deps) $(top_srcdir)/po/po-configure.ac.in $(top_srcdir)/po-configure
-DISTCLEANFILES += config.main.log po-config.log
+sleep_with_timeout = \
+    sleep 1; \
+    sec_waiting=`expr ${sec_waiting} + 1`; \
+    if test $${sec_waiting} -gt '$(LOCK_TIMEOUT_VALUE)'; then \
+        echo "Waiting timeout" 1>&2; \
+        rmdir "$${lock_name}" ; \
+        exit 1; \
+    fi
+
+wait_for_unlock = \
+    test -n "$${lock_name}" || lock_name='$(APIM_LOCK)'; \
+    if test -d "$${lock_name}"; then \
+        { $(MHD_V) && \
+            echo "Autopoint files are being updated in parallel thread, wait"; } || : ; \
+        sec_waiting=0; \
+        while test -d "$${lock_name}"; do \
+            $(sleep_with_timeout) ; \
+        done; \
+    fi
+
+apim_prepare = \
+    $(am__cd) '$(srcdir_po)' || exit 1; \
+    lock_name='$(APIM_LOCK_BASE)'; \
+    { trap "rm -rf $(APIM_TMSTMP_BASE) $(APIM_TMSTMP_TMP_BASE) $${lock_name} po" HUP ABRT INT TERM 2>/dev/null && \
+    trap "rm -rf $(APIM_TMSTMP_BASE) $(APIM_TMSTMP_TMP_BASE) $${lock_name} po" PIPE 2>/dev/null ; } || \
+    trap "rm -rf $(APIM_TMSTMP_BASE) $(APIM_TMSTMP_TMP_BASE) $${lock_name} po" 1 2 13 15; \
+    lock_held='false'; \
+    sec_waiting=0; \
+    while : ; do \
+        if mkdir "$${lock_name}" 2>/dev/null; then lock_held=':' ; else : ; fi; \
+        $${lock_held} && break || : ; \
+        test 'xyes' = 'x$(FORCE_AUTOPOINT_CHECK)' || break ; \
+        $(sleep_with_timeout) ; \
+    done; \
+    if $${lock_held} ; then \
+        rm -f '$(APIM_TMSTMP_BASE)' '$(APIM_TMSTMP_TMP_BASE)' || exit 1; \
+        echo 'timestamp' > '$(APIM_TMSTMP_TMP_BASE)' || exit 1; \
+        if test 'xyes' = 'x$(FORCE_AUTOPOINT_CHECK)'; then \
+            call_autopoint=':'; check_all='false'; \
+        else \
+            call_autopoint='false'; check_all=':'; \
+        fi; \
+        if $(MHD_V) ; then apim_echo='echo' ; else apim_echo=':'; fi ;\
+        $$apim_echo "Sync autopoint files"; \
+        files_missing='false'; \
+        $(MKDIR_P) 'po'; \
+        $(MKDIR_P) '$(MHD_AUX_DIR)'; \
+        main_f_names=`for f in $(PO_MAIN_FILES) $(PO_EXTRA_FILES); do echo "$$f"; done | $(SED) -e 's|^.*/||'`; \
+        root_f_names=`for f in $(PO_ROOT_FILES); do echo "$$f"; done | $(SED) -e 's|^.*/||'`; \
+        m4_f_names=`for f in $(PO_M4_FILES); do echo "$$f"; done | $(SED) -e 's|^.*/||'`; \
+        aux_f_names=`for f in $(PO_AUX_FILES); do echo "$$f"; done | $(SED) -e 's|^.*/||'`; \
+        for f in $${main_f_names}; do \
+            if test -f "$$f"; then \
+                 cp -f "$$f" "po/$$f" ; \
+            else \
+                $$apim_echo "Missing $(srcdir_po)/$$f" ; \
+                files_missing=':' ; \
+            fi; \
+        done; \
+        if $${check_all} ; then \
+            for f in $${root_f_names}; do \
+                if test -f "./$$f"; then : ; \
+                else \
+                    $$apim_echo "Missing $(srcdir_po)/$$f" ; \
+                    files_missing=':' ; \
+                fi; \
+            done; \
+            for f in $${m4_f_names}; do \
+                if test -f "m4/$$f"; then : ; \
+                else \
+                    $$apim_echo "Missing $(srcdir_po)/m4/$$f" ; \
+                    files_missing=':' ; \
+                fi; \
+            done; \
+            for f in $${aux_f_names}; do \
+                if test -f "$(MHD_AUX_DIR)/$$f"; then : ;\
+                else \
+                    $$apim_echo "Missing $(srcdir_po)/$(MHD_AUX_DIR)/$$f" ; \
+                    files_missing=':' ; \
+                fi; \
+            done; \
+        fi; \
+        if $${files_missing} ; then \
+            call_autopoint=':' ; \
+            $$apim_echo "Some files are missing, call autopoint to restore them" ; \
+        elif $${call_autopoint}; then $$apim_echo "Check and update autopoint files" ; \
+        fi; \
+        rc_code=0; \
+        if $${call_autopoint} ; then \
+            echo '  cd $(srcdir_po) && $(AUTOPOINT) $(AUTOPOINT_FLAGS)'; \
+            '$(AUTOPOINT)' $(AUTOPOINT_FLAGS) || rc_code=1; \
+        fi; \
+        if test "$${rc_code}" = "0"; then \
+            $$apim_echo "Re-sync autopoint files back"; \
+            for f in $${aux_f_names}; do \
+                if test -f "$(MHD_AUX_DIR)/$$f"; then \
+                    touch -f "$(MHD_AUX_DIR)/$$f" && \
+                    cp -f "$(MHD_AUX_DIR)/$$f" "../$(MHD_AUX_DIR)/$$f"; \
+                else \
+                    $$apim_echo "Still missing $(srcdir_po)/$(MHD_AUX_DIR)/$$f" 1>&2 ; \
+                    rc_code=1; \
+                fi; \
+            done; \
+            for f in $${m4_f_names}; do \
+                if test -f "m4/$$f"; then \
+                    touch "m4/$$f"; \
+                else \
+                    $$apim_echo "Still missing $(srcdir_po)/m4/$$f" 1>&2 ; \
+                    rc_code=1; \
+                fi; \
+            done; \
+            for f in $${root_f_names}; do \
+                if test -f "./$$f"; then \
+                    touch "./$$f"; \
+                else \
+                    $$apim_echo "Still missing $(srcdir_po)/$$f" 1>&2 ; \
+                    rc_code=1; \
+                fi; \
+            done; \
+            for f in $${main_f_names}; do \
+                if test -f "po/$$f"; then \
+                    cp -f "po/$$f" "$$f"; \
+                else \
+                    $$apim_echo "Still missing $(srcdir_po)/$$f" 1>&2 ; \
+                    rc_code=1; \
+                fi; \
+            done; \
+        fi; \
+        if test $${rc_code} = 0; then \
+            cp -fp '$(APIM_TMSTMP_TMP_BASE)' '$(APIM_TMSTMP_BASE)' ; \
+            touch -r '$(APIM_TMSTMP_TMP_BASE)' '$(APIM_TMSTMP_BASE)' ; \
+            $$apim_echo "All autopoint files have been synced"; \
+            rm -f '$(APIM_TMSTMP_TMP_BASE)'; \
+        else \
+            rm -f '$(APIM_TMSTMP_BASE)' '$(APIM_TMSTMP_TMP_BASE)'; \
+        fi; \
+        rm -fr 'po'; \
+        rmdir "$${lock_name}"; \
+        exit $${rc_code} ; \
+    else \
+        $(wait_for_unlock) ; \
+        test -f '$(APIM_TMSTMP_BASE)' || exit 1; \
+    fi; \
+    :
+
+mostlyclean-local: mostlyclean-autopoint-update
+mostlyclean-autopoint-update:
+	-test -d '$(APIM_LOCK)' && rm -rf '$(APIM_LOCK)'
+	-test -d '$(srcdir_po)/po' && rm -rf '$(srcdir_po)/po'
+	rm -f '$(APIM_TMSTMP_TMP)'
+
+$(APIM_TRIGGER):
+	@echo "autopoint files rebuild trigger" > "$@"
+
+$(APIM_TMSTMP): $(srcdir_po)/configure.ac $(APIM_TRIGGER)
+	@ $(apim_prepare)
+
+.DELETE_ON_ERROR: $(APIM_TMSTMP)
+
+$(PO_ALL_FILES): $(APIM_TMSTMP) $(srcdir_po)/configure.ac
+	@ ( $(apim_prepare) )
+	@test -f '$@'
+
+prepare-autopoint: $(srcdir_po)/configure.ac
+	@ ( $(apim_prepare) )
+	@test -f '$(APIM_TMSTMP)'
+
+check-prepare-autopoint: $(srcdir_po)/$(MHD_AUX_DIR)/install-sh $(APIM_TMSTMP)
+	@echo "Check all autopoint files"; \
+	    files_missing='false'; \
+	    for f in $(PO_ALL_FILES); do \
+	        if test -f "$$f"; then : ; \
+	        else \
+	            echo "Missing $$f" ; \
+	            files_missing=':' ; \
+	        fi; \
+	    done; \
+	    if $${files_missing}; then \
+	        $(MAKE) $(AM_MAKEFLAGS) prepare-autopoint || exit 1; \
+	    else \
+	        exit 0; \
+	    fi
+
+# This could be used to update autopoint files for git or for 'dist' target
+update-autopoint-force:
+	$(MAKE) $(AM_MAKEFLAGS) 'FORCE_AUTOPOINT_CHECK=yes' 'AUTOPOINT_FLAGS=$(AUTOPOINT_FLAGS) -f' prepare-autopoint
+
+autopoint-files-all: $(APIM_TRIGGER) $(APIM_TMSTMP) $(PO_MAIN_FILES) $(PO_EXTRA_FILES) $(PO_M4_FILES) $(PO_AUX_FILES) $(srcdir_po)/$(MHD_AUX_DIR)/install-sh
+
+$(top_srcdir)/$(MHD_AUX_DIR)/config.rpath: $(srcdir_po)/$(MHD_AUX_DIR)/config.rpath
+	cp -f '$(srcdir_po)/$(MHD_AUX_DIR)/config.rpath' '$@'
+
+$(srcdir_po)/$(MHD_AUX_DIR)/install-sh: $(top_srcdir)/$(MHD_AUX_DIR)/install-sh
+	$(MKDIR_P) '$(srcdir_po)/$(MHD_AUX_DIR)'
+	cp -f '$(top_srcdir)/$(MHD_AUX_DIR)/install-sh' '$@'
+
+.PHONY: mostlyclean-autopoint-update prepare-autopoint update-autopoint-force check-prepare-autopoint autopoint-files-all
 
 distclean-po:
-	@if test -f po/Makefile; then \
-	  $(am__cd) po && $(MAKE) $(AM_MAKEFLAGS) distclean; \
+	@( if test -f po/Makefile; then \
+	   $(am__cd) po && $(MAKE) $(AM_MAKEFLAGS) distclean; \
 	else \
 	  true; \
-	fi
-	-rm -f po-config.status po/Makefile
+	fi )
+	-rm -f po-config.status po/Makefile po/stamp-m
 	-rm -f po/POTFILES po/remove-potcdate.sed po/Makefile.in
 
 maintainer-clean-po:
-	@if test -f po/Makefile; then \
+	@( if test -f po/Makefile; then \
 	  $(am__cd) po && $(MAKE) $(AM_MAKEFLAGS) maintainer-clean; \
 	else \
 	  true; \
-	fi
-	-rm -f po/$(PACKAGE_TARNAME).pot po/stamp-po
-	-rm -rf $(top_srcdir)/po/autom4te.cache
+	fi )
+	-rm -f po/$(PACKAGE_TARNAME).pot
+	-rm -rf $(srcdir_po)/autom4te.cache
 
 .PHONY: distclean-po maintainer-clean-po

+ 14 - 0
NEWS

@@ -1,3 +1,17 @@
+Sun 26 Feb 2023 17:49:30 CET
+Released GNU libmicrohttpd 0.9.76 hotfix. -CG
+
+    This is a hotfix release.
+    This only change since previous release is fixed potential DoS vector
+    in MHD_PostProcessor discovered by Gynvael Coldwind and Dejan
+    Alvadzijevic (CVE-2023-27371).
+    While the researchers have not been able to exploit this attack vector
+    when libmicrohttpd is compiled with the standard GNU C library, it is
+    recommended that you update MHD as soon as possible if your
+    applications are using (optional) MHD_PostProcessor functionality.
+
+    -- Evgeny Grin (Karlson2k)
+
 Sun 26 Dec 2021 20:30:00 MSK
 Released GNU libmicrohttpd 0.9.75 -EG
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 532 - 221
configure.ac


+ 0 - 20
contrib/autotools-patches/0003-Pass-various-flags-to-GCC.patch

@@ -1,20 +0,0 @@
-diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
-index 21e5e078..ddd6e36f 100755
---- a/build-aux/ltmain.sh
-+++ b/build-aux/ltmain.sh
-@@ -7369,11 +7369,14 @@ func_mode_link ()
-       # -fsanitize=*         Clang/GCC memory and address sanitizer
-       # -fuse-ld=*           Linker select flags for GCC
-       # -static-*            direct GCC to link specific libraries statically
-+      # -shared-*            direct GCC to link shared version of specific libraries
-       # -fcilkplus           Cilk Plus language extension features for C/C++
-       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-       -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
--      -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus)
-+      -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-shared-*|-fcilkplus| \
-+      -ftree-parallelize-loops=*|-fgnu-tm|-ffast-math| \
-+      -funsafe-math-optimizations|-fvtable-verify*)
-         func_quote_for_eval "$arg"
- 	arg=$func_quote_for_eval_result
-         func_append compile_command " $arg"

+ 0 - 30
contrib/autotools-patches/0003-Pass-various-runtime-library-flags-to-GCC.mingw-mod.patch

@@ -1,30 +0,0 @@
-[PATCH 3/6] Pass various runtime library flags to GCC.
-* build-aux/ltmain.in (func_mode_link): Pass the
--shared-libgcc and -static-lib* flags along to GCC.
----
- build-aux/ltmain.sh |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
-
-diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
-index 1821779..eda7790 100644
---- a/build-aux/ltmain.sh
-+++ b/build-aux/ltmain.sh
-@@ -5084,9 +5084,14 @@ func_mode_link ()
-       # --sysroot=*          for sysroot support
-       # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
-       # -stdlib=*            select c++ std lib with clang
-+      # -{shared,static}-libgcc, -static-{libgfortran|libstdc++}
-+      #                      link against specified runtime library
-       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
--      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
-+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
-+      -ftree-parallelize-loops=*|-fcilkplus|-fgnu-tm|-ffast-math| \
-+      -funsafe-math-optimizations|-fvtable-verify*| \
-+      -shared-libgcc|-static-libgcc|-static-libgfortran|-static-libstdc++)
-         func_quote_for_eval "$arg"
- 	arg=$func_quote_for_eval_result
-         func_append compile_command " $arg"
--- 
-1.7.1
-

+ 0 - 443
contrib/autotools-patches/0009-libtool-2.4.2.418-msysize-mod.patch

@@ -1,443 +0,0 @@
-diff --git a/build-aux/config.guess b/build-aux/config.guess
-index f50dcdb6..cd89e459 100755
---- a/build-aux/config.guess
-+++ b/build-aux/config.guess
-@@ -883,6 +883,9 @@ EOF
-     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- 	echo x86_64-unknown-cygwin
- 	exit ;;
-+    amd64:MSYS*:*:* | x86_64:MSYS*:*:*)
-+	echo x86_64-unknown-msys
-+	exit ;;
-     prep*:SunOS:5.*:*)
- 	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- 	exit ;;
-diff -Naur libtool-2.4.2.418-orig/build-aux/ltmain.sh libtool-2.4.2.418/build-aux/ltmain.sh
---- libtool-2.4.2.418-orig/build-aux/ltmain.sh	2013-10-27 02:53:58.000000000 +0400
-+++ libtool-2.4.2.418/build-aux/ltmain.sh	2014-09-02 10:29:08.840800000 +0400
-@@ -2315,7 +2315,7 @@
-     case $host in
-       # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
-       # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
--      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
-+      *cygwin* | *msys* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
-         # don't eliminate duplications in $postdeps and $predeps
-         opt_duplicate_compiler_generated_deps=:
-         ;;
-@@ -3328,7 +3328,7 @@
- 
-     # On Cygwin there's no "real" PIC flag so we must build both object types
-     case $host_os in
--    cygwin* | mingw* | pw32* | os2* | cegcc*)
-+    cygwin* | msys* | mingw* | pw32* | os2* | cegcc*)
-       pic_mode=default
-       ;;
-     esac
-@@ -4201,7 +4201,7 @@
- 	      'exit $?'
- 	  tstripme=$stripme
- 	  case $host_os in
--	  cygwin* | mingw* | pw32* | cegcc*)
-+	  cygwin* | msys* | mingw* | pw32* | cegcc*)
- 	    case $realname in
- 	    *.dll.a)
- 	      tstripme=
-@@ -4307,7 +4307,7 @@
- 
- 	# Do a test to see if this is really a libtool program.
- 	case $host in
--	*cygwin* | *mingw*)
-+	*cygwin* | *msys* | *mingw*)
- 	    if func_ltwrapper_executable_p "$file"; then
- 	      func_ltwrapper_scriptname "$file"
- 	      wrapper=$func_ltwrapper_scriptname_result
-@@ -4382,7 +4382,7 @@
- 	# remove .exe since cygwin /usr/bin/install will append another
- 	# one anyway
- 	case $install_prog,$host in
--	*/usr/bin/install*,*cygwin*)
-+	*/usr/bin/install*,*cygwin* | */usr/bin/install*,*msys*)
- 	  case $file:$destfile in
- 	  *.exe:*.exe)
- 	    # this is ok
-@@ -4535,7 +4535,7 @@
- 	      $RM $export_symbols
- 	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
- 	      case $host in
--	      *cygwin* | *mingw* | *cegcc* )
-+	      *cygwin* | *msys* | *mingw* | *cegcc* )
-                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-                 eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
- 	        ;;
-@@ -4547,7 +4547,7 @@
- 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
- 	      eval '$MV "$nlist"T "$nlist"'
- 	      case $host in
--	        *cygwin* | *mingw* | *cegcc* )
-+	        *cygwin* | *msys* | *mingw* | *cegcc* )
- 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
- 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
- 	          ;;
-@@ -4561,7 +4561,7 @@
- 	  func_basename "$dlprefile"
- 	  name=$func_basename_result
-           case $host in
--	    *cygwin* | *mingw* | *cegcc* )
-+	    *cygwin* | *msys* | *mingw* | *cegcc* )
- 	      # if an import library, we need to obtain dlname
- 	      if func_win32_import_lib_p "$dlprefile"; then
- 	        func_tr_sh "$dlprefile"
-@@ -4736,7 +4736,7 @@
- 	# Transform the symbol file into the correct name.
- 	symfileobj=$output_objdir/${my_outputname}S.$objext
- 	case $host in
--	*cygwin* | *mingw* | *cegcc* )
-+	*cygwin* | *msys* | *mingw* | *cegcc* )
- 	  if test -f "$output_objdir/$my_outputname.def"; then
- 	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
- 	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-@@ -5629,7 +5629,7 @@
- 	{
- EOF
- 	    case $host in
--	      *mingw* | *cygwin* )
-+	      *mingw* | *cygwin* | *msys* )
- 		# make stdout use "unix" line endings
- 		echo "          setmode(1,_O_BINARY);"
- 		;;
-@@ -6350,7 +6350,7 @@
-     $debug_cmd
- 
-     case $host in
--    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-+    *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-       # It is impossible to link a dll without this setting, and
-       # we shouldn't force the makefile maintainer to figure out
-       # what system we are compiling for in order to pass an extra
-@@ -6843,7 +6843,7 @@
- 	  ;;
- 	esac
- 	case $host in
--	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-+	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
- 	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
- 	  case :$dllsearchpath: in
- 	  *":$dir:"*) ;;
-@@ -6863,7 +6863,7 @@
-       -l*)
- 	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
- 	  case $host in
--	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
-+	  *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
- 	    # These systems don't actually have a C or math library (as such)
- 	    continue
- 	    ;;
-@@ -6946,7 +6946,7 @@
- 
-       -no-install)
- 	case $host in
--	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
-+	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
- 	  # The PATH hackery in wrapper scripts is required on Windows
- 	  # and Darwin in order for the loader to find any dlls it needs.
- 	  func_warning "'-no-install' is ignored for $host"
-@@ -7812,7 +7812,7 @@
- 	  fi
- 	  case $host in
- 	    # special handling for platforms with PE-DLLs.
--	    *cygwin* | *mingw* | *cegcc* )
-+	    *cygwin* | *msys* | *mingw* | *cegcc* )
- 	      # Linker will automatically link against shared library if both
- 	      # static and shared are present.  Therefore, ensure we extract
- 	      # symbols from the import library if a shared library is present
-@@ -7956,7 +7956,7 @@
- 	if test -n "$library_names" &&
- 	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
- 	  case $host in
--	  *cygwin* | *mingw* | *cegcc* | *os2*)
-+	  *cygwin* | *msys* | *mingw* | *cegcc* | *os2*)
- 	      # No point in relinking DLLs because paths are not encoded
- 	      func_append notinst_deplibs " $lib"
- 	      need_relink=no
-@@ -8026,7 +8026,7 @@
- 	    elif test -n "$soname_spec"; then
- 	      # bleh windows
- 	      case $host in
--	      *cygwin* | mingw* | *cegcc* | *os2*)
-+	      *cygwin* | *msys* | mingw* | *cegcc* | *os2*)
- 	        func_arith $current - $age
- 		major=$func_arith_result
- 		versuffix=-$major
-@@ -8899,7 +8899,7 @@
-       if test yes = "$build_libtool_libs"; then
- 	if test -n "$rpath"; then
- 	  case $host in
--	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
-+	  *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
- 	    # these systems don't actually have a c library (as such)!
- 	    ;;
- 	  *-*-rhapsody* | *-*-darwin1.[012])
-@@ -9413,7 +9413,7 @@
- 
- 	orig_export_symbols=
- 	case $host_os in
--	cygwin* | mingw* | cegcc*)
-+	cygwin* | *msys* | mingw* | cegcc*)
- 	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
- 	    # exporting using user supplied symfile
- 	    func_dll_def_p "$export_symbols" || {
-@@ -9970,7 +9970,7 @@
- 
-     prog)
-       case $host in
--	*cygwin*) func_stripname '' '.exe' "$output"
-+	*cygwin* | *msys*) func_stripname '' '.exe' "$output"
- 	          output=$func_stripname_result.exe;;
-       esac
-       test -n "$vinfo" && \
-@@ -10081,7 +10081,7 @@
- 	  esac
- 	fi
- 	case $host in
--	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-+	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
- 	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
- 	  case :$dllsearchpath: in
- 	  *":$libdir:"*) ;;
-@@ -10159,7 +10159,7 @@
-         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
-         wrappers_required=false
-         ;;
--      *cygwin* | *mingw* )
-+      *cygwin* | *msys* | *mingw* )
-         test yes = "$build_libtool_libs" || wrappers_required=false
-         ;;
-       *)
-@@ -10305,14 +10305,14 @@
- 	esac
- 	# test for cygwin because mv fails w/o .exe extensions
- 	case $host in
--	  *cygwin*)
-+	  *cygwin* | *msys*)
- 	    exeext=.exe
- 	    func_stripname '' '.exe' "$outputname"
- 	    outputname=$func_stripname_result ;;
- 	  *) exeext= ;;
- 	esac
- 	case $host in
--	  *cygwin* | *mingw* )
-+	  *cygwin* | *msys* | *mingw* )
- 	    func_dirname_and_basename "$output" "" "."
- 	    output_name=$func_basename_result
- 	    output_path=$func_dirname_result
-@@ -10644,7 +10644,7 @@
- 	  # tests/bindir.at for full details.
- 	  tdlname=$dlname
- 	  case $host,$output,$installed,$module,$dlname in
--	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
-+	    *cygwin*,*lai,yes,no,*.dll | *msys*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
- 	      # If a -bindir argument was supplied, place the dll there.
- 	      if test -n "$bindir"; then
- 		func_relative_path "$install_libdir" "$bindir"
-diff -Naur libtool-2.4.2.418-orig/m4/libtool.m4 libtool-2.4.2.418/m4/libtool.m4
---- libtool-2.4.2.418-orig/m4/libtool.m4	2013-10-26 03:37:46.000000000 +0400
-+++ libtool-2.4.2.418/m4/libtool.m4	2014-09-02 10:19:40.084800000 +0400
-@@ -1665,7 +1665,7 @@
-     lt_cv_sys_max_cmd_len=-1;
-     ;;
- 
--  cygwin* | mingw* | cegcc*)
-+  cygwin* | msys* | mingw* | cegcc*)
-     # On Win9x/ME, this test blows up -- it succeeds, but takes
-     # about 5 minutes as the teststring grows exponentially.
-     # Worse, since 9x/ME are not pre-emptively multitasking,
-@@ -1913,7 +1913,7 @@
-     lt_cv_dlopen_libs=
-     ;;
- 
--  cygwin*)
-+  cygwin* | msys*)
-     lt_cv_dlopen=dlopen
-     lt_cv_dlopen_libs=
-     ;;
-@@ -2399,7 +2399,7 @@
-   # libtool to hard-code these into programs
-   ;;
- 
--cygwin* | mingw* | pw32* | cegcc*)
-+cygwin* | msys* | mingw* | pw32* | cegcc*)
-   version_type=windows
-   shrext_cmds=.dll
-   need_version=no
-@@ -2431,6 +2431,12 @@
- m4_if([$1], [],[
-       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
-       ;;
-+    msys*)
-+      # MSYS DLLs use 'msys-' prefix rather than 'lib'
-+      soname_spec='`echo $libname | sed -e 's/^lib/msys-/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
-+m4_if([$1], [],[
-+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
-+      ;;
-     mingw* | cegcc*)
-       # MinGW DLLs use traditional 'lib' prefix
-       soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
-@@ -2465,7 +2471,7 @@
-       # Convert to MSYS style.
-       sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
-       ;;
--    cygwin*)
-+    cygwin* | msys*)
-       # Convert to unix form, then to dos form, then back to unix form
-       # but this time dos style (no spaces!) so that the unix form looks
-       # like /cygdrive/c/PROGRA~1:/cygdr...
-@@ -3203,7 +3209,7 @@
- esac
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- case $host_os in
--  cygwin* | mingw* | pw32* | cegcc*)
-+  cygwin* | msys* | mingw* | pw32* | cegcc*)
-     if test yes != "$GCC"; then
-       reload_cmds=false
-     fi
-@@ -3259,7 +3265,7 @@
-   lt_cv_file_magic_test_file=/shlib/libc.so
-   ;;
- 
--cygwin*)
-+cygwin* | msys*)
-   # func_win32_libid is a shell function defined in ltmain.sh
-   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-   lt_cv_file_magic_cmd='func_win32_libid'
-@@ -3564,7 +3570,7 @@
- [lt_cv_sharedlib_from_linklib_cmd='unknown'
- 
- case $host_os in
--cygwin* | mingw* | pw32* | cegcc*)
-+cygwin* | msys* | mingw* | pw32* | cegcc*)
-   # two different shell functions defined in ltmain.sh;
-   # decide which one to use based on capabilities of $DLLTOOL
-   case `$DLLTOOL --help 2>&1` in
-@@ -3634,7 +3640,7 @@
- [AC_REQUIRE([AC_CANONICAL_HOST])dnl
- LIBM=
- case $host in
--*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
-+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-msys* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
-   # These system don't have libm, or don't need it
-   ;;
- *-ncr-sysv4.3*)
-@@ -3709,7 +3715,7 @@
- aix*)
-   symcode='[[BCDT]]'
-   ;;
--cygwin* | mingw* | pw32* | cegcc*)
-+cygwin* | msys* | mingw* | pw32* | cegcc*)
-   symcode='[[ABCDGISTW]]'
-   ;;
- hpux*)
-@@ -4015,7 +4021,7 @@
-     beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-       # PIC is the default for these OSes.
-       ;;
--    mingw* | cygwin* | os2* | pw32* | cegcc*)
-+    mingw* | cygwin* | msys* | os2* | pw32* | cegcc*)
-       # This hack is so that the source file can tell whether it is being
-       # built for inclusion in a dll (and should export symbols for example).
-       # Although the cygwin gcc ignores -fPIC, still need this for old-style
-@@ -4086,7 +4092,7 @@
- 	  ;;
- 	esac
- 	;;
--      mingw* | cygwin* | os2* | pw32* | cegcc*)
-+      mingw* | cygwin* | msys* | os2* | pw32* | cegcc*)
- 	# This hack is so that the source file can tell whether it is being
- 	# built for inclusion in a dll (and should export symbols for example).
- 	m4_if([$1], [GCJ], [],
-@@ -4334,7 +4340,7 @@
-       # PIC is the default for these OSes.
-       ;;
- 
--    mingw* | cygwin* | pw32* | os2* | cegcc*)
-+    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
-       # This hack is so that the source file can tell whether it is being
-       # built for inclusion in a dll (and should export symbols for example).
-       # Although the cygwin gcc ignores -fPIC, still need this for old-style
-@@ -4433,7 +4439,7 @@
-       esac
-       ;;
- 
--    mingw* | cygwin* | pw32* | os2* | cegcc*)
-+    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
-       # This hack is so that the source file can tell whether it is being
-       # built for inclusion in a dll (and should export symbols for example).
-       m4_if([$1], [GCJ], [],
-@@ -4699,7 +4705,7 @@
-   pw32*)
-     _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
-     ;;
--  cygwin* | mingw* | cegcc*)
-+  cygwin* | msys* | mingw* | cegcc*)
-     case $cc_basename in
-     cl*)
-       _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
-@@ -4757,7 +4763,7 @@
-   extract_expsyms_cmds=
- 
-   case $host_os in
--  cygwin* | mingw* | pw32* | cegcc*)
-+  cygwin* | msys* | mingw* | pw32* | cegcc*)
-     # FIXME: the MSVC++ port hasn't been tested in a loooong time
-     # When not using gcc, we currently assume that we are using
-     # Microsoft Visual C++.
-@@ -4872,7 +4878,7 @@
-       fi
-       ;;
- 
--    cygwin* | mingw* | pw32* | cegcc*)
-+    cygwin* | msys* | mingw* | pw32* | cegcc*)
-       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-       # as there is no search path for DLLs.
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-@@ -5247,7 +5253,7 @@
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-       ;;
- 
--    cygwin* | mingw* | pw32* | cegcc*)
-+    cygwin* | msys* | mingw* | pw32* | cegcc*)
-       # When not using gcc, we currently assume that we are using
-       # Microsoft Visual C++.
-       # hardcode_libdir_flag_spec is actually meaningless, as there is
-@@ -6241,7 +6247,7 @@
-         esac
-         ;;
- 
--      cygwin* | mingw* | pw32* | cegcc*)
-+      cygwin* | msys* | mingw* | pw32* | cegcc*)
- 	case $GXX,$cc_basename in
- 	,cl* | no,cl*)
- 	  # Native MSVC
-@@ -7937,7 +7943,7 @@
-       *-*-mingw* ) # actually msys
-         lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
-         ;;
--      *-*-cygwin* )
-+      *-*-cygwin* | *-*-msys* )
-         lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
-         ;;
-       * ) # otherwise, assume *nix
-@@ -7945,12 +7951,12 @@
-         ;;
-     esac
-     ;;
--  *-*-cygwin* )
-+  *-*-cygwin* | *-*-msys* )
-     case $build in
-       *-*-mingw* ) # actually msys
-         lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
-         ;;
--      *-*-cygwin* )
-+      *-*-cygwin* | *-*-msys* )
-         lt_cv_to_host_file_cmd=func_convert_file_noop
-         ;;
-       * ) # otherwise, assume *nix

+ 0 - 38
contrib/autotools-patches/apply-all.sh

@@ -1,38 +0,0 @@
-#!/bin/bash
-
-#
-# This file applies optional libtool patches mainly for better MSys2 compatibility,
-# especially for MSys2/Clang{64,32} toolchains.
-# It's a pity that these patches haven't been sent upstream.
-#
-# Based on Debian SID baseline files as of December 2021.
-#
-
-patchesdir="$(dirname "$BASH_SOURCE")" || exit 2
-test -n "$patchesdir" || exit 2
-
-patches=(
-  0003-Pass-various-flags-to-GCC.patch
-  0006-Fix-strict-ansi-vs-posix-mod.patch
-  0009-libtool-2.4.2.418-msysize-mod.patch
-  0010-libtool-2.4.2-include-process-h-mod.patch
-  0011-Pick-up-clang_rt-static-archives-compiler-internal-l.patch
-  0012-Prefer-response-files-over-linker-scripts-for-mingw-mod.patch
-  0013-Allow-statically-linking-compiler-support-libraries-mod.patch
-  0014-Support-llvm-objdump-f-output-mod.patch
-)
-
-failed=( )
-
-cd "${patchesdir}/../.." || exit 1
-
-for patch in ${patches[@]}; do
-  patch -N -p1 --no-backup-if-mismatch -r - -i "${patchesdir}/${patch}" || failed+=("$patch")
-done
-
-if [[ -n "${failed[@]}" ]]; then
-  printf 'Failed patch: %s\n' "${failed[@]}" >&2
-  exit 2
-fi
-
-exit 0

+ 53 - 0
contrib/fixes-autoconf/apply-all.sh

@@ -0,0 +1,53 @@
+#!/bin/bash
+
+#
+# This file applies optional Autoconf patches for better MSys2 and new
+# compiler compatibility.
+#
+# Based on Debian SID baseline files as of April 2023.
+#
+
+patchesdir=$(dirname $BASH_SOURCE) || exit 2
+test -n "$patchesdir" || exit 2
+cd "$patchesdir" || exit 2
+patchesdir=$(pwd) || exit 2
+
+patches=(
+ # No patches currently
+)
+
+failed=( )
+
+cd "${patchesdir}/../.." || exit 1
+
+patch_params="-Nf -p1 --no-backup-if-mismatch -r - --read-only=fail"
+
+for patch in ${patches[@]}; do
+  patchfile="${patchesdir}/${patch}"
+  echo "*** Applying $patch..."
+  if echo "$patch_data" | patch $patch_params -i "$patchfile"
+  then
+    echo "** $patch successfully applied."
+  else
+    echo "** $patch failed."
+    failed+=("$patch")
+  fi
+  unset patch_data
+done
+
+
+addl_file="c_backported.m4"
+echo "*** Copying $addl_file"
+cp -fT "${patchesdir}/$addl_file" "m4/$addl_file" || exit 2
+echo "$addl_file copied."
+
+echo ''
+
+if [[ -n "${failed[@]}" ]]; then
+  printf '* Failed patch: %s\n' "${failed[@]}" >&2
+  exit 2
+else
+  echo "* All patches have been successfully applied."
+fi
+
+exit 0

+ 565 - 0
contrib/fixes-autoconf/c_backported.m4

@@ -0,0 +1,565 @@
+# Backported macros from autoconf git master + a few custom patches
+
+# This file is part of Autoconf.			-*- Autoconf -*-
+# Programming languages support.
+# Copyright (C) 2001-2017, 2020-2023 Free Software Foundation, Inc.
+
+# This file is part of Autoconf.  This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively.  If not, see <https://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Akim Demaille, Paul Eggert,
+# François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+# ---- Backported macros only ----
+
+AC_DEFUN([_AC_C_C89_TEST_GLOBALS],
+[m4_divert_text([INIT_PREPARE],
+[[# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+   Do not test the value of __STDC__, because some compilers set it to 0
+   while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh.  */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (char **p, int i)
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* C89 style stringification. */
+#define noexpand_stringify(a) #a
+const char *stringified = noexpand_stringify(arbitrary+token=sequence);
+
+/* C89 style token pasting.  Exercises some of the corner cases that
+   e.g. old MSVC gets wrong, but not very hard. */
+#define noexpand_concat(a,b) a##b
+#define expand_concat(a,b) noexpand_concat(a,b)
+extern int vA;
+extern int vbee;
+#define aye A
+#define bee B
+int *pvA = &expand_concat(v,aye);
+int *pvbee = &noexpand_concat(v,bee);
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not \xHH hex character constants.
+   These do not provoke an error unfortunately, instead are silently treated
+   as an "x".  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously \x00 != x always comes out true, for an
+   array size at least.  It is necessary to write \x00 == 0 to get something
+   that is true only with -std.  */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+               int, int);'
+]])])
+
+
+AC_DEFUN([_AC_C_C99_TEST_GLOBALS],
+[m4_divert_text([INIT_PREPARE],
+[[# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+extern void free (void *);
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+  #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str = "";
+  int number = 0;
+  float fnumber = 0;
+
+  while (*format)
+    {
+      switch (*format++)
+	{
+	case '\''s'\'': // string
+	  str = va_arg (args_copy, const char *);
+	  break;
+	case '\''d'\'': // int
+	  number = va_arg (args_copy, int);
+	  break;
+	case '\''f'\'': // float
+	  fnumber = va_arg (args_copy, double);
+	  break;
+	default:
+	  break;
+	}
+    }
+  va_end (args_copy);
+  va_end (args);
+
+  return *str && number && fnumber;
+}
+'
+]])])
+
+
+AC_DEFUN([_AC_C_C11_TEST_GLOBALS],
+[m4_divert_text([INIT_PREPARE],
+[[# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+  int_alignment = _Alignof (int),
+  int_array_alignment = _Alignof (int[100]),
+  char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+_Noreturn int does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+  int x;
+  _Static_assert (sizeof (int) <= sizeof (long int),
+                  "_Static_assert does not work in struct");
+  long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+  union {
+    struct { int i; int j; };
+    struct { int k; long int l; } w;
+  };
+  int m;
+} v1;
+'
+]])])
+
+
+# AC_LANG_CALL(C)(PROLOGUE, FUNCTION)
+# -----------------------------------
+# Avoid conflicting decl of main.
+m4_define([AC_LANG_CALL(C)],
+[AC_LANG_PROGRAM([$1
+m4_if([$2], [main], ,
+[/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.
+   The 'extern "C"' is for builds by C++ compilers;
+   although this is not generally supported in C code supporting it here
+   has little cost and some practical benefit (sr 110532).  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 (void);])], [return $2 ();])])
+
+
+# AC_LANG_FUNC_LINK_TRY(C)(FUNCTION)
+# ----------------------------------
+# Don't include <ctype.h> because on OSF/1 3.0 it includes
+# <sys/types.h> which includes <sys/select.h> which contains a
+# prototype for select.  Similarly for bzero.
+#
+# This test used to merely assign f=$1 in main(), but that was
+# optimized away by HP unbundled cc A.05.36 for ia64 under +O3,
+# presumably on the basis that there's no need to do that store if the
+# program is about to exit.  Conversely, the AIX linker optimizes an
+# unused external declaration that initializes f=$1.  So this test
+# program has both an external initialization of f, and a use of f in
+# main that affects the exit status.
+#
+m4_define([AC_LANG_FUNC_LINK_TRY(C)],
+[AC_LANG_PROGRAM(
+[/* Define $1 to an innocuous variant, in case <limits.h> declares $1.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $1 innocuous_$1
+
+/* System header to define __stub macros and hopefully few prototypes,
+   which can conflict with char $1 (void); below.  */
+
+#include <limits.h>
+#undef $1
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $1 (void);
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$1 || defined __stub___$1
+choke me
+#endif
+], [return $1 ();])])
+
+
+# AC_C_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN],
+#                 [ACTION-IF-UNIVERSAL])
+# -------------------------------------------------------------------------
+AC_DEFUN([AC_C_BIGENDIAN],
+[AH_VERBATIM([WORDS_BIGENDIAN],
+[/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif])dnl
+ AC_CACHE_CHECK([whether byte ordering is bigendian], [ac_cv_c_bigendian],
+   [ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    AC_COMPILE_IFELSE(
+	 [AC_LANG_SOURCE(
+	    [[#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+	    ]])],
+	 [
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done])
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      AC_COMPILE_IFELSE(
+	[AC_LANG_PROGRAM(
+	   [[#include <sys/types.h>
+	     #include <sys/param.h>
+	   ]],
+	   [[#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
+	   ]])],
+	[# It does; now see whether it defined to BIG_ENDIAN or not.
+	 AC_COMPILE_IFELSE(
+	   [AC_LANG_PROGRAM(
+	      [[#include <sys/types.h>
+		#include <sys/param.h>
+	      ]],
+	      [[#if BYTE_ORDER != BIG_ENDIAN
+		 not big endian
+		#endif
+	      ]])],
+	   [ac_cv_c_bigendian=yes],
+	   [ac_cv_c_bigendian=no])])
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      AC_COMPILE_IFELSE(
+	[AC_LANG_PROGRAM(
+	   [[#include <limits.h>
+	   ]],
+	   [[#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+	   ]])],
+	[# It does; now see whether it defined to _BIG_ENDIAN or not.
+	 AC_COMPILE_IFELSE(
+	   [AC_LANG_PROGRAM(
+	      [[#include <limits.h>
+	      ]],
+	      [[#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+	      ]])],
+	   [ac_cv_c_bigendian=yes],
+	   [ac_cv_c_bigendian=no])])
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      AC_RUN_IFELSE(
+	[AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+	   [[
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
+	   ]])],
+	[ac_cv_c_bigendian=no],
+	[ac_cv_c_bigendian=yes],
+	[# Try to guess by grepping values from an object file.
+	 AC_LINK_IFELSE(
+	   [AC_LANG_SOURCE(
+	      [[unsigned short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		unsigned short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		unsigned short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		unsigned short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		int
+		main (int argc, char **argv)
+		{
+		  /* Intimidate the compiler so that it does not
+		     optimize the arrays away.  */
+		  char *p = argv[0];
+		  ascii_mm[1] = *p++; ebcdic_mm[1] = *p++;
+		  ascii_ii[1] = *p++; ebcdic_ii[1] = *p++;
+		  return use_ascii (argc) == use_ebcdic (*p);
+		}]])],
+	   [if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi])])
+    fi])
+ case $ac_cv_c_bigendian in #(
+   yes)
+     m4_default([$1],
+       [AC_DEFINE([WORDS_BIGENDIAN], 1)]);; #(
+   no)
+     $2 ;; #(
+   universal)
+dnl Note that AC_APPLE_UNIVERSAL_BUILD sorts less than WORDS_BIGENDIAN;
+dnl this is a necessity for proper config header operation.  Warn if
+dnl the user did not specify a config header but is relying on the
+dnl default behavior for universal builds.
+     m4_default([$4],
+       [AC_CONFIG_COMMANDS_PRE([m4_ifset([AH_HEADER], [],
+	 [m4_warn([obsolete],
+	   [AC_C_BIGENDIAN should be used with AC_CONFIG_HEADERS])])])dnl
+	AC_DEFINE([AC_APPLE_UNIVERSAL_BUILD],1,
+	  [Define if building universal (internal helper macro)])])
+     ;; #(
+   *)
+     m4_default([$3],
+       [AC_MSG_ERROR([unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help])]) ;;
+ esac
+])# AC_C_BIGENDIAN
+
+
+# AC_C_VARARRAYS
+# --------------
+# Check whether the C compiler supports variable-length arrays.
+AC_DEFUN([AC_C_VARARRAYS],
+[
+  AC_CACHE_CHECK([for variable-length arrays],
+    ac_cv_c_vararrays,
+    [AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+[[	#ifndef __STDC_NO_VLA__
+	#error __STDC_NO_VLA__ not defined
+	#endif
+]])],
+       [ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined'],
+       [AC_COMPILE_IFELSE(
+	  [AC_LANG_PROGRAM(
+	     [[/* Test for VLA support.  This test is partly inspired
+		  from examples in the C standard.  Use at least two VLA
+		  functions to detect the GCC 3.4.3 bug described in:
+		  https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html
+		  */
+	       #ifdef __STDC_NO_VLA__
+		syntax error;
+	       #else
+		 extern int n;
+		 static int B[100];
+		 int fvla (int m, int C[m][m]);
+
+		 static int
+		 simple (int count, int all[static count])
+		 {
+		   return all[count - 1];
+		 }
+
+		 int
+		 fvla (int m, int C[m][m])
+		 {
+		   typedef int VLA[m][m];
+		   VLA x;
+		   int D[m];
+		   static int (*q)[m] = &B;
+		   int (*s)[n] = q;
+		   return C && &x[0][0] == &D[0] && &D[0] == s[0];
+		 }
+	       #endif
+	       ]])],
+	  [ac_cv_c_vararrays=yes],
+	  [ac_cv_c_vararrays=no])])])
+  if test "$ac_cv_c_vararrays" = yes; then
+    dnl This is for compatibility with Autoconf 2.61-2.69.
+    AC_DEFINE([HAVE_C_VARARRAYS], 1,
+      [Define to 1 if C supports variable-length arrays.])
+  elif test "$ac_cv_c_vararrays" = no; then
+    AC_DEFINE([__STDC_NO_VLA__], 1,
+      [Define to 1 if C does not support variable-length arrays, and
+       if the compiler does not already define this.])
+  fi
+])
+

+ 31 - 0
contrib/fixes-libtool/0003-Pass-various-runtime-library-flags-to-GCC.mingw.mod.patch

@@ -0,0 +1,31 @@
+The patch below was modified to work on top of Debian patches
+
+[PATCH 3/6] Pass various runtime library flags to GCC.
+* build-aux/ltmain.in (func_mode_link): Pass the
+-shared-libgcc and -static-lib* flags along to GCC.
+
+diff -urN libtool-2.4.7/build-aux/ltmain.in.orig libtool-2.4.7/build-aux/ltmain.in
+--- libtool-2.4.7/build-aux/ltmain.in.orig	2022-05-25 13:57:50.311734300 +0200
++++ libtool-2.4.7/build-aux/ltmain.in	2022-05-25 14:01:54.621866600 +0200
+@@ -7559,15 +7559,19 @@
+       # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+       # -specs=*             GCC specs files
+       # -stdlib=*            select c++ std lib with clang
++      # -{shared,static}-libgcc, -static-{libgfortran|libstdc++}
++      #                      link against specified runtime library
+       # -fsanitize=*         Clang/GCC memory and address sanitizer
+       # -fuse-ld=*           Linker select flags for GCC
+-      # -static-*            direct GCC to link specific libraries statically
+       # -fcilkplus           Cilk Plus language extension features for C/C++
+       # -Wa,*                Pass flags directly to the assembler
+       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+       -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+-      -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus|-Wa,*)
++      -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*|-ftree-parallelize-loops=*| \
++      -fcilkplus|-fgnu-tm|-ffast-math|-funsafe-math-optimizations| \
++      -fvtable-verify*|-shared-libgcc|-static-libgcc|-static-libgfortran| \
++      -static-libstdc++)
+         func_quote_arg pretty "$arg"
+ 	arg=$func_quote_arg_result
+         func_append compile_command " $arg"

+ 5 - 5
contrib/autotools-patches/0006-Fix-strict-ansi-vs-posix-mod.patch → contrib/fixes-libtool/0006-Fix-strict-ansi-vs-posix.patch

@@ -2,13 +2,13 @@
 * build-aux/ltmain.in (func_mode_link): Also check for _POSIX
 as well as __STRICT_ANSI__ to avoid re-definitions.
 ---
- build-aux/ltmain.sh |    4 +++-
+ build-aux/ltmain.in |    4 +++-
  1 files changed, 1 insertions(+), 1 deletions(-)
 
-diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
 index af46cb8..244bb5b 100644
---- a/build-aux/ltmain.sh
-+++ b/build-aux/ltmain.sh
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
 @@ -3382,7 +3382,7 @@
  
  /* declarations of non-ANSI functions */
@@ -19,4 +19,4 @@ index af46cb8..244bb5b 100644
  # endif
  #elif defined __CYGWIN__
 -- 
-1.7.0.2.msysgit.0
+1.7.0.2.msysgit.0

+ 1403 - 0
contrib/fixes-libtool/0009-libtool-2.4.2.418-msysize.patch

@@ -0,0 +1,1403 @@
+diff -urN libtool-2.4.7/build-aux/config.guess.orig libtool-2.4.7/build-aux/config.guess
+--- libtool-2.4.7/build-aux/config.guess.orig	2022-05-25 14:18:47.388587800 +0200
++++ libtool-2.4.7/build-aux/config.guess	2022-05-25 14:21:50.720326000 +0200
+@@ -950,6 +950,9 @@
+     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ 	GUESS=x86_64-pc-cygwin
+ 	;;
++    amd64:MSYS*:*:* | x86_64:MSYS*:*:*)
++	GUESS=x86_64-pc-msys
++	;;
+     prep*:SunOS:5.*:*)
+ 	SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ 	GUESS=powerpcle-unknown-solaris2$SUN_REL
+
+diff -Naur libtool-2.4.3-orig/build-aux/ltmain.in libtool-2.4.3/build-aux/ltmain.in
+--- libtool-2.4.3-orig/build-aux/ltmain.in	2014-09-02 09:54:56.481600000 +0400
++++ libtool-2.4.3/build-aux/ltmain.in	2014-09-02 10:14:04.809600000 +0400
+@@ -497,7 +497,7 @@
+     case $host in
+       # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+       # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+-      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
++      *cygwin* | *msys* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+         # don't eliminate duplications in $postdeps and $predeps
+         opt_duplicate_compiler_generated_deps=:
+         ;;
+@@ -1510,7 +1510,7 @@
+ 
+     # On Cygwin there's no "real" PIC flag so we must build both object types
+     case $host_os in
+-    cygwin* | mingw* | pw32* | os2* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | os2* | cegcc*)
+       pic_mode=default
+       ;;
+     esac
+@@ -2383,7 +2383,7 @@
+ 	      'exit $?'
+ 	  tstripme=$stripme
+ 	  case $host_os in
+-	  cygwin* | mingw* | pw32* | cegcc*)
++	  cygwin* | msys* | mingw* | pw32* | cegcc*)
+ 	    case $realname in
+ 	    *.dll.a)
+ 	      tstripme=
+@@ -2489,7 +2489,7 @@
+ 
+ 	# Do a test to see if this is really a libtool program.
+ 	case $host in
+-	*cygwin* | *mingw*)
++	*cygwin* | *msys* | *mingw*)
+ 	    if func_ltwrapper_executable_p "$file"; then
+ 	      func_ltwrapper_scriptname "$file"
+ 	      wrapper=$func_ltwrapper_scriptname_result
+@@ -2564,7 +2564,7 @@
+ 	# remove .exe since cygwin /usr/bin/install will append another
+ 	# one anyway
+ 	case $install_prog,$host in
+-	*/usr/bin/install*,*cygwin*)
++	*/usr/bin/install*,*cygwin*|*/usr/bin/install*,*msys*)
+ 	  case $file:$destfile in
+ 	  *.exe:*.exe)
+ 	    # this is ok
+@@ -2717,7 +2717,7 @@
+ 	      $RM $export_symbols
+ 	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ 	      case $host in
+-	      *cygwin* | *mingw* | *cegcc* )
++	      *cygwin* | *msys* | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ 	        ;;
+@@ -2729,7 +2729,7 @@
+ 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ 	      eval '$MV "$nlist"T "$nlist"'
+ 	      case $host in
+-	        *cygwin* | *mingw* | *cegcc* )
++	        *cygwin* | *msys* | *mingw* | *cegcc* )
+ 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ 	          ;;
+@@ -2743,7 +2743,7 @@
+ 	  func_basename "$dlprefile"
+ 	  name=$func_basename_result
+           case $host in
+-	    *cygwin* | *mingw* | *cegcc* )
++	    *cygwin* | *msys* | *mingw* | *cegcc* )
+ 	      # if an import library, we need to obtain dlname
+ 	      if func_win32_import_lib_p "$dlprefile"; then
+ 	        func_tr_sh "$dlprefile"
+@@ -2918,7 +2918,7 @@
+ 	# Transform the symbol file into the correct name.
+ 	symfileobj=$output_objdir/${my_outputname}S.$objext
+ 	case $host in
+-	*cygwin* | *mingw* | *cegcc* )
++	*cygwin* | *msys* | *mingw* | *cegcc* )
+ 	  if test -f "$output_objdir/$my_outputname.def"; then
+ 	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ 	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+@@ -3811,7 +3811,7 @@
+ 	{
+ EOF
+ 	    case $host in
+-	      *mingw* | *cygwin* )
++	      *mingw* | *cygwin* | *msys* )
+ 		# make stdout use "unix" line endings
+ 		echo "          setmode(1,_O_BINARY);"
+ 		;;
+@@ -4567,7 +4567,7 @@
+     $debug_cmd
+ 
+     case $host in
+-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++    *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+       # It is impossible to link a dll without this setting, and
+       # we shouldn't force the makefile maintainer to figure out
+       # what system we are compiling for in order to pass an extra
+@@ -5060,7 +5060,7 @@
+ 	  ;;
+ 	esac
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ 	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$dir:"*) ;;
+@@ -5080,7 +5080,7 @@
+       -l*)
+ 	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
++	  *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # These systems don't actually have a C or math library (as such)
+ 	    continue
+ 	    ;;
+@@ -5163,7 +5163,7 @@
+ 
+       -no-install)
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
++	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ 	  # The PATH hackery in wrapper scripts is required on Windows
+ 	  # and Darwin in order for the loader to find any dlls it needs.
+ 	  func_warning "'-no-install' is ignored for $host"
+@@ -6034,7 +6034,7 @@
+ 	  fi
+ 	  case $host in
+ 	    # special handling for platforms with PE-DLLs.
+-	    *cygwin* | *mingw* | *cegcc* )
++	    *cygwin* | *msys* | *mingw* | *cegcc* )
+ 	      # Linker will automatically link against shared library if both
+ 	      # static and shared are present.  Therefore, ensure we extract
+ 	      # symbols from the import library if a shared library is present
+@@ -6178,7 +6178,7 @@
+ 	if test -n "$library_names" &&
+ 	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ 	  case $host in
+-	  *cygwin* | *mingw* | *cegcc* | *os2*)
++	  *cygwin* | *msys* | *mingw* | *cegcc* | *os2*)
+ 	      # No point in relinking DLLs because paths are not encoded
+ 	      func_append notinst_deplibs " $lib"
+ 	      need_relink=no
+@@ -6248,7 +6248,7 @@
+ 	    elif test -n "$soname_spec"; then
+ 	      # bleh windows
+ 	      case $host in
+-	      *cygwin* | mingw* | *cegcc* | *os2*)
++	      *cygwin* | *msys* | mingw* | *cegcc* | *os2*)
+ 	        func_arith $current - $age
+ 		major=$func_arith_result
+ 		versuffix=-$major
+@@ -7123,7 +7123,7 @@
+       if test yes = "$build_libtool_libs"; then
+ 	if test -n "$rpath"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
++	  *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # these systems don't actually have a c library (as such)!
+ 	    ;;
+ 	  *-*-rhapsody* | *-*-darwin1.[012])
+@@ -7637,7 +7637,7 @@
+ 
+ 	orig_export_symbols=
+ 	case $host_os in
+-	cygwin* | mingw* | cegcc*)
++	cygwin* | msys* | mingw* | cegcc*)
+ 	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ 	    # exporting using user supplied symfile
+ 	    func_dll_def_p "$export_symbols" || {
+@@ -8194,7 +8194,7 @@
+ 
+     prog)
+       case $host in
+-	*cygwin*) func_stripname '' '.exe' "$output"
++	*cygwin* | *msys*) func_stripname '' '.exe' "$output"
+ 	          output=$func_stripname_result.exe;;
+       esac
+       test -n "$vinfo" && \
+@@ -8305,7 +8305,7 @@
+ 	  esac
+ 	fi
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ 	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$libdir:"*) ;;
+@@ -8383,7 +8383,7 @@
+         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+         wrappers_required=false
+         ;;
+-      *cygwin* | *mingw* )
++      *cygwin* | *msys* | *mingw* )
+         test yes = "$build_libtool_libs" || wrappers_required=false
+         ;;
+       *)
+@@ -8529,14 +8529,14 @@
+ 	esac
+ 	# test for cygwin because mv fails w/o .exe extensions
+ 	case $host in
+-	  *cygwin*)
++	  *cygwin* | *msys*)
+ 	    exeext=.exe
+ 	    func_stripname '' '.exe' "$outputname"
+ 	    outputname=$func_stripname_result ;;
+ 	  *) exeext= ;;
+ 	esac
+ 	case $host in
+-	  *cygwin* | *mingw* )
++	  *cygwin* | *msys* | *mingw* )
+ 	    func_dirname_and_basename "$output" "" "."
+ 	    output_name=$func_basename_result
+ 	    output_path=$func_dirname_result
+@@ -8878,7 +8878,7 @@
+ 	  # tests/bindir.at for full details.
+ 	  tdlname=$dlname
+ 	  case $host,$output,$installed,$module,$dlname in
+-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
++	    *cygwin*,*lai,yes,no,*.dll | *msys*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ 	      # If a -bindir argument was supplied, place the dll there.
+ 	      if test -n "$bindir"; then
+ 		func_relative_path "$install_libdir" "$bindir"
+
+diff -Naur libtool-2.4.2.418-orig/build-aux/ltmain.sh libtool-2.4.2.418/build-aux/ltmain.sh
+--- libtool-2.4.2.418-orig/build-aux/ltmain.sh	2013-10-27 02:53:58.000000000 +0400
++++ libtool-2.4.2.418/build-aux/ltmain.sh	2014-09-02 10:29:08.840800000 +0400
+@@ -2315,7 +2315,7 @@
+     case $host in
+       # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+       # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+-      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
++      *cygwin* | *msys* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+         # don't eliminate duplications in $postdeps and $predeps
+         opt_duplicate_compiler_generated_deps=:
+         ;;
+@@ -3328,7 +3328,7 @@
+ 
+     # On Cygwin there's no "real" PIC flag so we must build both object types
+     case $host_os in
+-    cygwin* | mingw* | pw32* | os2* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | os2* | cegcc*)
+       pic_mode=default
+       ;;
+     esac
+@@ -4201,7 +4201,7 @@
+ 	      'exit $?'
+ 	  tstripme=$stripme
+ 	  case $host_os in
+-	  cygwin* | mingw* | pw32* | cegcc*)
++	  cygwin* | msys* | mingw* | pw32* | cegcc*)
+ 	    case $realname in
+ 	    *.dll.a)
+ 	      tstripme=
+@@ -4307,7 +4307,7 @@
+ 
+ 	# Do a test to see if this is really a libtool program.
+ 	case $host in
+-	*cygwin* | *mingw*)
++	*cygwin* | *msys* | *mingw*)
+ 	    if func_ltwrapper_executable_p "$file"; then
+ 	      func_ltwrapper_scriptname "$file"
+ 	      wrapper=$func_ltwrapper_scriptname_result
+@@ -4382,7 +4382,7 @@
+ 	# remove .exe since cygwin /usr/bin/install will append another
+ 	# one anyway
+ 	case $install_prog,$host in
+-	*/usr/bin/install*,*cygwin*)
++	*/usr/bin/install*,*cygwin* | */usr/bin/install*,*msys*)
+ 	  case $file:$destfile in
+ 	  *.exe:*.exe)
+ 	    # this is ok
+@@ -4535,7 +4535,7 @@
+ 	      $RM $export_symbols
+ 	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ 	      case $host in
+-	      *cygwin* | *mingw* | *cegcc* )
++	      *cygwin* | *msys* | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ 	        ;;
+@@ -4547,7 +4547,7 @@
+ 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ 	      eval '$MV "$nlist"T "$nlist"'
+ 	      case $host in
+-	        *cygwin* | *mingw* | *cegcc* )
++	        *cygwin* | *msys* | *mingw* | *cegcc* )
+ 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ 	          ;;
+@@ -4561,7 +4561,7 @@
+ 	  func_basename "$dlprefile"
+ 	  name=$func_basename_result
+           case $host in
+-	    *cygwin* | *mingw* | *cegcc* )
++	    *cygwin* | *msys* | *mingw* | *cegcc* )
+ 	      # if an import library, we need to obtain dlname
+ 	      if func_win32_import_lib_p "$dlprefile"; then
+ 	        func_tr_sh "$dlprefile"
+@@ -4736,7 +4736,7 @@
+ 	# Transform the symbol file into the correct name.
+ 	symfileobj=$output_objdir/${my_outputname}S.$objext
+ 	case $host in
+-	*cygwin* | *mingw* | *cegcc* )
++	*cygwin* | *msys* | *mingw* | *cegcc* )
+ 	  if test -f "$output_objdir/$my_outputname.def"; then
+ 	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ 	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+@@ -5629,7 +5629,7 @@
+ 	{
+ EOF
+ 	    case $host in
+-	      *mingw* | *cygwin* )
++	      *mingw* | *cygwin* | *msys* )
+ 		# make stdout use "unix" line endings
+ 		echo "          setmode(1,_O_BINARY);"
+ 		;;
+@@ -6350,7 +6350,7 @@
+     $debug_cmd
+ 
+     case $host in
+-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++    *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+       # It is impossible to link a dll without this setting, and
+       # we shouldn't force the makefile maintainer to figure out
+       # what system we are compiling for in order to pass an extra
+@@ -6843,7 +6843,7 @@
+ 	  ;;
+ 	esac
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ 	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$dir:"*) ;;
+@@ -6863,7 +6863,7 @@
+       -l*)
+ 	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
++	  *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # These systems don't actually have a C or math library (as such)
+ 	    continue
+ 	    ;;
+@@ -6946,7 +6946,7 @@
+ 
+       -no-install)
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
++	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ 	  # The PATH hackery in wrapper scripts is required on Windows
+ 	  # and Darwin in order for the loader to find any dlls it needs.
+ 	  func_warning "'-no-install' is ignored for $host"
+@@ -7812,7 +7812,7 @@
+ 	  fi
+ 	  case $host in
+ 	    # special handling for platforms with PE-DLLs.
+-	    *cygwin* | *mingw* | *cegcc* )
++	    *cygwin* | *msys* | *mingw* | *cegcc* )
+ 	      # Linker will automatically link against shared library if both
+ 	      # static and shared are present.  Therefore, ensure we extract
+ 	      # symbols from the import library if a shared library is present
+@@ -7956,7 +7956,7 @@
+ 	if test -n "$library_names" &&
+ 	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ 	  case $host in
+-	  *cygwin* | *mingw* | *cegcc* | *os2*)
++	  *cygwin* | *msys* | *mingw* | *cegcc* | *os2*)
+ 	      # No point in relinking DLLs because paths are not encoded
+ 	      func_append notinst_deplibs " $lib"
+ 	      need_relink=no
+@@ -8026,7 +8026,7 @@
+ 	    elif test -n "$soname_spec"; then
+ 	      # bleh windows
+ 	      case $host in
+-	      *cygwin* | mingw* | *cegcc* | *os2*)
++	      *cygwin* | *msys* | mingw* | *cegcc* | *os2*)
+ 	        func_arith $current - $age
+ 		major=$func_arith_result
+ 		versuffix=-$major
+@@ -8899,7 +8899,7 @@
+       if test yes = "$build_libtool_libs"; then
+ 	if test -n "$rpath"; then
+ 	  case $host in
+-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
++	  *-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ 	    # these systems don't actually have a c library (as such)!
+ 	    ;;
+ 	  *-*-rhapsody* | *-*-darwin1.[012])
+@@ -9413,7 +9413,7 @@
+ 
+ 	orig_export_symbols=
+ 	case $host_os in
+-	cygwin* | mingw* | cegcc*)
++	cygwin* | *msys* | mingw* | cegcc*)
+ 	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ 	    # exporting using user supplied symfile
+ 	    func_dll_def_p "$export_symbols" || {
+@@ -9970,7 +9970,7 @@
+ 
+     prog)
+       case $host in
+-	*cygwin*) func_stripname '' '.exe' "$output"
++	*cygwin* | *msys*) func_stripname '' '.exe' "$output"
+ 	          output=$func_stripname_result.exe;;
+       esac
+       test -n "$vinfo" && \
+@@ -10081,7 +10081,7 @@
+ 	  esac
+ 	fi
+ 	case $host in
+-	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++	*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ 	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ 	  case :$dllsearchpath: in
+ 	  *":$libdir:"*) ;;
+@@ -10159,7 +10159,7 @@
+         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+         wrappers_required=false
+         ;;
+-      *cygwin* | *mingw* )
++      *cygwin* | *msys* | *mingw* )
+         test yes = "$build_libtool_libs" || wrappers_required=false
+         ;;
+       *)
+@@ -10305,14 +10305,14 @@
+ 	esac
+ 	# test for cygwin because mv fails w/o .exe extensions
+ 	case $host in
+-	  *cygwin*)
++	  *cygwin* | *msys*)
+ 	    exeext=.exe
+ 	    func_stripname '' '.exe' "$outputname"
+ 	    outputname=$func_stripname_result ;;
+ 	  *) exeext= ;;
+ 	esac
+ 	case $host in
+-	  *cygwin* | *mingw* )
++	  *cygwin* | *msys* | *mingw* )
+ 	    func_dirname_and_basename "$output" "" "."
+ 	    output_name=$func_basename_result
+ 	    output_path=$func_dirname_result
+@@ -10644,7 +10644,7 @@
+ 	  # tests/bindir.at for full details.
+ 	  tdlname=$dlname
+ 	  case $host,$output,$installed,$module,$dlname in
+-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
++	    *cygwin*,*lai,yes,no,*.dll | *msys*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ 	      # If a -bindir argument was supplied, place the dll there.
+ 	      if test -n "$bindir"; then
+ 		func_relative_path "$install_libdir" "$bindir"
+--- libtool-2.4.7/configure.orig	2022-05-25 14:05:58.332605400 +0200
++++ libtool-2.4.7/configure	2022-05-25 14:11:29.613646200 +0200
+@@ -5988,7 +5988,7 @@
+     lt_cv_sys_max_cmd_len=-1;
+     ;;
+ 
+-  cygwin* | mingw* | cegcc*)
++  cygwin* | msys* | mingw* | cegcc*)
+     # On Win9x/ME, this test blows up -- it succeeds, but takes
+     # about 5 minutes as the teststring grows exponentially.
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+@@ -6154,7 +6154,7 @@
+       *-*-mingw* ) # actually msys
+         lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+         ;;
+-      *-*-cygwin* )
++      *-*-cygwin* | *-*-msys* )
+         lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+         ;;
+       * ) # otherwise, assume *nix
+@@ -6162,12 +6162,12 @@
+         ;;
+     esac
+     ;;
+-  *-*-cygwin* )
++  *-*-cygwin* | *-*-msys* )
+     case $build in
+       *-*-mingw* ) # actually msys
+         lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+         ;;
+-      *-*-cygwin* )
++      *-*-cygwin* | *-*-msys* )
+         lt_cv_to_host_file_cmd=func_convert_file_noop
+         ;;
+       * ) # otherwise, assume *nix
+@@ -6233,7 +6233,7 @@
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     if test yes != "$GCC"; then
+       reload_cmds=false
+     fi
+@@ -6486,7 +6486,7 @@
+   lt_cv_file_magic_test_file=/shlib/libc.so
+   ;;
+ 
+-cygwin*)
++cygwin* | msys*)
+   # func_win32_libid is a shell function defined in ltmain.sh
+   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+   lt_cv_file_magic_cmd='func_win32_libid'
+@@ -6802,7 +6802,7 @@
+   lt_cv_sharedlib_from_linklib_cmd='unknown'
+ 
+ case $host_os in
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   # two different shell functions defined in ltmain.sh;
+   # decide which one to use based on capabilities of $DLLTOOL
+   case `$DLLTOOL --help 2>&1` in
+@@ -7310,7 +7310,7 @@
+ aix*)
+   symcode='[BCDT]'
+   ;;
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   symcode='[ABCDGISTW]'
+   ;;
+ hpux*)
+@@ -8912,7 +8912,7 @@
+ enable_win32_dll=yes
+ 
+ case $host in
+-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
++*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}as; ac_word=$2
+@@ -9813,7 +9813,7 @@
+       # PIC is the default for these OSes.
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -9916,7 +9916,7 @@
+       esac
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic='-DDLL_EXPORT'
+@@ -10418,7 +10418,7 @@
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+@@ -10533,7 +10533,7 @@
+       fi
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+       # as there is no search path for DLLs.
+       hardcode_libdir_flag_spec='-L$libdir'
+@@ -11074,7 +11074,7 @@
+       export_dynamic_flag_spec=-rdynamic
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -12110,7 +12110,7 @@
+   # libtool to hard-code these into programs
+   ;;
+ 
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=.dll
+   need_version=no
+@@ -12136,9 +12136,9 @@
+     shlibpath_overrides_runpath=yes
+ 
+     case $host_os in
+-    cygwin*)
++    cygwin* | msys*)
+       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+-      soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
++      soname_spec='`echo $libname | $SED -e 's/^lib/msys-/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ 
+       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+       ;;
+@@ -12176,7 +12176,7 @@
+       # Convert to MSYS style.
+       sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+       ;;
+-    cygwin*)
++    cygwin* | msys*)
+       # Convert to unix form, then to dos form, then back to unix form
+       # but this time dos style (no spaces!) so that the unix form looks
+       # like /cygdrive/c/PROGRA~1:/cygdr...
+@@ -12878,7 +12878,7 @@
+     lt_cv_dlopen_libs=
+     ;;
+ 
+-  cygwin*)
++  cygwin* | msys*)
+     lt_cv_dlopen=dlopen
+     lt_cv_dlopen_libs=
+     ;;
+@@ -13827,7 +13827,7 @@
+ beos*)
+   LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+   ;;
+-cygwin* | mingw* | pw32*)
++cygwin* | msys* | mingw* | pw32*)
+   ac_fn_c_check_decl "$LINENO" "cygwin_conv_path" "ac_cv_have_decl_cygwin_conv_path" "#include <sys/cygwin.h>
+ "
+ if test "x$ac_cv_have_decl_cygwin_conv_path" = xyes; then :
+@@ -14242,7 +14242,7 @@
+   $as_echo_n "(cached) " >&6
+ else
+   case $host_os in #(
+-	 *cygwin*)
++	 *cygwin* | *msys*)
+ 	   lt_cv_sys_argz_works=no
+ 	   if test no != "$cross_compiling"; then
+ 	     lt_cv_sys_argz_works="guessing no"
+@@ -15517,7 +15517,7 @@
+         esac
+         ;;
+ 
+-      cygwin* | mingw* | pw32* | cegcc*)
++      cygwin* | msys* | mingw* | pw32* | cegcc*)
+ 	case $GXX,$cc_basename in
+ 	,cl* | no,cl* | ,icl* | no,icl*)
+ 	  # Native MSVC or ICC
+@@ -16528,7 +16528,7 @@
+     beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+       # PIC is the default for these OSes.
+       ;;
+-    mingw* | cygwin* | os2* | pw32* | cegcc*)
++    mingw* | cygwin* | msys* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -16603,7 +16603,7 @@
+ 	  ;;
+ 	esac
+ 	;;
+-      mingw* | cygwin* | os2* | pw32* | cegcc*)
++      mingw* | cygwin* | msys* | os2* | pw32* | cegcc*)
+ 	# This hack is so that the source file can tell whether it is being
+ 	# built for inclusion in a dll (and should export symbols for example).
+ 	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+@@ -17092,7 +17092,7 @@
+   pw32*)
+     export_symbols_cmds_CXX=$ltdll_cmds
+     ;;
+-  cygwin* | mingw* | cegcc*)
++  cygwin* | msys* | mingw* | cegcc*)
+     case $cc_basename in
+     cl* | icl*)
+       exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+@@ -17413,7 +17413,7 @@
+   # libtool to hard-code these into programs
+   ;;
+ 
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=.dll
+   need_version=no
+@@ -17439,7 +17439,7 @@
+     shlibpath_overrides_runpath=yes
+ 
+     case $host_os in
+-    cygwin*)
++    cygwin* | msys*)
+       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+-      soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
++      soname_spec='`echo $libname | $SED -e 's/^lib/msys-/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ 
+@@ -17478,7 +17478,7 @@
+       # Convert to MSYS style.
+       sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+       ;;
+-    cygwin*)
++    cygwin* | msys*)
+       # Convert to unix form, then to dos form, then back to unix form
+       # but this time dos style (no spaces!) so that the unix form looks
+       # like /cygdrive/c/PROGRA~1:/cygdr...
+@@ -18519,7 +18519,7 @@
+       # PIC is the default for these OSes.
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -18622,7 +18622,7 @@
+       esac
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+@@ -19109,7 +19109,7 @@
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+@@ -19224,7 +19224,7 @@
+       fi
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+       # as there is no search path for DLLs.
+       hardcode_libdir_flag_spec_F77='-L$libdir'
+@@ -19753,7 +19753,7 @@
+       export_dynamic_flag_spec_F77=-rdynamic
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -20581,7 +20581,7 @@
+   # libtool to hard-code these into programs
+   ;;
+ 
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=.dll
+   need_version=no
+@@ -20607,9 +20607,9 @@
+     shlibpath_overrides_runpath=yes
+ 
+     case $host_os in
+-    cygwin*)
++    cygwin* | msys*)
+       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+-      soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
++      soname_spec='`echo $libname | $SED -e 's/^lib/msys-/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ 
+       ;;
+     mingw* | cegcc*)
+@@ -20646,7 +20646,7 @@
+       # Convert to MSYS style.
+       sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+       ;;
+-    cygwin*)
++    cygwin* | msys*)
+       # Convert to unix form, then to dos form, then back to unix form
+       # but this time dos style (no spaces!) so that the unix form looks
+       # like /cygdrive/c/PROGRA~1:/cygdr...
+@@ -21822,7 +21822,7 @@
+       # PIC is the default for these OSes.
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -21925,7 +21925,7 @@
+       esac
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic_FC='-DDLL_EXPORT'
+@@ -22412,7 +22412,7 @@
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+@@ -22527,7 +22527,7 @@
+       fi
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless,
+       # as there is no search path for DLLs.
+       hardcode_libdir_flag_spec_FC='-L$libdir'
+@@ -23056,7 +23056,7 @@
+       export_dynamic_flag_spec_FC=-rdynamic
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -23884,7 +23884,7 @@
+   # libtool to hard-code these into programs
+   ;;
+ 
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=.dll
+   need_version=no
+@@ -23910,9 +23910,9 @@
+     shlibpath_overrides_runpath=yes
+ 
+     case $host_os in
+-    cygwin*)
++    cygwin* | msys*)
+       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+-      soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
++      soname_spec='`echo $libname | $SED -e 's/^lib/msys-/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ 
+       ;;
+     mingw* | cegcc*)
+@@ -23949,7 +23949,7 @@
+       # Convert to MSYS style.
+       sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+       ;;
+-    cygwin*)
++    cygwin* | msys*)
+       # Convert to unix form, then to dos form, then back to unix form
+       # but this time dos style (no spaces!) so that the unix form looks
+       # like /cygdrive/c/PROGRA~1:/cygdr...
+@@ -24844,7 +24844,7 @@
+       # PIC is the default for these OSes.
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -24947,7 +24947,7 @@
+       esac
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic_GO='-DDLL_EXPORT'
+@@ -25434,7 +25434,7 @@
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+@@ -25549,7 +25549,7 @@
+       fi
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, GO) is actually meaningless,
+       # as there is no search path for DLLs.
+       hardcode_libdir_flag_spec_GO='-L$libdir'
+@@ -26090,7 +26090,7 @@
+       export_dynamic_flag_spec_GO=-rdynamic
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -27073,7 +27073,7 @@
+       # PIC is the default for these OSes.
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -27176,7 +27176,7 @@
+       esac
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+ 
+@@ -27663,7 +27663,7 @@
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+@@ -27778,7 +27778,7 @@
+       fi
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+       # as there is no search path for DLLs.
+       hardcode_libdir_flag_spec_GCJ='-L$libdir'
+@@ -28319,7 +28319,7 @@
+       export_dynamic_flag_spec_GCJ=-rdynamic
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+
+diff -urN libtool-2.4.7/libltdl/configure.orig libtool-2.4.7/libltdl/configure
+--- libtool-2.4.7/libltdl/configure.orig	2022-05-25 14:29:13.245182300 +0200
++++ libtool-2.4.7/libltdl/configure	2022-05-25 14:30:03.920944200 +0200
+@@ -4774,7 +4774,7 @@
+     lt_cv_sys_max_cmd_len=-1;
+     ;;
+ 
+-  cygwin* | mingw* | cegcc*)
++  cygwin* | msys* | mingw* | cegcc*)
+     # On Win9x/ME, this test blows up -- it succeeds, but takes
+     # about 5 minutes as the teststring grows exponentially.
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+@@ -4940,7 +4940,7 @@
+       *-*-mingw* ) # actually msys
+         lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+         ;;
+-      *-*-cygwin* )
++      *-*-cygwin* | *-*-msys* )
+         lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+         ;;
+       * ) # otherwise, assume *nix
+@@ -4948,12 +4948,12 @@
+         ;;
+     esac
+     ;;
+-  *-*-cygwin* )
++  *-*-cygwin* | *-*-msys* )
+     case $build in
+       *-*-mingw* ) # actually msys
+         lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+         ;;
+-      *-*-cygwin* )
++      *-*-cygwin* | *-*-msys* )
+         lt_cv_to_host_file_cmd=func_convert_file_noop
+         ;;
+       * ) # otherwise, assume *nix
+@@ -5019,7 +5019,7 @@
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     if test yes != "$GCC"; then
+       reload_cmds=false
+     fi
+@@ -5272,7 +5272,7 @@
+   lt_cv_file_magic_test_file=/shlib/libc.so
+   ;;
+ 
+-cygwin*)
++cygwin* | msys*)
+   # func_win32_libid is a shell function defined in ltmain.sh
+   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+   lt_cv_file_magic_cmd='func_win32_libid'
+@@ -5588,7 +5588,7 @@
+   lt_cv_sharedlib_from_linklib_cmd='unknown'
+ 
+ case $host_os in
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   # two different shell functions defined in ltmain.sh;
+   # decide which one to use based on capabilities of $DLLTOOL
+   case `$DLLTOOL --help 2>&1` in
+@@ -6097,7 +6097,7 @@
+ aix*)
+   symcode='[BCDT]'
+   ;;
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   symcode='[ABCDGISTW]'
+   ;;
+ hpux*)
+@@ -7837,7 +7837,7 @@
+ enable_win32_dll=yes
+ 
+ case $host in
+-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
++*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}as; ac_word=$2
+@@ -8738,7 +8738,7 @@
+       # PIC is the default for these OSes.
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -8841,7 +8841,7 @@
+       esac
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic='-DDLL_EXPORT'
+@@ -9343,7 +9343,7 @@
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+@@ -9458,7 +9458,7 @@
+       fi
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+       # as there is no search path for DLLs.
+       hardcode_libdir_flag_spec='-L$libdir'
+@@ -9999,7 +9999,7 @@
+       export_dynamic_flag_spec=-rdynamic
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -11035,7 +11035,7 @@
+   # libtool to hard-code these into programs
+   ;;
+ 
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=.dll
+   need_version=no
+@@ -11067,6 +11067,12 @@
+ 
+       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+       ;;
++    msys*)
++      # MSYS DLLs use 'msys-' prefix rather than 'lib'
++      soname_spec='`echo $libname | sed -e 's/^lib/msys-/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
++
++      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
++      ;;
+     mingw* | cegcc*)
+       # MinGW DLLs use traditional 'lib' prefix
+       soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+@@ -11101,7 +11107,7 @@
+       # Convert to MSYS style.
+       sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+       ;;
+-    cygwin*)
++    cygwin* | msys*)
+       # Convert to unix form, then to dos form, then back to unix form
+       # but this time dos style (no spaces!) so that the unix form looks
+       # like /cygdrive/c/PROGRA~1:/cygdr...
+@@ -11803,7 +11809,7 @@
+     lt_cv_dlopen_libs=
+     ;;
+ 
+-  cygwin*)
++  cygwin* | msys*)
+     lt_cv_dlopen=dlopen
+     lt_cv_dlopen_libs=
+     ;;
+@@ -12751,7 +12757,7 @@
+ beos*)
+   LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+   ;;
+-cygwin* | mingw* | pw32*)
++cygwin* | msys* | mingw* | pw32*)
+   ac_fn_c_check_decl "$LINENO" "cygwin_conv_path" "ac_cv_have_decl_cygwin_conv_path" "#include <sys/cygwin.h>
+ "
+ if test "x$ac_cv_have_decl_cygwin_conv_path" = xyes; then :
+@@ -13166,7 +13172,7 @@
+   $as_echo_n "(cached) " >&6
+ else
+   case $host_os in #(
+-	 *cygwin*)
++	 *cygwin* | *msys*)
+ 	   lt_cv_sys_argz_works=no
+ 	   if test no != "$cross_compiling"; then
+ 	     lt_cv_sys_argz_works="guessing no"
+
+diff -urN libtool-2.4.7/m4/libtool.m4.orig libtool-2.4.7/m4/libtool.m4
+--- libtool-2.4.7/m4/libtool.m4.orig	2022-03-17 03:43:39.000000000 +0100
++++ libtool-2.4.7/m4/libtool.m4	2022-05-25 14:26:59.035745300 +0200
+@@ -1703,7 +1703,7 @@
+     lt_cv_sys_max_cmd_len=-1;
+     ;;
+ 
+-  cygwin* | mingw* | cegcc*)
++  cygwin* | msys* | mingw* | cegcc*)
+     # On Win9x/ME, this test blows up -- it succeeds, but takes
+     # about 5 minutes as the teststring grows exponentially.
+     # Worse, since 9x/ME are not pre-emptively multitasking,
+@@ -1951,7 +1951,7 @@
+     lt_cv_dlopen_libs=
+     ;;
+ 
+-  cygwin*)
++  cygwin* | msys*)
+     lt_cv_dlopen=dlopen
+     lt_cv_dlopen_libs=
+     ;;
+@@ -2541,7 +2541,7 @@
+   # libtool to hard-code these into programs
+   ;;
+ 
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   version_type=windows
+   shrext_cmds=.dll
+   need_version=no
+@@ -2567,9 +2567,9 @@
+     shlibpath_overrides_runpath=yes
+ 
+     case $host_os in
+-    cygwin*)
++    cygwin* | msys*)
+       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+-      soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
++      soname_spec='`echo $libname | $SED -e 's/^lib/msys-/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ m4_if([$1], [],[
+       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+       ;;
+@@ -2607,7 +2607,7 @@
+       # Convert to MSYS style.
+       sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+       ;;
+-    cygwin*)
++    cygwin* | msys*)
+       # Convert to unix form, then to dos form, then back to unix form
+       # but this time dos style (no spaces!) so that the unix form looks
+       # like /cygdrive/c/PROGRA~1:/cygdr...
+@@ -3385,7 +3385,7 @@
+ esac
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     if test yes != "$GCC"; then
+       reload_cmds=false
+     fi
+@@ -3478,7 +3478,7 @@
+   lt_cv_file_magic_test_file=/shlib/libc.so
+   ;;
+ 
+-cygwin*)
++cygwin* | msys*)
+   # func_win32_libid is a shell function defined in ltmain.sh
+   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+   lt_cv_file_magic_cmd='func_win32_libid'
+@@ -3791,7 +3791,7 @@
+ [lt_cv_sharedlib_from_linklib_cmd='unknown'
+ 
+ case $host_os in
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   # two different shell functions defined in ltmain.sh;
+   # decide which one to use based on capabilities of $DLLTOOL
+   case `$DLLTOOL --help 2>&1` in
+@@ -3861,7 +3861,7 @@
+ [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ LIBM=
+ case $host in
+-*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
++*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-msys* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+   # These system don't have libm, or don't need it
+   ;;
+ *-ncr-sysv4.3*)
+@@ -3936,7 +3936,7 @@
+ aix*)
+   symcode='[[BCDT]]'
+   ;;
+-cygwin* | mingw* | pw32* | cegcc*)
++cygwin* | msys* | mingw* | pw32* | cegcc*)
+   symcode='[[ABCDGISTW]]'
+   ;;
+ hpux*)
+@@ -4242,7 +4242,7 @@
+     beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+       # PIC is the default for these OSes.
+       ;;
+-    mingw* | cygwin* | os2* | pw32* | cegcc*)
++    mingw* | cygwin* | msys* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -4318,7 +4318,7 @@
+ 	  ;;
+ 	esac
+ 	;;
+-      mingw* | cygwin* | os2* | pw32* | cegcc*)
++      mingw* | cygwin* | msys* | os2* | pw32* | cegcc*)
+ 	# This hack is so that the source file can tell whether it is being
+ 	# built for inclusion in a dll (and should export symbols for example).
+ 	m4_if([$1], [GCJ], [],
+@@ -4566,7 +4566,7 @@
+       # PIC is the default for these OSes.
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       # Although the cygwin gcc ignores -fPIC, still need this for old-style
+@@ -4670,7 +4670,7 @@
+       esac
+       ;;
+ 
+-    mingw* | cygwin* | pw32* | os2* | cegcc*)
++    mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       m4_if([$1], [GCJ], [],
+@@ -4945,7 +4945,7 @@
+   pw32*)
+     _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
+     ;;
+-  cygwin* | mingw* | cegcc*)
++  cygwin* | msys* | mingw* | cegcc*)
+     case $cc_basename in
+     cl* | icl*)
+       _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+@@ -5003,7 +5003,7 @@
+   extract_expsyms_cmds=
+ 
+   case $host_os in
+-  cygwin* | mingw* | pw32* | cegcc*)
++  cygwin* | msys* | mingw* | pw32* | cegcc*)
+     # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+     # When not using gcc, we currently assume that we are using
+     # Microsoft Visual C++ or Intel C++ Compiler.
+@@ -5118,7 +5118,7 @@
+       fi
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+       # as there is no search path for DLLs.
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+@@ -5575,7 +5575,7 @@
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+       ;;
+ 
+-    cygwin* | mingw* | pw32* | cegcc*)
++    cygwin* | msys* | mingw* | pw32* | cegcc*)
+       # When not using gcc, we currently assume that we are using
+       # Microsoft Visual C++ or Intel C++ Compiler.
+       # hardcode_libdir_flag_spec is actually meaningless, as there is
+@@ -6651,7 +6651,7 @@
+         esac
+         ;;
+ 
+-      cygwin* | mingw* | pw32* | cegcc*)
++      cygwin* | msys* | mingw* | pw32* | cegcc*)
+ 	case $GXX,$cc_basename in
+ 	,cl* | no,cl* | ,icl* | no,icl*)
+ 	  # Native MSVC or ICC
+@@ -8348,7 +8348,7 @@
+       *-*-mingw* ) # actually msys
+         lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+         ;;
+-      *-*-cygwin* )
++      *-*-cygwin* | *-*-msys* )
+         lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+         ;;
+       * ) # otherwise, assume *nix
+@@ -8356,12 +8356,12 @@
+         ;;
+     esac
+     ;;
+-  *-*-cygwin* )
++  *-*-cygwin* | *-*-msys* )
+     case $build in
+       *-*-mingw* ) # actually msys
+         lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+         ;;
+-      *-*-cygwin* )
++      *-*-cygwin* | *-*-msys* )
+         lt_cv_to_host_file_cmd=func_convert_file_noop
+         ;;
+       * ) # otherwise, assume *nix
+
+diff -Naur libtool-2.4.2.418-orig/m4/ltdl.m4 libtool-2.4.2.418/m4/ltdl.m4
+--- libtool-2.4.2.418-orig/m4/ltdl.m4	2013-10-26 03:37:46.000000000 +0400
++++ libtool-2.4.2.418/m4/ltdl.m4	2014-09-02 10:19:58.102800000 +0400
+@@ -706,7 +706,7 @@
+ beos*)
+   LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+   ;;
+-cygwin* | mingw* | pw32*)
++cygwin* | msys* | mingw* | pw32*)
+   AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include <sys/cygwin.h>]])
+   LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la"
+   ;;
+
+diff -Naur libtool-2.4.2.418-orig/m4/ltoptions.m4 libtool-2.4.2.418/m4/ltoptions.m4
+--- libtool-2.4.2.418-orig/m4/ltoptions.m4	2013-10-26 03:37:46.000000000 +0400
++++ libtool-2.4.2.418/m4/ltoptions.m4	2014-09-02 10:20:19.069200000 +0400
+@@ -126,7 +126,7 @@
+ [enable_win32_dll=yes
+ 
+ case $host in
+-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
++*-*-cygwin* | *-*-msys* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+   AC_CHECK_TOOL(AS, as, false)
+   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+   AC_CHECK_TOOL(OBJDUMP, objdump, false)
+
+diff -Naur libtool-2.4.2.418-orig/tests/bindir.at libtool-2.4.2.418/tests/bindir.at
+--- libtool-2.4.2.418-orig/tests/bindir.at	2013-01-26 08:19:10.000000000 +0400
++++ libtool-2.4.2.418/tests/bindir.at	2014-09-02 10:21:21.999600000 +0400
+@@ -65,7 +65,7 @@
+ 
+ bindirneeded=:
+ case $host_os in
+-  cygwin*|mingw*|cegcc*)
++  cygwin*|msys*|mingw*|cegcc*)
+     ;;
+   *)
+     bindirneeded=false
+@@ -174,7 +174,7 @@
+ 
+ bindirneeded=:
+ case $host_os in
+-  cygwin*|mingw*|cegcc*)
++  cygwin*|msys*|mingw*|cegcc*)
+     ;;
+   *)
+     bindirneeded=false
+
+diff -Naur libtool-2.4.2.418-orig/tests/lt_dladvise.at libtool-2.4.2.418/tests/lt_dladvise.at
+--- libtool-2.4.2.418-orig/tests/lt_dladvise.at	2013-01-01 21:36:01.000000000 +0400
++++ libtool-2.4.2.418/tests/lt_dladvise.at	2014-09-02 10:20:51.298800000 +0400
+@@ -332,7 +332,7 @@
+ $LIBTOOL --features | grep 'enable shared libraries' >/dev/null && have_shared=:
+ 
+ case $host_os,$have_shared in
+-cygwin* | mingw* | cegcc* | *,false)
++cygwin* | msys* | mingw* | cegcc* | *,false)
+   # These hosts do not support linking without -no-undefined
+   CPPFLAGS="$CPPFLAGS -DHAVE_UNDEFINED_SYMBOLS=0"
+   ;;

+ 12 - 0
contrib/autotools-patches/0010-libtool-2.4.2-include-process-h-mod.patch → contrib/fixes-libtool/0010-libtool-2.4.2-include-process-h.patch

@@ -1,3 +1,15 @@
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
+index 0418007..91276c2 100644
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
+@@ -4163,6 +4163,7 @@
+ # include <unistd.h>
+ # include <stdint.h>
+ # ifdef __CYGWIN__
++#  include <process.h>
+ #  include <io.h>
+ # endif
+ #endif
 diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
 index 0418007..91276c2 100644
 --- a/build-aux/ltmain.sh

+ 0 - 0
contrib/autotools-patches/0011-Pick-up-clang_rt-static-archives-compiler-internal-l.patch → contrib/fixes-libtool/0011-Pick-up-clang_rt-static-archives-compiler-internal-l.patch


+ 3 - 3
contrib/autotools-patches/0012-Prefer-response-files-over-linker-scripts-for-mingw-mod.patch → contrib/fixes-libtool/0012-Prefer-response-files-over-linker-scripts-for-mingw-.patch

@@ -12,10 +12,10 @@ list of files is overkill for cases when a response file is enough.
  m4/libtool.m4       |  2 ++
  2 files changed, 16 insertions(+), 14 deletions(-)
 
-diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
 index e2fb263..db5d590 100644
---- a/build-aux/ltmain.sh
-+++ b/build-aux/ltmain.sh
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
 @@ -7932,20 +7932,7 @@ EOF
  	  last_robj=
  	  k=1

+ 3 - 3
contrib/autotools-patches/0013-Allow-statically-linking-compiler-support-libraries-mod.patch → contrib/fixes-libtool/0013-Allow-statically-linking-compiler-support-libraries-.patch

@@ -11,10 +11,10 @@ here.
  build-aux/ltmain.in | 11 +++++++++--
  1 file changed, 9 insertions(+), 2 deletions(-)
 
-diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
 index e2fb2633..db4d775c 100644
---- a/build-aux/ltmain.sh
-+++ b/build-aux/ltmain.sh
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
 @@ -5870,8 +5870,15 @@ func_mode_link ()
  	  fi
  	  case $linkmode in

+ 3 - 3
contrib/autotools-patches/0014-Support-llvm-objdump-f-output-mod.patch → contrib/fixes-libtool/0014-Support-llvm-objdump-f-output.patch

@@ -8,10 +8,10 @@ Subject: [PATCH] Support llvm-objdump -f output
  m4/libtool.m4       | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
+diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in
 index a9f070a..4a434cc 100644
---- a/build-aux/ltmain.sh
-+++ b/build-aux/ltmain.sh
+--- a/build-aux/ltmain.in
++++ b/build-aux/ltmain.in
 @@ -3019,7 +3019,7 @@ func_win32_libid ()
    *ar\ archive*) # could be an import, or static
      # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.

+ 65 - 0
contrib/fixes-libtool/apply-all.sh

@@ -0,0 +1,65 @@
+#!/bin/bash
+
+#
+# This file applies optional libtool patches mainly for better MSys2 compatibility,
+# especially for MSys2/Clang{64,32} toolchains.
+# It's a pity that these patches haven't been sent upstream.
+#
+# Based on Debian SID baseline files as of April 2023.
+#
+
+patchesdir=$(dirname $BASH_SOURCE) || exit 2
+test -n "$patchesdir" || exit 2
+cd "$patchesdir" || exit 2
+patchesdir=$(pwd) || exit 2
+
+patches=(
+  0003-Pass-various-runtime-library-flags-to-GCC.mingw.mod.patch
+  0006-Fix-strict-ansi-vs-posix.patch
+  0009-libtool-2.4.2.418-msysize.patch
+  0010-libtool-2.4.2-include-process-h.patch
+  0011-Pick-up-clang_rt-static-archives-compiler-internal-l.patch
+  0012-Prefer-response-files-over-linker-scripts-for-mingw-.patch
+  0013-Allow-statically-linking-compiler-support-libraries-.patch
+  0014-Support-llvm-objdump-f-output.patch
+)
+
+failed=( )
+
+cd "${patchesdir}/../.." || exit 1
+
+patch_params="-Nf -p1 --no-backup-if-mismatch -r - --read-only=fail"
+
+for patch in ${patches[@]}; do
+  patchfile="${patchesdir}/${patch}"
+  # Load patch into memory for simplicity
+  # Patches should not be very large
+  if grep -Eq -e '^--- .*\/ltmain\.in(\.orig)?([[:space:]]|$)' "$patchfile" && grep -Eq -e '^--- .*\/ltmain\.sh(\.orig)?([[:space:]]|$)' "$patchfile"
+  then
+    patch_data=$(awk '/^diff .*\/ltmain\.in(\.orig)?$/||(/^--- / && $2 ~ /\/ltmain\.in(\.orig)?$/){h=1;s=1;next}/^-- ?$/{h=0;s=0}/^[^-+@ ]/{h||s=0}/^\+\+\+ /{h=0}!s' "$patchfile") || exit 2
+  else
+    patch_data=$(cat "$patchfile") || exit 2
+  fi
+  patch_data=$(echo "$patch_data" | sed -E -e '/^(diff|---|\+\+\+) / s|/ltmain\.in|/ltmain.sh|g' -) || exit 2
+  patch_data=$(echo "$patch_data" | awk '(/^diff / && !/.*\/(ltmain\.sh|config\.guess|libtool\.m4|ltoptions\.m4)$/)||(/^--- / && $2 !~ /\/(ltmain\.sh|config\.guess|libtool\.m4|ltoptions\.m4)(\.orig)?$/){h=1;s=1;next}/^-- ?$/{h=0;s=0}/^[^-+@ ]/{h||s=0}/^\+\+\+ /{h=0}!s' -) || exit 2
+  echo "*** Applying $patch..."
+  if echo "$patch_data" | patch $patch_params -i -
+  then
+    echo "** $patch successfully applied."
+  else
+    echo "** $patch failed."
+    failed+=("$patch")
+  fi
+  unset patch_data
+done
+
+echo ''
+
+if [[ -n "${failed[@]}" ]]; then
+  printf '* Failed patch: %s\n' "${failed[@]}" >&2
+  exit 2
+else
+  echo "* All patches have been successfully applied."
+fi
+
+exit 0

+ 96 - 0
contrib/make-dist.sh

@@ -0,0 +1,96 @@
+#!/bin/bash
+
+#
+# This file creates dist tarball.
+# Optional autotools patches are applied for better toolchains
+# compatibility.
+#
+# Based on Debian SID baseline files as of April 2023.
+#
+
+if ! grep -Eq -e '^PRETTY_NAME="Debian GNU/Linux 12 \(bookworm\)"$' /etc/os-release
+then
+  echo "Only Debian 'bookworm' is supported by this script." >&2
+  exit 1
+fi
+
+if ! autoconf --version | head -1 | grep -Eq -e ' 2\.71$' -
+then
+  echo "The only supported autoconf version is 2.71." >&2
+  exit 1
+fi
+
+
+tooldir=$(dirname $BASH_SOURCE) || exit 2
+test -n "$tooldir" || exit 2
+cd "$tooldir" || exit 2
+tooldir="$PWD" || exit 2
+cd "${tooldir}/.." || exit 2
+rootsrcdir="$PWD" || exit 2
+
+# Cleanup sources
+echo ''
+echo '*** Performing initial cleanup...'
+echo ''
+if [[ ! -f 'Makefile' ]] || ! make maintainer-clean
+then
+  # Makefile needed for initial cleanup
+  if [[ ! -f 'Makefile.in' ]] || [[ ! -f 'configure' ]] || ! ./configure || ! make maintainer-clean
+  then
+    rm -f po/Makefile || exit 3
+    # Build 'configure' to build Makefile for initial cleanup
+    autoreconf -fvi || exit 3
+    ./configure || exit 3
+    make maintainer-clean || exit 3
+  fi
+fi
+echo ''
+echo '** Initial cleanup completed.'
+echo ''
+
+# Copy latest autotools files
+echo ''
+echo '*** Copying autotools files...'
+echo ''
+autoreconf -fvi || exit 4
+echo ''
+echo '*** Performing intermediate cleanup...'
+echo ''
+./configure || exit 4
+make distclean || exit 4
+rm -f ./configure ./aclocal.m4 || exit 4
+rm -rf ./autom4te.cache || exit 4
+echo ''
+echo '** Intermediate cleanup completed.'
+echo ''
+
+# Patching local autotools files
+echo ''
+echo '*** Performing patching of local autotools files...'
+echo ''
+"$tooldir/fixes-libtool/apply-all.sh" || exit 5
+"$tooldir/fixes-autoconf/apply-all.sh" || exit 5
+echo ''
+echo '** Local autotools files patched.'
+echo ''
+
+# Build the configure and the related files with patches
+echo ''
+echo '*** Building patched configure and related files...'
+echo ''
+autoreconf -v || exit 6
+echo ''
+echo '** Patched build system ready.'
+echo ''
+
+# Build the configure and the related files with patches
+echo ''
+echo '*** Building dist tarball...'
+echo ''
+./configure || exit 7
+make dist || exit 7
+echo ''
+echo '** Dist tarball ready.'
+echo ''
+
+exit 0

+ 1 - 0
m4/.gitignore

@@ -3,3 +3,4 @@
 /ltsugar.m4
 /ltoptions.m4
 /libtool.m4
+/c_backported.m4

+ 124 - 0
m4/ax_check_openssl.m4

@@ -0,0 +1,124 @@
+# ===========================================================================
+#     https://www.gnu.org/software/autoconf-archive/ax_check_openssl.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_OPENSSL([action-if-found[, action-if-not-found]])
+#
+# DESCRIPTION
+#
+#   Look for OpenSSL in a number of default spots, or in a user-selected
+#   spot (via --with-openssl).  Sets
+#
+#     OPENSSL_INCLUDES to the include directives required
+#     OPENSSL_LIBS to the -l directives required
+#     OPENSSL_LDFLAGS to the -L or -R flags required
+#
+#   and calls ACTION-IF-FOUND or ACTION-IF-NOT-FOUND appropriately
+#
+#   This macro sets OPENSSL_INCLUDES such that source files should use the
+#   openssl/ directory in include directives:
+#
+#     #include <openssl/hmac.h>
+#
+# LICENSE
+#
+#   Copyright (c) 2009,2010 Zmanda Inc. <http://www.zmanda.com/>
+#   Copyright (c) 2009,2010 Dustin J. Mitchell <[email protected]>
+#
+#   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 11
+
+AU_ALIAS([CHECK_SSL], [AX_CHECK_OPENSSL])
+AC_DEFUN([AX_CHECK_OPENSSL], [
+    found=false
+    AC_ARG_WITH([openssl],
+        [AS_HELP_STRING([--with-openssl=DIR],
+            [root of the OpenSSL directory])],
+        [
+            case "$withval" in
+            "" | y | ye | yes | n | no)
+            AC_MSG_ERROR([Invalid --with-openssl value])
+              ;;
+            *) ssldirs="$withval"
+              ;;
+            esac
+        ], [
+            # if pkg-config is installed and openssl has installed a .pc file,
+            # then use that information and don't search ssldirs
+            AC_CHECK_TOOL([PKG_CONFIG], [pkg-config])
+            if test x"$PKG_CONFIG" != x""; then
+                OPENSSL_LDFLAGS=`$PKG_CONFIG openssl --libs-only-L 2>/dev/null`
+                if test $? = 0; then
+                    OPENSSL_LIBS=`$PKG_CONFIG openssl --libs-only-l 2>/dev/null`
+                    OPENSSL_INCLUDES=`$PKG_CONFIG openssl --cflags-only-I 2>/dev/null`
+                    found=true
+                fi
+            fi
+
+            # no such luck; use some default ssldirs
+            if ! $found; then
+                ssldirs="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr"
+            fi
+        ]
+        )
+
+
+    # note that we #include <openssl/foo.h>, so the OpenSSL headers have to be in
+    # an 'openssl' subdirectory
+
+    if ! $found; then
+        OPENSSL_INCLUDES=
+        for ssldir in $ssldirs; do
+            AC_MSG_CHECKING([for include/openssl/ssl.h in $ssldir])
+            if test -f "$ssldir/include/openssl/ssl.h"; then
+                OPENSSL_INCLUDES="-I$ssldir/include"
+                OPENSSL_LDFLAGS="-L$ssldir/lib"
+                OPENSSL_LIBS="-lssl -lcrypto"
+                found=true
+                AC_MSG_RESULT([yes])
+                break
+            else
+                AC_MSG_RESULT([no])
+            fi
+        done
+
+        # if the file wasn't found, well, go ahead and try the link anyway -- maybe
+        # it will just work!
+    fi
+
+    # try the preprocessor and linker with our new flags,
+    # being careful not to pollute the global LIBS, LDFLAGS, and CPPFLAGS
+
+    AC_MSG_CHECKING([whether compiling and linking against OpenSSL works])
+    echo "Trying link with OPENSSL_LDFLAGS=$OPENSSL_LDFLAGS;" \
+        "OPENSSL_LIBS=$OPENSSL_LIBS; OPENSSL_INCLUDES=$OPENSSL_INCLUDES" >&AS_MESSAGE_LOG_FD
+
+    save_LIBS="$LIBS"
+    save_LDFLAGS="$LDFLAGS"
+    save_CPPFLAGS="$CPPFLAGS"
+    LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS"
+    LIBS="$OPENSSL_LIBS $LIBS"
+    CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS"
+    AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM([#include <openssl/ssl.h>], [SSL_new(NULL)])],
+        [
+            AC_MSG_RESULT([yes])
+            $1
+        ], [
+            AC_MSG_RESULT([no])
+            $2
+        ])
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+
+    AC_SUBST([OPENSSL_INCLUDES])
+    AC_SUBST([OPENSSL_LIBS])
+    AC_SUBST([OPENSSL_LDFLAGS])
+])

+ 7 - 4
m4/libcurl.m4

@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 2006 - 2020, David Shaw <[email protected]>
+# Copyright (C) David Shaw <[email protected]>
 #
 # This software is licensed as described in the file COPYING, which
 # you should have received as part of this distribution. The terms
@@ -18,6 +18,8 @@
 # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 # KIND, either express or implied.
 #
+# SPDX-License-Identifier: curl
+#
 ###########################################################################
 # LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION],
 #                       [ACTION-IF-YES], [ACTION-IF-NO])
@@ -197,9 +199,10 @@ if (x) {;}
            _libcurl_save_libs=$LIBS
            LIBS="$LIBS $LIBCURL"
 
-           AC_CHECK_FUNC(curl_free,,
-              AC_DEFINE(curl_free,free,
-                [Define curl_free() as free() if our version of curl lacks curl_free.]))
+           AC_CHECK_DECL([curl_free],[],
+              [AC_DEFINE([curl_free],[free],
+                [Define curl_free() as free() if our version of curl lacks curl_free.])],
+              [[#include <curl/curl.h>]])
 
            CPPFLAGS=$_libcurl_save_cppflags
            LIBS=$_libcurl_save_libs

+ 63 - 38
m4/mhd_check_func.m4

@@ -9,13 +9,15 @@
 #
 #   This macro checks for presence of specific function by including
 #   specified headers and compiling and linking CHECK_CODE.
-#   This check both declaration and presence in library.
+#   This checks both declaration and presence in library.
+#   If function is available then macro HAVE_function_name (the name
+#   of the function convetedd to all uppercase characters) is defined
+#   automatically.
 #   Unlike AC_CHECK_FUNCS macro, this macro do not produce false
 #   negative result if function is declared with specific calling
 #   conventions like __stdcall' or attribute like
-#   __attribute__((__dllimport__)) and linker failed to build test
-#   program if library contains function with calling conventions
-#   different from declared. 
+#   __attribute__((__dllimport__)) and linker failing to build test
+#   program due to the different calling conventions. 
 #   By using definition from provided headers, this macro ensures that
 #   correct calling convention is used for detection.
 #
@@ -26,54 +28,77 @@
 #                    [const void *ptr = memmem("aa", 2, "a", 1); (void)ptr;],
 #                    [var_use_memmem='yes'], [var_use_memmem='no'])
 #
-#   Defined cache variable used in check so if any test will not work
+#   The cache variable used in check so if any test will not work
 #   correctly on some platform, user may simply fix it by giving cache
 #   variable in configure parameters, for example:
 #
 #     ./configure mhd_cv_func_memmem_have=no
 #
-#   This simplify building from source on exotic platforms as patching
+#   This simplifies building from source on exotic platforms as patching
 #   of configure.ac is not required to change results of tests.
 #
 # LICENSE
 #
-#   Copyright (c) 2019-2022 Karlson2k (Evgeny Grin) <[email protected]>
+#   Copyright (c) 2019-2023 Karlson2k (Evgeny Grin) <[email protected]>
 #
 #   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 3
+#serial 5
 
 AC_DEFUN([MHD_CHECK_FUNC],[dnl
-  AC_PREREQ([2.64])dnl for AS_VAR_IF, m4_ifblank, m4_ifnblank
-  m4_ifblank(m4_translit([$1],[()],[  ]), [m4_fatal([First macro argument must not be empty])])dnl
-  m4_ifblank([$3], [m4_fatal([Third macro argument must not be empty])])dnl
-  m4_bmatch(m4_normalize([$1]), [\s],dnl
-            [m4_fatal([First macro argument must not contain whitespaces])])dnl
-  m4_if(m4_index([$3], m4_normalize(m4_translit([$1],[()],[  ]))), [-1], dnl
-        [m4_fatal([CHECK_CODE parameter (third macro argument) does not contain ']m4_normalize([$1])[' token])])dnl
-  AS_VAR_PUSHDEF([cv_Var], [mhd_cv_func_]m4_bpatsubst(_mhd_norm_expd(m4_translit([$1],[()],[  ])),[[^a-zA-Z0-9]],[_]))dnl
-  dnl
-  AC_CACHE_CHECK([for function $1], cv_Var,
-    [dnl
-      m4_ifnblank([$6],[dnl
-        mhd_check_func_SAVE_LIBS="$LIBS"
-        LIBS="$LIBS _mhd_norm_expd([$6])"
-      ])dnl
-      AC_LINK_IFELSE(
-        [AC_LANG_PROGRAM([m4_default_nblank([$2],[AC_INCLUDES_DEFAULT])], [$3]) ],
-        [AS_VAR_SET([cv_Var],["yes"])], [AS_VAR_SET([cv_Var],["no"])] ) 
-      m4_ifnblank([$6],[dnl
-        LIBS="${mhd_check_func_SAVE_LIBS}"
-        AS_UNSET([mhd_check_func_SAVE_LIBS])
-      ])dnl
-    ])
-  AS_VAR_IF([cv_Var], ["yes"],
-            [AC_DEFINE([[HAVE_]]m4_bpatsubst(m4_toupper(_mhd_norm_expd(m4_translit([$1],[()],[  ]))),[[^A-Z0-9]],[_]),
-                       [1], [Define to 1 if you have the ']_mhd_norm_expd(m4_translit([$1],[()],[  ]))[' function.])
-            m4_n([$4])dnl
-            ], [$5])
-  AS_VAR_POPDEF([cv_Var])dnl
-])
+AC_PREREQ([2.64])dnl for AS_VAR_IF, m4_ifblank, m4_ifnblank
+m4_newline([[# Expansion of $0 macro starts here]])
+AC_LANG_ASSERT([C])dnl
+m4_ifblank(m4_translit([$1],[()],[  ]), [m4_fatal([First macro argument must not be empty])])dnl
+m4_ifblank([$3], [m4_fatal([Third macro argument must not be empty])])dnl
+m4_bmatch(m4_normalize([$1]), [\s],dnl
+          [m4_fatal([First macro argument must not contain whitespaces])])dnl
+m4_if(m4_index([$3], m4_normalize(m4_translit([$1],[()],[  ]))), [-1], dnl
+      [m4_fatal([CHECK_CODE parameter (third macro argument) does not contain ']m4_normalize([$1])[' token])])dnl
+AS_VAR_PUSHDEF([decl_cv_Var],[ac_cv_have_decl_]m4_bpatsubst(_mhd_norm_expd(m4_translit([$1],[()],[  ])),[[^a-zA-Z0-9]],[_]))dnl
+AS_VAR_PUSHDEF([cv_Var],[mhd_cv_func_]m4_bpatsubst(_mhd_norm_expd(m4_translit([$1],[()],[  ])),[[^a-zA-Z0-9]],[_]))dnl
+AS_VAR_SET_IF([cv_Var],[],[AC_CHECK_DECL(_mhd_norm_expd([$1]),[],[],[$2])])
+AC_CACHE_CHECK([for function $1], [cv_Var],dnl
+  [dnl
+    AS_VAR_IF([decl_cv_Var],["yes"],dnl
+      [dnl
+        m4_ifnblank([$6],[dnl
+          mhd_check_func_SAVE_LIBS="$LIBS"
+          LIBS="_mhd_norm_expd([$6]) $LIBS"
+        ])dnl
+        AC_LINK_IFELSE(
+          [AC_LANG_SOURCE([
+m4_default_nblank([$2],[AC_INCLUDES_DEFAULT])
+
+[int main(void)
+{
+
+  ]$3[
+
+  return 0;
+}
+            ]])
+          ],
+          [AS_VAR_SET([cv_Var],["yes"])],
+          [AS_VAR_SET([cv_Var],["no"])]dnl
+        )
+        m4_ifnblank([$6],[dnl
+          LIBS="${mhd_check_func_SAVE_LIBS}"
+          AS_UNSET([mhd_check_func_SAVE_LIBS])
+        ])dnl
+      ],[AS_VAR_SET([cv_Var],["no"])]dnl
+    )dnl
+  ]dnl
+)
+AS_VAR_IF([cv_Var], ["yes"],
+          [AC_DEFINE([[HAVE_]]m4_bpatsubst(m4_toupper(_mhd_norm_expd(m4_translit([$1],[()],[  ]))),[[^A-Z0-9]],[_]),
+                     [1], [Define to 1 if you have the ']_mhd_norm_expd(m4_translit([$1],[()],[  ]))[' function.])
+          m4_n([$4])dnl
+          ],[$5])
+AS_VAR_POPDEF([cv_Var])dnl
+AS_VAR_POPDEF([decl_cv_Var])dnl
+m4_newline([[# Expansion of $0 macro ends here]])
+])dnl AC_DEFUN MHD_CHECK_FUNC

+ 53 - 0
m4/mhd_check_func_gettimeofday.m4

@@ -0,0 +1,53 @@
+# SYNOPSIS
+#
+#   MHD_CHECK_FUNC_GETTIMEOFDAY([ACTION-IF-AVAILABLE],
+#                               [ACTION-IF-NOT-AVAILABLE])
+#
+# DESCRIPTION
+#
+#   This macro checks for presence of gettimeofday() function.
+#   If function is available macro HAVE_GETTIMEOFDAY is defined
+#   automatically.
+#
+#   Example usage:
+#
+#     MHD_CHECK_FUNC_GETTIMEOFDAY([var_use_gettimeofday='yes'])
+#
+#   The cache variable used in check so if any test will not work
+#   correctly on some platform, user may simply fix it by giving cache
+#   variable in configure parameters, for example:
+#
+#     ./configure mhd_cv_func_memmem_have=no
+#
+#   This simplifies building from source on exotic platforms as patching
+#   of configure.ac is not required to change results of tests.
+#
+# LICENSE
+#
+#   Copyright (c) 2019-2023 Karlson2k (Evgeny Grin) <[email protected]>
+#
+#   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 1
+
+AC_DEFUN([MHD_CHECK_FUNC_GETTIMEOFDAY],[dnl
+AC_CHECK_HEADERS([sys/time.h time.h])dnl
+MHD_CHECK_FUNC([[gettimeofday]],
+  [[
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif /* HAVE_SYS_TIME_H */
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif /* HAVE_TIME_H */
+  ]],
+  [[
+  struct timeval tv;
+  if (0 != gettimeofday (&tv, (void*) 0))
+    return 1;
+  ]],[$1],[$2]
+)
+])dnl AC_DEFUN MHD_CHECK_FUNC_GETTIMEOFDAY

+ 4 - 4
m4/mhd_check_link_run.m4

@@ -17,9 +17,9 @@
 #   Example usage:
 #
 #     MHD_CHECK_LINK_RUN([for valid snprintf()], [mhd_cv_snprintf_valid],
-#                        AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
-#                                        [if (4 != snprintf(NULL, 0, "test"))
-#                                           return 2;])],
+#                        [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+#                                         [if (4 != snprintf(NULL, 0, "test"))
+#                                            return 2;])],
 #                        [mhd_cv_snprintf_valid='assuming no'])
 #
 #
@@ -32,7 +32,7 @@
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 1
+#serial 2
 
 AC_DEFUN([MHD_CHECK_LINK_RUN],[dnl
 m4_ifblank([$1],[m4_fatal([$0: The first macro argument ("MESSAGE") must not be empty])])dnl

+ 142 - 0
m4/mhd_find_lib.m4

@@ -0,0 +1,142 @@
+# SYNOPSIS
+#
+#   MHD_FIND_LIB([FUNCTION_NAME],
+#                [INCLUDES=AC_INCLUDES_DEFAULT], [CHECK_CODE],
+#                [LIBS_TO_CHECK],
+#                [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+#                [VAR_TO_PREPEND_LIB=LIBS], [ADDITIONAL_LIBS])
+#
+# DESCRIPTION
+#
+#   This macro checks for presence of specific function by including
+#   specified headers and compiling and linking CHECK_CODE.
+#   This checks both the declaration and the presence in library.
+#   If declaration is not found in headers then libraries are not
+#   checked.
+#   LIBS_TO_CHECK is whitespace-separated list of libraries to check.
+#   The macro first tries to link without any library, and if it fails
+#   the libraries are checked one by one. 
+#   The required library (if any) prepended to VAR_TO_PREPEND_LIB (or
+#   to the LIBS variable if VAR_TO_APPEND_LIB is not specified).
+#   By using definition from provided headers, this macro ensures that
+#   correct calling convention is used for detection.
+#
+#   Example usage:
+#
+#     MHD_FIND_LIB([clock_gettime],
+#                  [[#include <time.h>]],
+#                  [[struct timespec tp;
+#                    if (0 > clock_gettime(CLOCK_REALTIME, &tp)) return 3;]],
+#                  [rt],
+#                  [var_use_gettime='yes'],[var_use_gettime='no'])
+#
+#   Defined cache variable used in the check so if any test will not
+#   work correctly on some platform, a user may simply fix it by giving
+#   cache variable in configure parameters, for example:
+#
+#     ./configure mhd_cv_find_clock_gettime=no
+#
+#   This simplifies building from source on exotic platforms as patching
+#   of configure.ac is not required to change results of tests.
+#
+# LICENSE
+#
+#   Copyright (c) 2023 Karlson2k (Evgeny Grin) <[email protected]>
+#
+#   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 1
+
+AC_DEFUN([MHD_FIND_LIB],[dnl
+AC_PREREQ([2.64])dnl for AS_VAR_IF, m4_ifblank, m4_ifnblank
+m4_newline([[# Expansion of $0 macro starts here]])
+AC_LANG_ASSERT([C])dnl
+m4_ifblank(m4_translit([$1],[()],[  ]), [m4_fatal([First macro argument FUNCTION_NAME must not be empty])])dnl
+m4_ifblank([$3], [m4_fatal([Third macro argument CHECK_CODE must not be empty])])dnl
+m4_bmatch(m4_normalize([$1]), [\s],dnl
+          [m4_fatal([First macro argument FUNCTION_NAME must not contain whitespaces])])dnl
+m4_if(m4_index([$3], m4_normalize(m4_translit([$1],[()],[  ]))), [-1], dnl
+      [m4_fatal([CHECK_CODE parameter (third macro argument) does not contain ']m4_normalize([$1])[' token])])dnl
+m4_bmatch([$7], [\$], [m4_fatal([$0: Seventh macro argument VAR_TO_PREPEND_LIB must not contain '$'])])dnl
+_MHD_FIND_LIB_BODY([$1],[$2],[$3],[$4],[$5],[$6],m4_default_nblank(_mhd_norm_expd([$7]),[LIBS]),[$8])dnl
+])dnl AC_DEFUN MHD_FIND_LIB
+
+# SYNOPSIS
+#
+#   _MHD_FIND_LIB_BODY([1_FUNCTION_NAME],
+#                      [2_INCLUDES=AC_INCLUDES_DEFAULT], [3_CHECK_CODE],
+#                      [4_LIBS_TO_CHECK],
+#                      [5_ACTION-IF-FOUND], [6_ACTION-IF-NOT-FOUND],
+#                      [7_VAR_TO_PREPEND_LIB=LIBS], [8_ADDITIONAL_LIBS])
+
+AC_DEFUN([_MHD_FIND_LIB_BODY],[dnl
+AS_VAR_PUSHDEF([decl_cv_Var],[ac_cv_have_decl_]m4_bpatsubst(_mhd_norm_expd(m4_translit([$1],[()],[  ])),[[^a-zA-Z0-9]],[_]))dnl
+AS_VAR_PUSHDEF([cv_Var], [mhd_cv_find_lib_]m4_bpatsubst(_mhd_norm_expd(m4_translit([$1],[()],[  ])),[[^a-zA-Z0-9]],[_]))dnl
+AS_VAR_SET_IF([cv_Var],[],[AC_CHECK_DECL(_mhd_norm_expd([$1]),[],[],[$2])])
+AC_CACHE_CHECK([for library containing function $1], [cv_Var],
+  [
+    AS_VAR_IF([decl_cv_Var],["yes"],dnl
+      [dnl
+        mhd_find_lib_SAVE_LIBS="$LIBS"
+        m4_if([$7],LIBS,[dnl
+            mhd_find_lib_CHECK_LIBS="_mhd_norm_expd([$8]) $LIBS"
+          ],[dnl
+            mhd_find_lib_CHECK_LIBS="[$]$7 _mhd_norm_expd([$8]) $LIBS"
+          ]
+        )
+        # Reuse the same source file
+        AC_LANG_CONFTEST(
+          [AC_LANG_SOURCE([
+m4_default_nblank([$2],[AC_INCLUDES_DEFAULT])
+
+[int main(void)
+{
+
+  ]$3[
+
+  return 0;
+}
+             ]])
+          ]
+        )
+        for mhd_find_lib_LIB in '' $4
+        do
+          AS_IF([test -z "${mhd_find_lib_LIB}"],
+            [LIBS="${mhd_find_lib_CHECK_LIBS}"],
+            [LIBS="-l${mhd_find_lib_LIB} ${mhd_find_lib_CHECK_LIBS}"]
+          )
+          AC_LINK_IFELSE([],
+            [
+              AS_IF([test -z "${mhd_find_lib_LIB}"],
+                [AS_VAR_SET([cv_Var],["none required"])],
+                [AS_VAR_SET([cv_Var],["-l${mhd_find_lib_LIB}"])]
+              )
+            ]
+          )
+          AS_VAR_SET_IF([cv_Var],[break])
+        done
+        AS_UNSET([mhd_find_lib_LIB])
+        rm -f conftest.$ac_ext
+        LIBS="${mhd_find_lib_SAVE_LIBS}"
+        AS_UNSET([mhd_find_lib_SAVE_LIBS])
+      ]
+    )
+    AS_VAR_SET_IF([cv_Var],[:],[AS_VAR_SET([cv_Var],["no"])])
+  ]
+)
+AS_IF([test "x${cv_Var}" != "xno"],
+[dnl
+  AS_VAR_IF([cv_Var],["none required"],[:],
+    [
+      AS_IF([test -z "[$]$7"],[$7="${cv_Var}"],[$7="${cv_Var} [$]$7"])
+    ]
+  )
+  m4_n([$5])dnl
+],[$6])dnl AS_VAR_SET_IF cv_Var
+AS_VAR_POPDEF([cv_Var])dnl
+AS_VAR_POPDEF([decl_cv_Var])dnl
+m4_newline([[# Expansion of $0 macro ends here]])
+])dnl AC_DEFUN MHD_CHECK_FUNC

+ 4 - 6
m4/mhd_shutdown_socket_trigger.m4

@@ -11,24 +11,22 @@
 #
 # LICENSE
 #
-#   Copyright (c) 2017 Karlson2k (Evgeny Grin) <[email protected]>
+#   Copyright (c) 2017-2023 Karlson2k (Evgeny Grin) <[email protected]>
 #
 #   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 3
+#serial 6
 
 AC_DEFUN([MHD_CHECK_SOCKET_SHUTDOWN_TRIGGER],[dnl
   AC_PREREQ([2.64])dnl
   AC_REQUIRE([AC_CANONICAL_HOST])dnl
   AC_REQUIRE([AC_PROG_CC])dnl
   AC_REQUIRE([AX_PTHREAD])dnl
-  AC_CHECK_HEADERS([sys/time.h],[AC_CHECK_FUNCS([gettimeofday])],[], [AC_INCLUDES_DEFAULT])
-  dnl AC_CHECK_HEADERS([time.h],[AC_CHECK_FUNCS([nanosleep])],[], [AC_INCLUDES_DEFAULT])
+  AC_REQUIRE([MHD_CHECK_FUNC_GETTIMEOFDAY])dnl
   MHD_CHECK_FUNC([[usleep]], [[#include <unistd.h>]], [[usleep(100000);]])
-  dnl AC_CHECK_HEADERS([unistd.h],[AC_CHECK_FUNCS([usleep])],[], [AC_INCLUDES_DEFAULT])
   MHD_CHECK_FUNC([[nanosleep]], [[#include <time.h>]], [[struct timespec ts2, ts1 = {0, 0}; nanosleep(&ts1, &ts2);]])
   AC_CHECK_HEADERS([string.h sys/types.h sys/socket.h netinet/in.h time.h sys/select.h netinet/tcp.h],[],[], [AC_INCLUDES_DEFAULT])
   AC_CACHE_CHECK([[whether shutdown of listen socket triggers select()]],
@@ -123,7 +121,7 @@ AC_DEFUN([_MHD_RUN_CHECK_SOCKET_SHUTDOWN_TRIGGER],[dnl
 
 #include <pthread.h>
 
-   #ifndef SHUT_RD
+#ifndef SHUT_RD
 #  define SHUT_RD 0
 #endif
 #ifndef SHUT_WR

+ 0 - 66
m4/search_h.m4

@@ -1,66 +0,0 @@
-# search_h.m4 serial 12
-dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_SEARCH_H],
-[
-  AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
-  gl_CHECK_NEXT_HEADERS([search.h])
-  if test $ac_cv_header_search_h = yes; then
-    HAVE_SEARCH_H=1
-  else
-    HAVE_SEARCH_H=0
-  fi
-  AC_SUBST([HAVE_SEARCH_H])
-
-  if test $HAVE_SEARCH_H = 1; then
-    AC_CACHE_CHECK([for type VISIT], [gl_cv_type_VISIT],
-      [AC_COMPILE_IFELSE(
-         [AC_LANG_PROGRAM(
-            [[#if HAVE_SEARCH_H
-               #include <search.h>
-              #endif
-            ]],
-            [[static VISIT x; x = postorder;]])],
-         [gl_cv_type_VISIT=yes],
-         [gl_cv_type_VISIT=no])])
-  else
-    gl_cv_type_VISIT=no
-  fi
-  if test $gl_cv_type_VISIT = yes; then
-    HAVE_TYPE_VISIT=1
-  else
-    HAVE_TYPE_VISIT=0
-  fi
-  AC_SUBST([HAVE_TYPE_VISIT])
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[#include <search.h>
-    ]], [tdelete tfind tsearch twalk])
-
-  AC_REQUIRE([AC_C_RESTRICT])
-])
-
-AC_DEFUN([gl_SEARCH_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-  dnl Define it also as a C macro, for the benefit of the unit tests.
-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
-])
-
-AC_DEFUN([gl_SEARCH_H_DEFAULTS],
-[
-  GNULIB_TSEARCH=0; AC_SUBST([GNULIB_TSEARCH])
-  dnl Support Microsoft deprecated alias function names by default.
-  GNULIB_MDA_LFIND=1;   AC_SUBST([GNULIB_MDA_LFIND])
-  GNULIB_MDA_LSEARCH=1; AC_SUBST([GNULIB_MDA_LSEARCH])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_TSEARCH=1;    AC_SUBST([HAVE_TSEARCH])
-  HAVE_TWALK=1;      AC_SUBST([HAVE_TWALK])
-  REPLACE_TSEARCH=0; AC_SUBST([REPLACE_TSEARCH])
-])

+ 0 - 64
m4/tsearch.m4

@@ -1,64 +0,0 @@
-# tsearch.m4 serial 8
-dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_FUNC_TSEARCH],
-[
-  AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
-  AC_CHECK_FUNCS([tsearch twalk])
-  if test $ac_cv_func_tsearch = yes; then
-    dnl On OpenBSD 4.0, the return value of tdelete() is incorrect.
-    AC_REQUIRE([AC_PROG_CC])
-    AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-    AC_CACHE_CHECK([whether tdelete works], [gl_cv_func_tdelete_works],
-      [
-        AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stddef.h>
-#include <search.h>
-static int
-cmp_fn (const void *a, const void *b)
-{
-  return *(const int *) a - *(const int *) b;
-}
-int
-main ()
-{
-  int result = 0;
-  int x = 0;
-  void *root = NULL;
-  if (!(tfind (&x, &root, cmp_fn) == NULL))
-    result |= 1;
-  tsearch (&x, &root, cmp_fn);
-  if (!(tfind (&x, &root, cmp_fn) != NULL))
-    result |= 2;
-  if (!(tdelete (&x, &root, cmp_fn) != NULL))
-    result |= 4;
-  return result;
-}]])], [gl_cv_func_tdelete_works=yes], [gl_cv_func_tdelete_works=no],
-            [case "$host_os" in
-               openbsd*) gl_cv_func_tdelete_works="guessing no" ;;
-                         # Guess yes on native Windows.
-               mingw*)   gl_cv_func_tdelete_works="guessing yes" ;;
-               *)        gl_cv_func_tdelete_works="guessing yes" ;;
-             esac
-            ])
-      ])
-    case "$gl_cv_func_tdelete_works" in
-      *no)
-        REPLACE_TSEARCH=1
-        ;;
-    esac
-  else
-    HAVE_TSEARCH=0
-  fi
-  if test $ac_cv_func_twalk != yes; then
-    HAVE_TWALK=0
-  fi
-])
-
-# Prerequisites of lib/tsearch.c.
-AC_DEFUN([gl_PREREQ_TSEARCH], [
-  :
-])

+ 4 - 0
po/.gitignore

@@ -0,0 +1,4 @@
+/build-aux/install?sh
+/autopoint-trigger
+/autopoint-timestamp
+/stamp-m.in

+ 1 - 0
po/ABOUT-NLS

@@ -0,0 +1 @@
+<https://www.gnu.org/software/gettext/manual/html_node/Users.html>

+ 2 - 13
po/Makefile.in.in

@@ -495,24 +495,13 @@ $(DUMMYPOFILES):
 update-gmo: Makefile $(GMOFILES)
 	@:
 
-#
-# The next three targets are customized for MHD
-#
-
 # Recreate Makefile by invoking config.status. Explicitly invoke the shell,
 # because execution permission bits may not work on the current file system.
 # Use @SHELL@, which is the shell determined by autoconf for the use by its
 # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
-Makefile: Makefile.in.in Makevars $(top_builddir)/po-config.status @POMAKEFILEDEPS@
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
 	cd $(top_builddir) \
-	  && @SHELL@ ./po-config.status $(subdir)/[email protected] po-directories
-
-$(top_builddir)/po-config.status: $(srcdir)/po-configure.ac.in $(top_srcdir)/configure.ac
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) po-config.status
-
-remove-potcdate.sed: $(srcdir)/remove-potcdate.sin
-	$(SED) -e '/^#/d' '$(srcdir)/remove-potcdate.sin' > t-$@
-	mv t-$@ $@
+	  && @SHELL@ ./config.status $(subdir)/[email protected] po-directories
 
 force:
 

+ 31 - 0
po/Makevars

@@ -80,3 +80,34 @@ PO_DEPENDS_ON_POT = yes
 # "no".  Set this to no if the POT file and PO files are maintained
 # externally.
 DIST_DEPENDS_ON_UPDATE_PO = yes
+
+# Hacks for MHD
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+
+$(top_builddir)/po-config.status: $(srcdir)/po-configure.ac.in $(top_srcdir)/configure.ac
+	@echo "cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) po-config.status" && \
+	$(am__cd) '$(top_builddir)' && $(MAKE) $(AM_MAKEFLAGS) po-config.status
+
+$(srcdir)/POTFILES.in: $(top_srcdir)/src/microhttpd/Makefile.am
+	@echo "cd $(top_srcdir)/src/microhttpd && $(MAKE) $(AM_MAKEFLAGS) update-po-POTFILES.in" && \
+	$(am__cd) '$(top_srcdir)/src/microhttpd' && $(MAKE) $(AM_MAKEFLAGS) update-po-POTFILES.in
+
+$(srcdir)/stamp-m.in:
+	@: > '$@'
+
+stamp-m: $(srcdir)/Makefile.in.in $(srcdir)/Makevars $(top_builddir)/po-config.status $(srcdir)/POTFILES.in $(srcdir)/stamp-m.in
+	@$(am__cd) $(top_builddir) \
+	    && $(MHD_CONFIG_SHELL) ./po-config.status po/stamp-m po/Makefile.in po-directories
+
+.DELETE_ON_ERROR: stamp-m
+
+$(srcdir)/$(MHD_AUX_DIR)/install-sh: $(topsrcdir)/$(MHD_AUX_DIR)/install-sh
+	@$(MKDIR_P) '$(topsrcdir)/$(MHD_AUX_DIR)'
+	cp -f '$(topsrcdir)/$(MHD_AUX_DIR)/install-sh' '$@'
+
+mostlyclean: mostlycleancustom
+mostlycleancustom:
+	-rm -f stamp-m Makefile.in po-configure.ac
+	-rm -f $(top_builddir)/po-config.status
+
+.PHONY: mostlycleancustom

+ 82 - 0
po/Makevars.template

@@ -0,0 +1,82 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+#
+# Copyright (C) 2003-2019 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to use, copy, distribute, and modify it.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This tells whether or not to prepend "GNU " prefix to the package
+# name that gets inserted into the header of the $(DOMAIN).pot file.
+# Possible values are "yes", "no", or empty.  If it is empty, try to
+# detect it automatically by scanning the files in $(top_srcdir) for
+# "GNU packagename" string.
+PACKAGE_GNU =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
+# context.  Possible values are "yes" and "no".  Set this to yes if the
+# package uses functions taking also a message context, like pgettext(), or
+# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
+USE_MSGCTXT = no
+
+# These options get passed to msgmerge.
+# Useful options are in particular:
+#   --previous            to keep previous msgids of translated messages,
+#   --quiet               to reduce the verbosity.
+MSGMERGE_OPTIONS =
+
+# These options get passed to msginit.
+# If you want to disable line wrapping when writing PO files, add
+# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
+# MSGINIT_OPTIONS.
+MSGINIT_OPTIONS =
+
+# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
+# has changed.  Possible values are "yes" and "no".  Set this to no if
+# the POT file is checked in the repository and the version control
+# program ignores timestamps.
+PO_DEPENDS_ON_POT = yes
+
+# This tells whether or not to forcibly update $(DOMAIN).pot and
+# regenerate PO files on "make dist".  Possible values are "yes" and
+# "no".  Set this to no if the POT file and PO files are maintained
+# externally.
+DIST_DEPENDS_ON_UPDATE_PO = yes

+ 3 - 3
build-aux/config.rpath → po/build-aux/config.rpath

@@ -2,7 +2,7 @@
 # Output a system dependent set of variables, describing how to set the
 # run time search path of shared libraries in an executable.
 #
-#   Copyright 1996-2020 Free Software Foundation, Inc.
+#   Copyright 1996-2022 Free Software Foundation, Inc.
 #   Taken from GNU libtool, 2001
 #   Originally by Gordon Matzigkeit <[email protected]>, 1996
 #
@@ -371,7 +371,7 @@ else
       hardcode_direct=yes
       hardcode_minus_L=yes
       ;;
-    freebsd* | dragonfly*)
+    freebsd* | dragonfly* | midnightbsd*)
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
       ;;
@@ -547,7 +547,7 @@ case "$host_os" in
   freebsd[23].*)
     library_names_spec='$libname$shrext$versuffix'
     ;;
-  freebsd* | dragonfly*)
+  freebsd* | dragonfly* | midnightbsd*)
     library_names_spec='$libname$shrext'
     ;;
   gnu*)

+ 15 - 15
po/m4/gettext.m4

@@ -1,5 +1,5 @@
-# gettext.m4 serial 71 (gettext-0.20.2)
-dnl Copyright (C) 1995-2014, 2016, 2018-2021 Free Software Foundation, Inc.
+# gettext.m4 serial 72 (gettext-0.21.1)
+dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -55,22 +55,22 @@ dnl
 AC_DEFUN([AM_GNU_GETTEXT],
 [
   dnl Argument checking.
-  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], ,
+  m4_if([$1], [], , [m4_if([$1], [external], , [m4_if([$1], [use-libtool], ,
     [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
 ])])])])
-  ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+  m4_if(m4_if([$1], [], [old])[]m4_if([$1], [no-libtool], [old]), [old],
     [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported.
 ])])
-  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+  m4_if([$2], [], , [m4_if([$2], [need-ngettext], , [m4_if([$2], [need-formatstring-macros], ,
     [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
 ])])])])
   define([gt_included_intl],
-    ifelse([$1], [external], [no], [yes]))
+    m4_if([$1], [external], [no], [yes]))
   gt_NEEDS_INIT
   AM_GNU_GETTEXT_NEED([$2])
 
   AC_REQUIRE([AM_PO_SUBDIRS])dnl
-  ifelse(gt_included_intl, yes, [
+  m4_if(gt_included_intl, yes, [
     AC_REQUIRE([AM_INTL_SUBDIR])dnl
   ])
 
@@ -88,7 +88,7 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
   dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
   dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it.
-  ifelse(gt_included_intl, yes, , [
+  m4_if(gt_included_intl, yes, , [
     AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
   ])
 
@@ -98,7 +98,7 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl Set USE_NLS.
   AC_REQUIRE([AM_NLS])
 
-  ifelse(gt_included_intl, yes, [
+  m4_if(gt_included_intl, yes, [
     BUILD_INCLUDED_LIBINTL=no
     USE_INCLUDED_LIBINTL=no
   ])
@@ -118,7 +118,7 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl If we use NLS figure out what method
   if test "$USE_NLS" = "yes"; then
     gt_use_preinstalled_gnugettext=no
-    ifelse(gt_included_intl, yes, [
+    m4_if(gt_included_intl, yes, [
       AC_MSG_CHECKING([whether included gettext is requested])
       AC_ARG_WITH([included-gettext],
         [  --with-included-gettext use the GNU gettext library included here],
@@ -174,7 +174,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
 
         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
           dnl Sometimes libintl requires libiconv, so first search for libiconv.
-          ifelse(gt_included_intl, yes, , [
+          m4_if(gt_included_intl, yes, , [
             AM_ICONV_LINK
           ])
           dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
@@ -261,7 +261,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
           INCINTL=
         fi
 
-    ifelse(gt_included_intl, yes, [
+    m4_if(gt_included_intl, yes, [
         if test "$gt_use_preinstalled_gnugettext" != "yes"; then
           dnl GNU gettext is not found in the C library.
           dnl Fall back on included GNU gettext library.
@@ -273,8 +273,8 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
         dnl Mark actions used to generate GNU NLS library.
         BUILD_INCLUDED_LIBINTL=yes
         USE_INCLUDED_LIBINTL=yes
-        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD"
-        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD"
+        LIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD"
+        LTLIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD"
         LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
       fi
 
@@ -341,7 +341,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
     POSUB=po
   fi
 
-  ifelse(gt_included_intl, yes, [
+  m4_if(gt_included_intl, yes, [
     dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes'
     dnl because some of the testsuite requires it.
     BUILD_INCLUDED_LIBINTL=yes

+ 7 - 4
po/m4/host-cpu-c-abi.m4

@@ -1,5 +1,5 @@
-# host-cpu-c-abi.m4 serial 13
-dnl Copyright (C) 2002-2021 Free Software Foundation, Inc.
+# host-cpu-c-abi.m4 serial 15
+dnl Copyright (C) 2002-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -211,7 +211,7 @@ changequote([,])dnl
          # be generating 64-bit code.
          AC_COMPILE_IFELSE(
            [AC_LANG_SOURCE(
-              [[#if defined __powerpc64__ || defined _ARCH_PPC64
+              [[#if defined __powerpc64__ || defined __LP64__
                  int ok;
                 #else
                  error fail
@@ -382,6 +382,9 @@ EOF
 #ifndef __ia64__
 #undef __ia64__
 #endif
+#ifndef __loongarch64__
+#undef __loongarch64__
+#endif
 #ifndef __m68k__
 #undef __m68k__
 #endif
@@ -605,7 +608,7 @@ changequote([,])dnl
            # be generating 64-bit code.
            AC_COMPILE_IFELSE(
              [AC_LANG_SOURCE(
-                [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                [[#if defined __powerpc64__ || defined __LP64__
                    int ok;
                   #else
                    error fail

+ 3 - 3
po/m4/lib-ld.m4

@@ -1,5 +1,5 @@
-# lib-ld.m4 serial 9
-dnl Copyright (C) 1996-2003, 2009-2021 Free Software Foundation, Inc.
+# lib-ld.m4 serial 10
+dnl Copyright (C) 1996-2003, 2009-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -122,7 +122,7 @@ else
       *-*-aix*)
         AC_COMPILE_IFELSE(
           [AC_LANG_SOURCE(
-             [[#if defined __powerpc64__ || defined _ARCH_PPC64
+             [[#if defined __powerpc64__ || defined __LP64__
                 int ok;
                #else
                 error fail

+ 4 - 4
po/m4/lib-link.m4

@@ -1,5 +1,5 @@
-# lib-link.m4 serial 32
-dnl Copyright (C) 2001-2021 Free Software Foundation, Inc.
+# lib-link.m4 serial 33
+dnl Copyright (C) 2001-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -196,8 +196,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
     eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
   ])
   AC_ARG_WITH(PACK[-prefix],
-[[  --with-]]PACK[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
-  --without-]]PACK[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
+[[  --with-]]PACK[[-prefix[=DIR]  search for ]]PACKLIBS[[ in DIR/include and DIR/lib
+  --without-]]PACK[[-prefix     don't search for ]]PACKLIBS[[ in includedir and libdir]],
 [
     if test "X$withval" = "Xno"; then
       use_additional=no

+ 3 - 3
po/m4/lib-prefix.m4

@@ -1,5 +1,5 @@
-# lib-prefix.m4 serial 19
-dnl Copyright (C) 2001-2005, 2008-2021 Free Software Foundation, Inc.
+# lib-prefix.m4 serial 20
+dnl Copyright (C) 2001-2005, 2008-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -174,7 +174,7 @@ AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
 
   AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf],
     [AC_EGREP_CPP([Extensible Linking Format],
-       [#ifdef __ELF__
+       [#if defined __ELF__ || (defined __linux__ && defined __EDG__)
         Extensible Linking Format
         #endif
        ],

+ 8 - 4
po/m4/po.m4

@@ -1,5 +1,5 @@
-# po.m4 serial 31 (gettext-0.20.2)
-dnl Copyright (C) 1995-2014, 2016, 2018-2021 Free Software Foundation, Inc.
+# po.m4 serial 32 (gettext-0.21.1)
+dnl Copyright (C) 1995-2014, 2016, 2018-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -179,7 +179,9 @@ changequote([,])dnl
                 #      presentlang can be used as a fallback for messages
                 #      which are not translated in the desiredlang catalog).
                 case "$desiredlang" in
-                  "$presentlang"*) useit=yes;;
+                  "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*)
+                    useit=yes
+                    ;;
                 esac
               done
               if test $useit = yes; then
@@ -379,7 +381,9 @@ changequote([,])dnl
         #      presentlang can be used as a fallback for messages
         #      which are not translated in the desiredlang catalog).
         case "$desiredlang" in
-          "$presentlang"*) useit=yes;;
+          "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*)
+            useit=yes
+            ;;
         esac
       done
       if test $useit = yes; then

+ 20 - 8
po/po-configure.ac.in

@@ -1,39 +1,51 @@
 AC_INIT([@PACKAGE_NAME@],[@PACKAGE_VERSION@],[@PACKAGE_BUGREPORT@])
 CONFIG_STATUS='./po-config.status'
 
-AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_AUX_DIR([@MHD_AUX_DIR@])
 AC_CONFIG_MACRO_DIR([m4])
+
 AC_PRESERVE_HELP_ORDER
 
 AC_MSG_NOTICE([
 This special $as_me is designed to be run only internally as part of distribution tarball building process.
-The only purpose of the $as_me is a preparion of the files to update ${PACKAGE_TARNAME}.pot
+The only purpose of the $as_me is a preparation of the files to update ${PACKAGE_TARNAME}.pot
 
 $as_me is not meant to be started by the user and is not needed to build ${PACKAGE_NAME} library.
 ])
 AC_MSG_NOTICE([Check src/examples/msgs_i18n.c for inspiration how to use ${PACKAGE_TARNAME}.pot])
+
+AM_PROG_INSTALL_SH
+AC_PROG_MKDIR_P
+
 AS_VAR_SET_IF([enable_nls], [], [[enable_nls=no]])
 AM_GNU_GETTEXT([external],[need-ngettext])
+AM_GNU_GETTEXT_REQUIRE_VERSION([0.18])
 
-m4_divert_text([HELP_ENABLE], [[
+m4_divert_text([HELP_VAR_END], [[
 ###############################################################################
 This special po-configure is designed to be run only internally as part of
 distribution tarball building process.
-The only purpose of the po-configure is a preparion of the files to update
-libmicrohttpd.pot
+The only purpose of the po-configure is a preparation of the files to update
+@PACKAGE_TARNAME@.pot
 
 po-configure is not meant to be started by the user and is not needed to build
 @PACKAGE_NAME@ library.
 ###############################################################################
 ]])
 
-AC_CONFIG_FILES([po/Makefile.in])
+# Hacks for libmicrohttpd
+AC_CONFIG_FILES([po/stamp-m],[echo 'timestamp' > po/stamp-m])
+AC_SUBST([POMAKEFILEDEPS],["POTFILES.in stamp-m"])
+AM_SUBST_NOTMAKE([POMAKEFILEDEPS])
+AC_SUBST([MHD_CONFIG_SHELL],["${CONFIG_SHELL}"])
+AC_SUBST([MHD_AUX_DIR],['@MHD_AUX_DIR@'])
 
+AC_CONFIG_FILES([po/Makefile.in])
 AS_IF([test -z "${XGETTEXT}" || test "x${XGETTEXT}" = "x:"], [AC_MSG_ERROR([Cannot find xgettext. xgettext is required to update distribution tarball files.])])
 AC_SUBST([PACKAGE],["${PACKAGE_TARNAME}"])
 AC_SUBST([VERSION],["${PACKAGE_VERSION}"])
 AC_SUBST([CROSS_COMPILING],["${cross_compiling}"])
+AC_SUBST([MKDIR_P])
 AC_SUBST([mkdir_p],['$(MKDIR_P)'])
-AC_SUBST([install_sh],['false'])
 
-AC_OUTPUT
+AC_OUTPUT

+ 113 - 71
src/include/autoinit_funcs.h

@@ -1,6 +1,6 @@
 /*
  *  AutoinitFuncs: Automatic Initialization and Deinitialization Functions
- *  Copyright(C) 2014-2022 Karlson2k (Evgeny Grin)
+ *  Copyright(C) 2014-2023 Karlson2k (Evgeny Grin)
  *
  *  This header is free software; you can redistribute it and / or
  *  modify it under the terms of the GNU Lesser General Public
@@ -20,11 +20,11 @@
 /*
    General usage is simple: include this header, declare or define two
    functions with zero parameters (void) and any return type: one for
-   initialization and one for deinitialization, add
+   initialisation and one for deinitialisation, add
    _SET_INIT_AND_DEINIT_FUNCS(FuncInitName, FuncDeInitName) to the code
    and functions will be automatically called during application startup
    and shutdown.
-   This is useful for libraries as libraries doesn't have direct access
+   This is useful for libraries as libraries don't have direct access
    to main() functions.
    Example:
    -------------------------------------------------
@@ -48,14 +48,14 @@
    _SET_INIT_AND_DEINIT_FUNCS(libInit,libDeinit);
    -------------------------------------------------
 
-   If initializer or deinitializer function is not needed, just define
+   If initialiser or deinitialiser function is not needed, just define
    it as empty function.
 
    This header should work with GCC, clang, MSVC (2010 or later) and
    SunPro / Sun Studio / Oracle Solaris Studio / Oracle Developer Studio
    compiler.
    Supported C and C++ languages; application, static and dynamic (DLL)
-   libraries; non-optimized (Debug) and optimized (Release) compilation
+   libraries; non-optimized (Debug) and optimised (Release) compilation
    and linking.
 
    For more information see header code and comments in code.
@@ -67,7 +67,7 @@
 * Current version of the header in packed BCD form.
 * 0x01093001 = 1.9.30-1.
 */
-#define AUTOINIT_FUNCS_VERSION 0x01000500
+#define AUTOINIT_FUNCS_VERSION 0x01000900
 
 #if defined(__GNUC__) || defined(__clang__)
 /* if possible - check for supported attribute */
@@ -78,7 +78,7 @@
 #endif /* __has_attribute */
 #endif /* __GNUC__ */
 
-/* "_attribute__ ((constructor))" is supported by GCC, clang and
+/* "__has_attribute__ ((constructor))" is supported by GCC, clang and
    Sun/Oracle compiler starting from version 12.1. */
 #if ((defined(__GNUC__) || defined(__clang__)) && \
   ! defined(_GNUC_ATTR_CONSTR_NOT_SUPPORTED)) || \
@@ -104,18 +104,16 @@
    not defined both _LIB and _USRDLL if building an application */
 
 /* Define AUTOINIT_FUNCS_DECLARE_STATIC_REG if you need macro declaration
-   for registering static initialization functions even if you building DLL */
+   for registering static initialisation functions even if you building DLL */
 /* Define AUTOINIT_FUNCS_FORCE_STATIC_REG if you want to set main macro
-   _SET_INIT_AND_DEINIT_FUNCS to static version even if building a DLL*/
+   _SET_INIT_AND_DEINIT_FUNCS to static version even if building a DLL */
 
 /* Stringify macros */
 #define _INSTRMACRO(a) #a
 #define _STRMACRO(a) _INSTRMACRO (a)
 
-#if ! defined(_USRDLL) || defined(AUTOINIT_FUNCS_DECLARE_STATIC_REG)
-
-/* required for atexit() */
-#include <stdlib.h>
+#if ! defined(_USRDLL) || defined(AUTOINIT_FUNCS_DECLARE_STATIC_REG) \
+  || defined(AUTOINIT_FUNCS_FORCE_STATIC_REG)
 
 /* Use "C" linkage for variable to simplify variable decoration */
 #ifdef __cplusplus
@@ -125,14 +123,19 @@
 #endif
 
 /* How variable is decorated by compiler */
-#if defined(_M_X64) || defined(_M_AMD64)
+#if (defined(_WIN32) || defined(_WIN64)) \
+  && ! defined(_M_IX86) && ! defined(_X86_)
+#if ! defined(_M_X64) && ! defined(_M_AMD64) || ! defined(_x86_64_) \
+  && ! defined(_M_ARM) && ! defined(_M_ARM64)
+#warning Untested architecture, linker may fail with unresolved symbol
+#endif /* ! _M_X64 && ! _M_AMD64 && ! _x86_64_ && ! _M_ARM && ! _M_ARM64 */
 #define W32_VARDECORPREFIX
 #define W32_DECORVARNAME(v) v
-#define W32_VARDECORPEFIXSTR ""
-#elif defined(_M_IX86) || defined(_X86_)
+#define W32_VARDECORPREFIXSTR ""
+#elif defined(_WIN32) && (defined(_M_IX86) || defined(_X86_))
 #define W32_VARDECORPREFIX _
 #define W32_DECORVARNAME(v) _ ## v
-#define W32_VARDECORPEFIXSTR "_"
+#define W32_VARDECORPREFIXSTR "_"
 #else
 #error Do not know how to decorate symbols for this architecture
 #endif
@@ -140,81 +143,120 @@
 /* Internal variable prefix (can be any) */
 #define W32_INITHELPERVARNAME(f) _initHelperDummy_ ## f
 #define W32_INITHELPERVARNAMEDECORSTR(f) \
-  W32_VARDECORPEFIXSTR _STRMACRO (W32_INITHELPERVARNAME (f))
+  W32_VARDECORPREFIXSTR _STRMACRO (W32_INITHELPERVARNAME (f))
 
 /* Declare section (segment), put variable pointing to init function to chosen segment,
-   force linker to include variable to avoid omitting by optimizer */
-/* Initialization function must be declared as
-   int __cdecl FuncName(void) */
-/* Return value is ignored for C++ initializers */
-/* For C initializers: startup process is aborted if initializer return non-zero */
-#define W32_FPTR_IN_SEG(S,F) \
+   force linker to always include variable to avoid omitting by optimiser */
+/* Initialisation function must be declared as
+   void __cdecl FuncName(void)
+/* "extern" with initialisation value means that variable is declared AND defined. */
+#define W32_VFPTR_IN_SEG(S,F) \
+  __pragma (section (S,long,read)) \
+  __pragma (comment (linker, "/INCLUDE:" W32_INITHELPERVARNAMEDECORSTR (F))) \
+  W32_INITVARDECL __declspec(allocate (S))void \
+    (__cdecl * W32_INITHELPERVARNAME (F))(void) = &F
+
+/* Sections (segments) for pointers to initialisers/deinitialisers */
+
+/* Semi-officially suggested section for early initialisers (called before
+   C++ objects initialisers), "void" return type */
+#define W32_SEG_INIT_EARLY      ".CRT$XCT"
+/* Semi-officially suggested section for late initialisers (called after
+   C++ objects initialisers), "void" return type */
+#define W32_SEG_INIT_LATE       ".CRT$XCV"
+
+/* Unsafe sections (segments) for pointers to initialisers/deinitialisers */
+
+/* C++ lib initialisers, "void" return type (reserved by the system!) */
+#define W32_SEG_INIT_CXX_LIB    ".CRT$XCL"
+/* C++ user initialisers, "void" return type (reserved by the system!) */
+#define W32_SEG_INIT_CXX_USER   ".CRT$XCU"
+
+
+/* Declare section (segment), put variable pointing to init function to chosen segment,
+   force linker to always include variable to avoid omitting by optimiser */
+/* Initialisation function must be declared as
+   int __cdecl FuncName(void)
+/* Startup process is aborted if initialiser returns non-zero */
+/* "extern" with initialisation value means that variable is declared AND defined. */
+#define W32_IFPTR_IN_SEG(S,F) \
   __pragma (section (S,long,read)) \
   __pragma (comment (linker, "/INCLUDE:" W32_INITHELPERVARNAMEDECORSTR (F))) \
   W32_INITVARDECL __declspec(allocate (S))int \
     (__cdecl * W32_INITHELPERVARNAME (F))(void) = &F
 
-/* Section (segment) names for pointers to initializers */
-#define W32_SEG_INIT_C_USER   ".CRT$XCU"
-#define W32_SEG_INIT_C_LIB    ".CRT$XCL"
-#define W32_SEG_INIT_CXX_USER ".CRT$XIU"
-#define W32_SEG_INIT_CXX_LIB  ".CRT$XIL"
+/* Unsafe sections (segments) for pointers to initialisers with
+   "int" return type */
+
+/* C lib initialisers, "int" return type (reserved by the system!).
+   These initialisers are called before others. */
+#define W32_SEG_INIT_C_LIB      ".CRT$XIL"
+/* C user initialisers, "int" return type (reserved by the system!).
+   These initialisers are called before others. */
+#define W32_SEG_INIT_C_USER     ".CRT$XIU"
 
-/* Declare macro for different initializers sections */
-/* Macro can be used several times to register several initializers */
-/* Once function is registered as initializer, it will be called automatically
+
+/* Declare macro for different initialisers sections */
+/* Macro can be used several times to register several initialisers */
+/* Once function is registered as initialiser, it will be called automatically
    during application startup */
-/* "lib" initializers are called before "user" initializers */
-/* "C" initializers are called before "C++" initializers */
-#define W32_REG_INIT_C_USER(F) W32_FPTR_IN_SEG (W32_SEG_INIT_C_USER,F)
-#define W32_REG_INIT_C_LIB(F) W32_FPTR_IN_SEG (W32_SEG_INIT_C_LIB,F)
+#define W32_REG_INIT_EARLY(F) W32_VFPTR_IN_SEG (W32_SEG_INIT_EARLY,F)
+#define W32_REG_INIT_LATE(F)  W32_VFPTR_IN_SEG (W32_SEG_INIT_LATE,F)
+
+
+/* Not recommended / unsafe */
+/* "lib" initialisers are called before "user" initialisers */
+/* "C" initialisers are called before "C++" initialisers */
+#define W32_REG_INIT_C_USER(F)   W32_FPTR_IN_SEG (W32_SEG_INIT_C_USER,F)
+#define W32_REG_INIT_C_LIB(F)    W32_FPTR_IN_SEG (W32_SEG_INIT_C_LIB,F)
 #define W32_REG_INIT_CXX_USER(F) W32_FPTR_IN_SEG (W32_SEG_INIT_CXX_USER,F)
-#define W32_REG_INIT_CXX_LIB(F) W32_FPTR_IN_SEG (W32_SEG_INIT_CXX_LIB,F)
+#define W32_REG_INIT_CXX_LIB(F)  W32_FPTR_IN_SEG (W32_SEG_INIT_CXX_LIB,F)
 
 /* Choose main register macro based on language and program type */
 /* Assuming that _LIB or _USRDLL is defined for static or DLL-library */
-/* Macro can be used several times to register several initializers */
-/* Once function is registered as initializer, it will be called automatically
+/* Macro can be used several times to register several initialisers */
+/* Once function is registered as initialiser, it will be called automatically
    during application startup */
-/* Define AUTOINIT_FUNCS_FORCE_USER_LVL_INIT to register initializers
-   at user level even if building library */
-#ifdef __cplusplus
-#if ((defined(_LIB) && ! defined(_CONSOLE)) || defined(_USRDLL)) && \
-  ! defined(AUTOINIT_FUNCS_FORCE_USER_LVL_INIT)
-#define W32_REGISTER_INIT(F) W32_REG_INIT_CXX_LIB (F)
-#else  /* ! _LIB && ! _DLL */
-#define W32_REGISTER_INIT(F) W32_REG_INIT_CXX_USER (F)
-#endif /* ! _LIB && ! _DLL */
-#else  /* !__cplusplus*/
-#if ((defined(_LIB) && ! defined(_CONSOLE)) || defined(_USRDLL)) && \
-  ! defined(AUTOINIT_FUNCS_FORCE_USER_LVL_INIT)
-#define W32_REGISTER_INIT(F) W32_REG_INIT_C_LIB (F)
-#else  /* ! _LIB && ! _DLL */
-#define W32_REGISTER_INIT(F) W32_REG_INIT_C_USER (F)
-#endif /* ! _LIB && ! _DLL */
-#endif /* !__cplusplus*/
-
-#else /* _USRDLL */
+/* Define AUTOINIT_FUNCS_FORCE_EARLY_INIT to force register as early
+   initialiser */
+/* Define AUTOINIT_FUNCS_FORCE_LATE_INIT to force register as late
+   initialiser */
+/* By default C++ static or DLL-library code and any C code and will be
+   registered as early initialiser, while C++ non-library code will be
+   registered as late initialiser */
+#if (! defined(__cplusplus) || \
+  ((defined(_LIB) && ! defined(_CONSOLE)) || defined(_USRDLL)) || \
+  defined(AUTOINIT_FUNCS_FORCE_EARLY_INIT)) && \
+  ! defined(AUTOINIT_FUNCS_FORCE_LATE_INIT)
+#define W32_REGISTER_INIT(F) W32_REG_INIT_EARLY(F)
+#else
+#define W32_REGISTER_INIT(F) W32_REG_INIT_LATE(F)
+#endif
 
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN 1
-#endif /* WIN32_LEAN_AND_MEAN */
-/* Required for DllMain */
-#include <Windows.h>
-#endif /* _USRDLL */
+#endif /* ! _USRDLL || ! AUTOINIT_FUNCS_DECLARE_STATIC_REG
+          || AUTOINIT_FUNCS_FORCE_STATIC_REG */
 
 
 #if ! defined(_USRDLL) || defined(AUTOINIT_FUNCS_FORCE_STATIC_REG)
+
+#include <stdlib.h> /* required for atexit() */
+
 #define W32_SET_INIT_AND_DEINIT(FI,FD) \
-  int __cdecl _W32_init_helper_ ## FI (void);    \
+  void __cdecl _W32_init_helper_ ## FI (void);    \
   void __cdecl _W32_deinit_helper_ ## FD (void); \
+  void __cdecl _W32_init_helper_ ## FI (void)     \
+  { (void) (FI) (); atexit (_W32_deinit_helper_ ## FD); } \
   void __cdecl _W32_deinit_helper_ ## FD (void)  \
   { (void) (FD) (); } \
-  int __cdecl _W32_init_helper_ ## FI (void)     \
-  { (void) (FI) (); atexit (_W32_deinit_helper_ ## FD); return 0; } \
   W32_REGISTER_INIT (_W32_init_helper_ ## FI)
 #else  /* _USRDLL */
 
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN 1
+#endif /* WIN32_LEAN_AND_MEAN */
+
+#include <Windows.h> /* Required for DllMain */
+
 /* If DllMain is already present in code, define AUTOINIT_FUNCS_CALL_USR_DLLMAIN
    and rename DllMain to usr_DllMain */
 #ifndef AUTOINIT_FUNCS_CALL_USR_DLLMAIN
@@ -239,21 +281,21 @@
 #endif /* _USRDLL */
 
 #define _SET_INIT_AND_DEINIT_FUNCS(FI,FD) W32_SET_INIT_AND_DEINIT (FI,FD)
-/* Indicate that automatic initializers/deinitializers are supported */
+/* Indicate that automatic initialisers/deinitialisers are supported */
 #define _AUTOINIT_FUNCS_ARE_SUPPORTED 1
 
 #else  /* !__GNUC__ && !_MSC_FULL_VER */
 
 /* Define EMIT_ERROR_IF_AUTOINIT_FUNCS_ARE_NOT_SUPPORTED before inclusion of header to
-   abort compilation if automatic initializers/deinitializers are not supported */
+   abort compilation if automatic initialisers/deinitialisers are not supported */
 #ifdef EMIT_ERROR_IF_AUTOINIT_FUNCS_ARE_NOT_SUPPORTED
 #error \
-  Compiler/platform don not support automatic calls of user-defined initializer and deinitializer
+  Compiler/platform does not support automatic calls of user-defined initializer and deinitializer
 #endif /* EMIT_ERROR_IF_AUTOINIT_FUNCS_ARE_NOT_SUPPORTED */
 
 /* Do nothing */
 #define _SET_INIT_AND_DEINIT_FUNCS(FI,FD)
-/* Indicate that automatic initializers/deinitializers are not supported */
+/* Indicate that automatic initialisers/deinitialisers are not supported */
 #define _AUTOINIT_FUNCS_ARE_NOT_SUPPORTED 1
 
 #endif /* !__GNUC__ && !_MSC_FULL_VER */

+ 55 - 55
src/include/microhttpd.h

@@ -96,7 +96,7 @@ extern "C"
  * they are parsed as decimal numbers.
  * Example: 0x01093001 = 1.9.30-1.
  */
-#define MHD_VERSION 0x00097545
+#define MHD_VERSION 0x00097601
 
 /* If generic headers don't work on your platform, include headers
    which define 'va_list', 'size_t', 'ssize_t', 'intptr_t', 'off_t',
@@ -1550,7 +1550,7 @@ typedef int
  * #MHD_digest_auth_check3() (and similar functions) to check nonce by
  * re-generating it again with the same parameters, which is CPU-intensive
  * operation.
- * @note Available since #MHD_VERSION 0x00097531
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DAuthBindNonce
 {
@@ -1583,7 +1583,7 @@ enum MHD_DAuthBindNonce
    * RFC 7616 allows clients to re-use server-generated nonces for any URI
    * in the same "protection space" which by default consists of all server
    * URIs.
-   * Before #MHD_VERSION 0x00097518 this was default (and only supported)
+   * Before #MHD_VERSION 0x00097601 this was default (and only supported)
    * nonce bind type.
    */
   MHD_DAUTH_BIND_NONCE_URI = 1 << 1,
@@ -2017,7 +2017,7 @@ enum MHD_OPTION
    * An internal copy of the buffer will be made, the data do not
    * need to be static.
    * @sa #MHD_OPTION_DIGEST_AUTH_RANDOM
-   * @note Available since #MHD_VERSION 0x00097529
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_OPTION_DIGEST_AUTH_RANDOM_COPY = 35,
 
@@ -2028,7 +2028,7 @@ enum MHD_OPTION
    * This option should be followed by an 'unsigned int` argument with value
    * formed as bitwise OR combination of #MHD_DAuthBindNonce values.
    * When not specified, default value #MHD_DAUTH_BIND_NONCE_NONE is used.
-   * @note Available since #MHD_VERSION 0x00097531
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_OPTION_DIGEST_AUTH_NONCE_BIND_TYPE = 36,
 
@@ -2040,7 +2040,7 @@ enum MHD_OPTION
    * The string does not have to start with a colon ':' character.
    * See #MHD_OPTION_HTTPS_PRIORITIES description for details of automatic
    * default priorities.
-   * @note Available since #MHD_VERSION 0x00097542
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_OPTION_HTTPS_PRIORITIES_APPEND = 37,
 
@@ -2086,7 +2086,7 @@ enum MHD_OPTION
    * communicate with some client(s) with badly broken HTTP implementation.
    *
    * This option should be followed by an `int` argument.
-   * @note Available since #MHD_VERSION 0x00097545
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_OPTION_CLIENT_DISCIPLINE_LVL = 38
 
@@ -3152,7 +3152,7 @@ MHD_free (void *ptr);
  *                  timeout (in milliseconds)
  * @return #MHD_YES if timeout value has been set,
  *         #MHD_NO if timeouts are not used and no data processing is pending.
- * @note Available since #MHD_VERSION 0x00097508
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup event
  */
 _MHD_EXTERN enum MHD_Result
@@ -3193,7 +3193,7 @@ MHD_get_timeout64 (struct MHD_Daemon *daemon,
  *         activity for indefinite amount of time,
  *         otherwise returned value is the the maximum amount of millisecond
  *         that external polling function must wait for the activity of FDs.
- * @note Available since #MHD_VERSION 0x00097509
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup event
  */
 _MHD_EXTERN int64_t
@@ -3234,7 +3234,7 @@ MHD_get_timeout64s (struct MHD_Daemon *daemon);
  *         otherwise returned value is the the maximum amount of millisecond
  *         (capped at INT_MAX) that external polling function must wait
  *         for the activity of FDs.
- * @note Available since #MHD_VERSION 0x00097510
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup event
  */
 _MHD_EXTERN int
@@ -3714,7 +3714,7 @@ enum MHD_ResponseFlags
    * reply body must be sent to the client.
    * This flag is primarily intended to be used when automatic "Content-Length"
    * header is undesirable in response to HEAD requests.
-   * @note Available since #MHD_VERSION 0x00097502
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_RF_HEAD_ONLY_RESPONSE = 1 << 4
 } _MHD_FIXED_FLAGS_ENUM;
@@ -3885,7 +3885,7 @@ MHD_create_response_from_buffer (size_t size,
  * @param buffer the buffer with the data for the response body, can be NULL
  *               if @a size is zero
  * @return NULL on error (i.e. invalid arguments, out of memory)
- * @note Available since #MHD_VERSION 0x00097506
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup response
  */
 _MHD_EXTERN struct MHD_Response *
@@ -3912,7 +3912,7 @@ MHD_create_response_from_buffer_static (size_t size,
  * @param buffer the buffer with the data for the response body, can be NULL
  *               if @a size is zero
  * @return NULL on error (i.e. invalid arguments, out of memory)
- * @note Available since #MHD_VERSION 0x00097507
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup response
  */
 _MHD_EXTERN struct MHD_Response *
@@ -3963,7 +3963,7 @@ MHD_create_response_from_buffer_with_free_callback (size_t size,
  * @param crfc_cls an argument for @a crfc
  * @return NULL on error (i.e. invalid arguments, out of memory)
  * @note Available since #MHD_VERSION 0x00097302
- * @note 'const' qualifier is used for @a buffer since #MHD_VERSION 0x00097504
+ * @note 'const' qualifier is used for @a buffer since #MHD_VERSION 0x00097601
  * @ingroup response
  */
 _MHD_EXTERN struct MHD_Response *
@@ -4153,7 +4153,7 @@ MHD_create_response_from_iovec (const struct MHD_IoVec *iov,
  * @param flags the flags for the new response object
  * @return NULL on error (i.e. invalid arguments, out of memory),
  *         the pointer to the created response object otherwise
- * @note Available since #MHD_VERSION 0x00097503
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup response
  */
 _MHD_EXTERN struct MHD_Response *
@@ -4526,7 +4526,7 @@ MHD_destroy_post_processor (struct MHD_PostProcessor *pp);
  * @warning While this value is the same as the #MHD_SHA256_DIGEST_SIZE,
  *          the calculated digests for SHA-256 and SHA-512/256 are different.
  * @sa #MHD_digest_get_hash_size()
- * @note Available since #MHD_VERSION 0x00097538
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 #define MHD_SHA512_256_DIGEST_SIZE 32
@@ -4536,7 +4536,7 @@ MHD_destroy_post_processor (struct MHD_PostProcessor *pp);
  * Used as part of #MHD_DigestAuthAlgo3 values.
  *
  * @warning Not used directly by MHD API.
- * @note Available since #MHD_VERSION 0x00097520
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DigestBaseAlgo
 {
@@ -4567,14 +4567,14 @@ enum MHD_DigestBaseAlgo
 /**
  * The flag indicating non-session algorithm types,
  * like 'MD5', 'SHA-256' or 'SHA-512-256'.
- * @note Available since #MHD_VERSION 0x00097519
+ * @note Available since #MHD_VERSION 0x00097601
  */
 #define MHD_DIGEST_AUTH_ALGO3_NON_SESSION    (1 << 6)
 
 /**
  * The flag indicating session algorithm types,
  * like 'MD5-sess', 'SHA-256-sess' or 'SHA-512-256-sess'.
- * @note Available since #MHD_VERSION 0x00097519
+ * @note Available since #MHD_VERSION 0x00097601
  */
 #define MHD_DIGEST_AUTH_ALGO3_SESSION        (1 << 7)
 
@@ -4582,7 +4582,7 @@ enum MHD_DigestBaseAlgo
  * Digest algorithm identification
  * @warning Do not be confused with #MHD_DigestAuthAlgorithm,
  *          which uses other values!
- * @note Available since #MHD_VERSION 0x00097523
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DigestAuthAlgo3
 {
@@ -4645,7 +4645,7 @@ enum MHD_DigestAuthAlgo3
  *         or zero if the input value is not supported or not valid
  * @sa #MHD_digest_auth_calc_userdigest()
  * @sa #MHD_digest_auth_calc_userhash(), #MHD_digest_auth_calc_userhash_hex()
- * @note Available since #MHD_VERSION 0x00097526
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN size_t
@@ -4657,7 +4657,7 @@ MHD_digest_get_hash_size (enum MHD_DigestAuthAlgo3 algo3);
  * #MHD_DigestAuthAlgo3 always can be casted to #MHD_DigestAuthMultiAlgo3, but
  * not vice versa.
  *
- * @note Available since #MHD_VERSION 0x00097523
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DigestAuthMultiAlgo3
 {
@@ -4788,7 +4788,7 @@ enum MHD_DigestAuthMultiAlgo3
  *         MHD_NO if @a bin_buf_size is too small or if @a algo3 algorithm is
  *         not supported (or external error has occurred,
  *         see #MHD_FEATURE_EXTERN_HASH)
- * @note Available since #MHD_VERSION 0x00097535
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN enum MHD_Result
@@ -4835,7 +4835,7 @@ MHD_digest_auth_calc_userhash (enum MHD_DigestAuthAlgo3 algo3,
  *         MHD_NO if @a bin_buf_size is too small or if @a algo3 algorithm is
  *         not supported (or external error has occurred,
  *         see #MHD_FEATURE_EXTERN_HASH).
- * @note Available since #MHD_VERSION 0x00097535
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN enum MHD_Result
@@ -4858,7 +4858,7 @@ MHD_digest_auth_calc_userhash_hex (enum MHD_DigestAuthAlgo3 algo3,
  * * (value >= MHD_DIGEST_AUTH_UNAME_TYPE_STANDARD) is true if username is
  *   provided in clear text (not userhash matching is needed)
  *
- * @note Available since #MHD_VERSION 0x00097537
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DigestAuthUsernameType
 {
@@ -4901,7 +4901,7 @@ enum MHD_DigestAuthUsernameType
 
 /**
  * The QOP ('quality of protection') types.
- * @note Available since #MHD_VERSION 0x00097519
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DigestAuthQOP
 {
@@ -4940,7 +4940,7 @@ enum MHD_DigestAuthQOP
  * #MHD_DigestAuthQOP always can be casted to #MHD_DigestAuthMultiQOP, but
  * not vice versa.
  *
- * @note Available since #MHD_VERSION 0x00097530
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DigestAuthMultiQOP
 {
@@ -4991,7 +4991,7 @@ enum MHD_DigestAuthMultiQOP
 
 /**
  * The invalid value of 'nc' parameter in client Digest Authorization header.
- * @note Available since #MHD_VERSION 0x00097519
+ * @note Available since #MHD_VERSION 0x00097601
  */
 #define MHD_DIGEST_AUTH_INVALID_NC_VALUE        (0)
 
@@ -5003,7 +5003,7 @@ enum MHD_DigestAuthMultiQOP
  *
  * Application may modify buffers as needed until #MHD_free() is called for
  * pointer to this structure
- * @note Available since #MHD_VERSION 0x00097537
+ * @note Available since #MHD_VERSION 0x00097601
  */
 struct MHD_DigestAuthInfo
 {
@@ -5126,7 +5126,7 @@ struct MHD_DigestAuthInfo
  *         a pointer to the structure with information if the valid request
  *         header found, free using #MHD_free().
  * @sa #MHD_digest_auth_get_username3()
- * @note Available since #MHD_VERSION 0x00097519
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN struct MHD_DigestAuthInfo *
@@ -5141,7 +5141,7 @@ MHD_digest_auth_get_request_info3 (struct MHD_Connection *connection);
  *
  * Application may modify buffers as needed until #MHD_free() is called for
  * pointer to this structure
- * @note Available since #MHD_VERSION 0x00097537
+ * @note Available since #MHD_VERSION 0x00097601
  */
 struct MHD_DigestAuthUsernameInfo
 {
@@ -5220,7 +5220,7 @@ struct MHD_DigestAuthUsernameInfo
  *         a pointer structure with information if the valid request header
  *         found, free using #MHD_free().
  * @sa #MHD_digest_auth_get_request_info3() provides more complete information
- * @note Available since #MHD_VERSION 0x00097519
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN struct MHD_DigestAuthUsernameInfo *
@@ -5232,7 +5232,7 @@ MHD_digest_auth_get_username3 (struct MHD_Connection *connection);
  *
  * All error values are zero or negative.
  *
- * @note Available since #MHD_VERSION 0x00097531
+ * @note Available since #MHD_VERSION 0x00097601
  */
 enum MHD_DigestAuthResult
 {
@@ -5345,7 +5345,7 @@ enum MHD_DigestAuthResult
  *               by the client is not allowed by this parameter
  * @return #MHD_DAUTH_OK if authenticated,
  *         the error code otherwise
- * @note Available since #MHD_VERSION 0x00097528
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN enum MHD_DigestAuthResult
@@ -5389,7 +5389,7 @@ MHD_digest_auth_check3 (struct MHD_Connection *connection,
  *         not supported (or external error has occurred,
  *         see #MHD_FEATURE_EXTERN_HASH).
  * @sa #MHD_digest_auth_check_digest3()
- * @note Available since #MHD_VERSION 0x00097535
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN enum MHD_Result
@@ -5439,7 +5439,7 @@ MHD_digest_auth_calc_userdigest (enum MHD_DigestAuthAlgo3 algo3,
  * @return #MHD_DAUTH_OK if authenticated,
  *         the error code otherwise
  * @sa #MHD_digest_auth_calc_userdigest()
- * @note Available since #MHD_VERSION 0x00097528
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN enum MHD_DigestAuthResult
@@ -5509,7 +5509,7 @@ MHD_digest_auth_check_digest3 (struct MHD_Connection *connection,
  *                    added, indicating for the client that UTF-8 encoding
  *                    is preferred
  * @return #MHD_YES on success, #MHD_NO otherwise
- * @note Available since #MHD_VERSION 0x00097526
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN enum MHD_Result
@@ -5798,7 +5798,7 @@ struct MHD_BasicAuthInfo
  *         current request, or
  *         pointer to structure with username and password, which must be
  *         freed by #MHD_free().
- * @note Available since #MHD_VERSION 0x00097517
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN struct MHD_BasicAuthInfo *
@@ -5842,7 +5842,7 @@ MHD_basic_auth_get_username_password (struct MHD_Connection *connection,
  * @param response the response object to modify and queue; the NULL
  *                 is tolerated
  * @return #MHD_YES on success, #MHD_NO otherwise
- * @note Available since #MHD_VERSION 0x00097516
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup authentication
  */
 _MHD_EXTERN enum MHD_Result
@@ -6007,7 +6007,7 @@ MHD_get_version (void);
  *
  * @return version binary value, e.g. "0x00090900" (#MHD_VERSION of
  *         compiled MHD binary)
- * @note Available since #MHD_VERSION 0x00097544
+ * @note Available since #MHD_VERSION 0x00097601
  * @ingroup specialized
  */
 _MHD_EXTERN uint32_t
@@ -6051,7 +6051,7 @@ enum MHD_FEATURE
   /**
    * Get whether IPv6 without IPv4 is supported. If not supported
    * then IPv4 is always enabled in IPv6 sockets and
-   * flag #MHD_USE_DUAL_STACK if always used when #MHD_USE_IPv6 is
+   * flag #MHD_USE_DUAL_STACK is always used when #MHD_USE_IPv6 is
    * specified.
    */
   MHD_FEATURE_IPv6_ONLY = 5,
@@ -6189,17 +6189,17 @@ enum MHD_FEATURE
   /**
    * Get whether automatic parsing of HTTP Cookie header is supported.
    * If disabled, no MHD_COOKIE_KIND will be generated by MHD.
-   * MHD versions before 0x00097514 always support cookie parsing.
-   * @note Available since #MHD_VERSION 0x00097514
+   * MHD versions before 0x00097601 always support cookie parsing.
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_HTTPS_COOKIE_PARSING = 24,
 
   /**
    * Get whether the early version the Digest Authorization (RFC 2069) is
    * supported (digest authorisation without QOP parameter).
-   * Since #MHD_VERSION 0x00097530 it is always supported if Digest Auth
+   * Since #MHD_VERSION 0x00097601 it is always supported if Digest Auth
    * module is built.
-   * @note Available since #MHD_VERSION 0x00097527
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DIGEST_AUTH_RFC2069 = 25,
 
@@ -6208,7 +6208,7 @@ enum MHD_FEATURE
    * Authorization.
    * Currently it is always supported if Digest Auth module is built
    * unless manually disabled in a custom build.
-   * @note Available since #MHD_VERSION 0x00097527
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DIGEST_AUTH_MD5 = 26,
 
@@ -6217,16 +6217,16 @@ enum MHD_FEATURE
    * Authorization.
    * It it always supported since #MHD_VERSION 0x00096200 if Digest Auth
    * module is built unless manually disabled in a custom build.
-   * @note Available since #MHD_VERSION 0x00097527
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DIGEST_AUTH_SHA256 = 27,
 
   /**
    * Get whether the SHA-512/256-based hashing algorithms are supported
    * for Digest Authorization.
-   * It it always supported since #MHD_VERSION 0x00097539 if Digest Auth
+   * It it always supported since #MHD_VERSION 0x00097601 if Digest Auth
    * module is built unless manually disabled in a custom build.
-   * @note Available since #MHD_VERSION 0x00097536
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DIGEST_AUTH_SHA512_256 = 28,
 
@@ -6234,7 +6234,7 @@ enum MHD_FEATURE
    * Get whether QOP with value 'auth-int' (authentication with integrity
    * protection) is supported for Digest Authorization.
    * Currently it is always not supported.
-   * @note Available since #MHD_VERSION 0x00097536
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DIGEST_AUTH_AUTH_INT = 29,
 
@@ -6242,15 +6242,15 @@ enum MHD_FEATURE
    * Get whether 'session' algorithms (like 'MD5-sess') are supported for Digest
    * Authorization.
    * Currently it is always not supported.
-   * @note Available since #MHD_VERSION 0x00097536
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DIGEST_AUTH_ALGO_SESSION = 30,
 
   /**
    * Get whether 'userhash' is supported for Digest Authorization.
-   * It is always supported since #MHD_VERSION 0x00097526 if Digest Auth
+   * It is always supported since #MHD_VERSION 0x00097601 if Digest Auth
    * module is built.
-   * @note Available since #MHD_VERSION 0x00097536
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DIGEST_AUTH_USERHASH = 31,
 
@@ -6264,7 +6264,7 @@ enum MHD_FEATURE
    * potentially may fail even with valid input because of out-of-memory error
    * or crypto accelerator device failure, however in practice such fails are
    * unlikely.
-   * @note Available since #MHD_VERSION 0x00097540
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_EXTERN_HASH = 32,
 
@@ -6272,7 +6272,7 @@ enum MHD_FEATURE
    * Get whether MHD was built with asserts enabled.
    * For debug builds the error log is always enabled even if #MHD_USE_ERROR_LOG
    * is not specified for daemon.
-   * @note Available since #MHD_VERSION 0x00097543
+   * @note Available since #MHD_VERSION 0x00097601
    */
   MHD_FEATURE_DEBUG_BUILD = 33
 };

+ 1 - 1
src/lib/Makefile.am

@@ -156,7 +156,7 @@ if USE_COVERAGE
   AM_CFLAGS += --coverage
 endif
 
-if !MHD_HAVE_TSEARCH
+if !MHD_USE_SYS_TSEARCH
 libmicrohttpd2_la_SOURCES += \
   tsearch.c tsearch.h
 endif

+ 5 - 5
src/microhttpd/Makefile.am

@@ -16,14 +16,14 @@ lib_LTLIBRARIES = \
 noinst_DATA =
 MOSTLYCLEANFILES =
 
-AM_V_LIB = $(am__v_LIB_$(V))
-am__v_LIB_ = $(am__v_LIB_$(AM_DEFAULT_VERBOSITY))
+AM_V_LIB = $(am__v_LIB_@AM_V@)
+am__v_LIB_ = $(am__v_LIB_@AM_DEFAULT_V@)
 am__v_LIB_0 = @echo "  LIB     " $@;
 am__v_LIB_1 = 
 
 if W32_SHARED_LIB_EXP
-AM_V_DLLTOOL = $(am__v_DLLTOOL_$(V))
-am__v_DLLTOOL_ = $(am__v_DLLTOOL_$(AM_DEFAULT_VERBOSITY))
+AM_V_DLLTOOL = $(am__v_DLLTOOL_@AM_V@)
+am__v_DLLTOOL_ = $(am__v_DLLTOOL_@AM_DEFAULT_V@)
 am__v_DLLTOOL_0 = @echo "  DLLTOOL " $@;
 am__v_DLLTOOL_1 = 
 
@@ -153,7 +153,7 @@ if USE_COVERAGE
   AM_CFLAGS += --coverage
 endif
 
-if !MHD_HAVE_TSEARCH
+if !MHD_USE_SYS_TSEARCH
 libmicrohttpd_la_SOURCES += \
   tsearch.c tsearch.h
 endif

+ 22 - 9
src/microhttpd/connection.c

@@ -1597,11 +1597,20 @@ connection_shrink_read_buffer (struct MHD_Connection *connection)
   }
 
   mhd_assert (c->read_buffer_offset <= c->read_buffer_size);
-  new_buf = MHD_pool_reallocate (c->pool, c->read_buffer, c->read_buffer_size,
-                                 c->read_buffer_offset);
-  mhd_assert (c->read_buffer == new_buf);
-  c->read_buffer = new_buf;
-  c->read_buffer_size = c->read_buffer_offset;
+  if (0 == c->read_buffer_offset)
+  {
+    MHD_pool_deallocate (c->pool, c->read_buffer, c->read_buffer_size);
+    c->read_buffer = NULL;
+    c->read_buffer_size = 0;
+  }
+  else
+  {
+    new_buf = MHD_pool_reallocate (c->pool, c->read_buffer, c->read_buffer_size,
+                                   c->read_buffer_offset);
+    mhd_assert (c->read_buffer == new_buf);
+    c->read_buffer = new_buf;
+    c->read_buffer_size = c->read_buffer_offset;
+  }
 }
 
 
@@ -2424,10 +2433,10 @@ transmit_error_response_len (struct MHD_Connection *connection,
   {
     /* Read buffer is not needed anymore, discard it
      * to free some space for error response. */
-    connection->read_buffer = MHD_pool_reallocate (connection->pool,
-                                                   connection->read_buffer,
-                                                   connection->read_buffer_size,
-                                                   0);
+    MHD_pool_deallocate (connection->pool,
+                         connection->read_buffer,
+                         connection->read_buffer_size);
+    connection->read_buffer = NULL;
     connection->read_buffer_size = 0;
     connection->read_buffer_offset = 0;
   }
@@ -5121,6 +5130,7 @@ MHD_connection_handle_idle (struct MHD_Connection *connection)
           continue;
         }
         /* Response is not required anymore for this connection. */
+        if (1)
         {
           struct MHD_Response *const resp = connection->rp.response;
 
@@ -5405,6 +5415,9 @@ MHD_get_connection_info (struct MHD_Connection *connection,
       gnutls_protocol_t res;
       res = gnutls_protocol_get_version (connection->tls.gnutls.tls_session);
       connection->connection_info_dummy.protocol = (int) res;
+
+      // NEW:
+      // connection->connection_info_dummy.protocol = (int) MHD_tls_get_protocol_version (connection);
     }
     return &connection->connection_info_dummy;
   case MHD_CONNECTION_INFO_GNUTLS_SESSION:

+ 30 - 0
src/microhttpd/connection_https_openssl.c

@@ -33,6 +33,36 @@
 #include  "openssl/ssl.h"
 #include  "openssl/err.h"
 
+
+#if ENABLE_TLS_PLUGINS
+#define PRIVATE_SYMBOL static
+#else
+#define PRIVATE_SYMBOL /* public */
+#endif
+
+
+PRIVATE_SYMBOL
+enum MHD_TlsProtocolVersion
+MHD_TLS_openssl_get_version (struct MHD_Connection *connection)
+{
+  // ...
+}
+
+
+struct TLS_Plugin *
+MHD_TLS_openssl_init (void *ctx)
+{
+#define OPENSSL_API(rval,fname,fargs) \
+  fname = MHD_TLS_openssl_ ## fname
+
+  static struct TLS_Plugin plugin = {
+    TLS_API (OPENSSL_API)
+  };
+#undef OPENSSL_API
+  return &plugin;
+}
+
+
 FILE *err_file;
 
 /**

+ 20 - 4
src/microhttpd/connection_https_openssl.h

@@ -18,15 +18,31 @@
 */
 
 /**
- * @file connection_https.h
+ * @file connection_https_openssl.h
  * @brief  Methods for managing connections
  * @author Edouard LEFIZELIER
  */
-
-#ifndef CONNECTION_HTTPS_EXT_OPENSSL_H
-#define CONNECTION_HTTPS_EXT_OPENSSL_H
+#ifndef CONNECTION_HTTPS_OPENSSL_H
+#define CONNECTION_HTTPS_OPENSSL_H
 
 #include "internal.h"
+#include "tls_plugin.h"
+
+#if ENABLE_TLS_PLUGINS
+
+struct TLS_Plugin *
+MHD_TLS_openssl_init (void *ctx);
+
+#else
+
+#define OPENSSL_API(rval,fname,...) \
+  rval MHD_TLS_openssl_ ## fname (__VA_ARGS__)
+TLS_API (OPENSSL_API)
+#undef OPENSSL_API
+
+#endif
+
+
 /* Not sure about those includes */
 #include  "openssl/bio.h"
 #include  "openssl/ssl.h"

+ 18 - 5
src/microhttpd/daemon.c

@@ -47,11 +47,11 @@
 #include "mhd_align.h"
 #include "mhd_str.h"
 
-#ifdef HAVE_SEARCH_H
+#ifdef MHD_USE_SYS_TSEARCH
 #include <search.h>
-#else
+#else  /* ! MHD_USE_SYS_TSEARCH */
 #include "tsearch.h"
-#endif
+#endif /* ! MHD_USE_SYS_TSEARCH */
 
 #ifdef HTTPS_SUPPORT
 #include "connection_https.h"
@@ -483,10 +483,11 @@ MHD_ip_limit_del (struct MHD_Daemon *daemon,
     tdelete (found_key,
              &daemon->per_ip_connection_count,
              &MHD_ip_addr_compare);
+    MHD_ip_count_unlock (daemon);
     free (found_key);
   }
-
-  MHD_ip_count_unlock (daemon);
+  else
+    MHD_ip_count_unlock (daemon);
 }
 
 
@@ -1520,6 +1521,8 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
     if (data_size > SSIZE_MAX)
       data_size = SSIZE_MAX;
 
+    // res = MHD_TLS_record_send (connection, urh->out_buffer, data_size);
+
     res = gnutls_record_send (connection->tls.gnutls.tls_session,
                               urh->out_buffer,
                               data_size);
@@ -6250,6 +6253,16 @@ parse_options_va (struct MHD_Daemon *daemon,
     /* Increase counter at start, so resulting value is number of
      * processed options, including any failed ones. */
     daemon->num_opts++;
+
+    // NOTE: how to handle switch with some TLS and some non-TLS...
+    int mret;
+    mret = MHD_TLS_parse_option (daemon, opt, ap);
+    if (mret == 1)
+      continue;  // this was a TLS option, move on to the next!
+    if (mret == -1)
+      fail;      // this was a TLS option, but we failed to process it
+
+    // Not a TLS option, try non-TLS options here:
     switch (opt)
     {
     case MHD_OPTION_CONNECTION_MEMORY_LIMIT:

+ 9 - 0
src/microhttpd/internal.h

@@ -33,6 +33,7 @@
 #include "platform.h"
 #include "microhttpd.h"
 #include "mhd_assert.h"
+#include "tls_plugin.h"
 
 #ifdef HTTPS_SUPPORT
 #include <gnutls/gnutls.h>
@@ -1945,6 +1946,7 @@ struct MHD_Daemon
 
 #ifdef UPGRADE_SUPPORT
 #ifdef HTTPS_SUPPORT
+
   /**
    * File descriptor associated with the #run_epoll_for_upgrade() loop.
    * Only available if #MHD_USE_HTTPS_EPOLL_UPGRADE is set.
@@ -2282,6 +2284,13 @@ struct MHD_Daemon
 
   union TLS_DaemonState tls_daemonsState;
 
+#if ENABLE_TLS_PLUGINS
+  /**
+   * TLS plugin to use.
+   */
+  struct TLS_Plugin *tls_plugin;
+#endif
+
 #endif /* HTTPS_SUPPORT */
 
 #ifdef DAUTH_SUPPORT

+ 11 - 6
src/microhttpd/md5_ext.c

@@ -18,12 +18,10 @@
 */
 
 /**
- * @file microhttpd/md5_ext.h
+ * @file microhttpd/md5_ext.c
  * @brief  Wrapper for MD5 calculation performed by TLS library
  * @author Karlson2k (Evgeny Grin)
  */
-
-#include <gnutls/crypto.h>
 #include "md5_ext.h"
 #include "mhd_assert.h"
 
@@ -39,14 +37,21 @@ void
 MHD_MD5_init_one_time (struct Md5CtxExt *ctx)
 {
   ctx->handle = NULL;
-  ctx->ext_error = gnutls_hash_init (&ctx->handle, GNUTLS_DIG_MD5);
+  ctx->ext_error = gnutls_hash_init (&ctx->handle,
+                                     GNUTLS_DIG_MD5);
   if ((0 != ctx->ext_error) && (NULL != ctx->handle))
   {
+    /* GnuTLS may return initialisation error and set the handle at the
+       same time. Such handle cannot be used for calculations.
+       Note: GnuTLS may also return an error and NOT set the handle. */
     gnutls_free (ctx->handle);
     ctx->handle = NULL;
   }
-  else
-    mhd_assert (NULL != ctx->handle);
+
+  /* If handle is NULL, the error must be set */
+  mhd_assert ((NULL != ctx->handle) || (0 != ctx->ext_error));
+  /* If error is set, the handle must be NULL */
+  mhd_assert ((0 == ctx->ext_error) || (NULL == ctx->handle));
 }
 
 

+ 2 - 5
src/microhttpd/md5_ext.h

@@ -16,13 +16,11 @@
      License along with GNU libmicrohttpd.
      If not, see <http://www.gnu.org/licenses/>.
 */
-
 /**
  * @file microhttpd/md5_ext.h
  * @brief  Wrapper declarations for MD5 calculation performed by TLS library
  * @author Karlson2k (Evgeny Grin)
  */
-
 #ifndef MHD_MD5_EXT_H
 #define MHD_MD5_EXT_H 1
 
@@ -31,6 +29,7 @@
 #ifdef HAVE_STDDEF_H
 #include <stddef.h>  /* for size_t */
 #endif /* HAVE_STDDEF_H */
+#include <gnutls/crypto.h>
 
 /**
  * Size of MD5 resulting digest in bytes
@@ -38,8 +37,6 @@
  */
 #define MD5_DIGEST_SIZE (16)
 
-/* Actual declaration is in GnuTLS lib header */
-struct hash_hd_st;
 
 /**
  * Indicates that struct Md5CtxExt has 'ext_error'
@@ -51,7 +48,7 @@ struct hash_hd_st;
  */
 struct Md5CtxExt
 {
-  struct hash_hd_st *handle; /**< Hash calculation handle */
+  gnutls_hash_hd_t handle; /**< Hash calculation handle */
   int ext_error; /**< Non-zero if external error occurs during init or hashing */
 };
 

+ 119 - 5
src/microhttpd/memorypool.c

@@ -106,13 +106,13 @@
  * Boolean 'true' if the first pointer is less or equal the second pointer
  */
 #define mp_ptr_le_(p1,p2) \
-  (((const uint8_t*)p1) <= ((const uint8_t*)p2))
+  (((const uint8_t*)(p1)) <= ((const uint8_t*)(p2)))
 /**
  * The difference in bytes between positions of the first and
  * the second pointers
  */
 #define mp_ptr_diff_(p1,p2) \
-  ((size_t)(((const uint8_t*)p1) - ((const uint8_t*)p2)))
+  ((size_t)(((const uint8_t*)(p1)) - ((const uint8_t*)(p2))))
 #else  /* MHD_ASAN_POISON_ACTIVE */
 #define _MHD_RED_ZONE_SIZE (ALIGN_SIZE)
 #define ROUND_TO_ALIGN_PLUS_RED_ZONE(n) (ROUND_TO_ALIGN(n) + _MHD_RED_ZONE_SIZE)
@@ -125,14 +125,14 @@
  * Boolean 'true' if the first pointer is less or equal the second pointer
  */
 #define mp_ptr_le_(p1,p2) \
-  (((uintptr_t)((const void*)(p1))) <= ((uintptr_t)((const void*)(p1))))
+  (((uintptr_t)((const void*)(p1))) <= ((uintptr_t)((const void*)(p2))))
 /**
  * The difference in bytes between positions of the first and
  * the second pointers
  */
 #define mp_ptr_diff_(p1,p2) \
-  ((size_t)(((uintptr_t)((const uint8_t*)p1)) - \
-            ((uintptr_t)((const uint8_t*)p2))))
+  ((size_t)(((uintptr_t)((const uint8_t*)(p1))) - \
+            ((uintptr_t)((const uint8_t*)(p2)))))
 #elif defined(FUNC_ATTR_PTRCOMPARE_WORKS) && \
   defined(FUNC_ATTR_PTRSUBTRACT_WORKS)
 #ifdef _DEBUG
@@ -345,6 +345,7 @@ MHD_pool_destroy (struct MemoryPool *pool)
 
   mhd_assert (pool->end >= pool->pos);
   mhd_assert (pool->size >= pool->end - pool->pos);
+  mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
   _MHD_UNPOISON_MEMORY (pool->memory, pool->size);
   if (! pool->is_mmap)
     free (pool->memory);
@@ -374,6 +375,7 @@ MHD_pool_get_free (struct MemoryPool *pool)
 {
   mhd_assert (pool->end >= pool->pos);
   mhd_assert (pool->size >= pool->end - pool->pos);
+  mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
 #ifdef MHD_ASAN_POISON_ACTIVE
   if ((pool->end - pool->pos) <= _MHD_RED_ZONE_SIZE)
     return 0;
@@ -403,6 +405,7 @@ MHD_pool_allocate (struct MemoryPool *pool,
 
   mhd_assert (pool->end >= pool->pos);
   mhd_assert (pool->size >= pool->end - pool->pos);
+  mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
   asize = ROUND_TO_ALIGN_PLUS_RED_ZONE (size);
   if ( (0 == asize) && (0 != size) )
     return NULL; /* size too close to SIZE_MAX */
@@ -452,6 +455,7 @@ MHD_pool_try_alloc (struct MemoryPool *pool,
 
   mhd_assert (pool->end >= pool->pos);
   mhd_assert (pool->size >= pool->end - pool->pos);
+  mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
   asize = ROUND_TO_ALIGN_PLUS_RED_ZONE (size);
   if ( (0 == asize) && (0 != size) )
   { /* size is too close to SIZE_MAX, very unlikely */
@@ -505,6 +509,10 @@ MHD_pool_reallocate (struct MemoryPool *pool,
   mhd_assert (pool->size >= pool->end - pool->pos);
   mhd_assert (old != NULL || old_size == 0);
   mhd_assert (pool->size >= old_size);
+  mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
+#if defined(MHD_ASAN_POISON_ACTIVE) && defined(HAVE___ASAN_REGION_IS_POISONED)
+  mhd_assert (NULL == __asan_region_is_poisoned (old, old_size));
+#endif /* MHD_ASAN_POISON_ACTIVE && HAVE___ASAN_REGION_IS_POISONED */
 
   if (NULL != old)
   {   /* Have previously allocated data */
@@ -568,6 +576,109 @@ MHD_pool_reallocate (struct MemoryPool *pool,
 }
 
 
+/**
+ * Deallocate a block of memory obtained from the pool.
+ *
+ * If the given block is not the most recently
+ * (re)allocated block, the memory of the this block
+ * allocation may be not released until the pool is
+ * destroyed or reset.
+ *
+ * @param pool memory pool to use for the operation
+ * @param block the allocated block, the NULL is tolerated
+ * @param block_size the size of the allocated block
+ */
+void
+MHD_pool_deallocate (struct MemoryPool *pool,
+                     void *block,
+                     size_t block_size)
+{
+  mhd_assert (pool->end >= pool->pos);
+  mhd_assert (pool->size >= pool->end - pool->pos);
+  mhd_assert (block != NULL || block_size == 0);
+  mhd_assert (pool->size >= block_size);
+  mhd_assert (pool->pos == ROUND_TO_ALIGN (pool->pos));
+
+  if (NULL != block)
+  {   /* Have previously allocated data */
+    const size_t block_offset = mp_ptr_diff_ (block, pool->memory);
+    mhd_assert (mp_ptr_le_ (pool->memory, block));
+    mhd_assert (block_offset <= pool->size);
+    mhd_assert ((block_offset != pool->pos) || (block_size == 0));
+    /* Zero-out deallocated region */
+    if (0 != block_size)
+    {
+      memset (block, 0, block_size);
+      _MHD_POISON_MEMORY (block, block_size);
+    }
+#if ! defined(MHD_FAVOR_SMALL_CODE) && ! defined(MHD_ASAN_POISON_ACTIVE)
+    else
+      return; /* Zero size, no need to do anything */
+#endif /* ! MHD_FAVOR_SMALL_CODE && ! MHD_ASAN_POISON_ACTIVE */
+    if (block_offset <= pool->pos)
+    {
+      /* "Normal" block, not allocated "from the end". */
+      const size_t alg_end =
+        ROUND_TO_ALIGN_PLUS_RED_ZONE (block_offset + block_size);
+      mhd_assert (alg_end <= pool->pos);
+      if (alg_end == pool->pos)
+      {
+        /* The last allocated block, return deallocated block to the pool */
+        size_t alg_start = ROUND_TO_ALIGN (block_offset);
+        mhd_assert (alg_start >= block_offset);
+#if defined(MHD_ASAN_POISON_ACTIVE)
+        if (alg_start != block_offset)
+        {
+          _MHD_POISON_MEMORY (pool->memory + block_offset, \
+                              alg_start - block_offset);
+        }
+        else if (0 != alg_start)
+        {
+          bool need_red_zone_before;
+          mhd_assert (_MHD_RED_ZONE_SIZE <= alg_start);
+#if defined(HAVE___ASAN_REGION_IS_POISONED)
+          need_red_zone_before =
+            (NULL == __asan_region_is_poisoned (pool->memory
+                                                + alg_start
+                                                - _MHD_RED_ZONE_SIZE,
+                                                _MHD_RED_ZONE_SIZE));
+#elif defined(HAVE___ASAN_ADDRESS_IS_POISONED)
+          need_red_zone_before =
+            (0 == __asan_address_is_poisoned (pool->memory + alg_start - 1));
+#else  /* ! HAVE___ASAN_ADDRESS_IS_POISONED */
+          need_red_zone_before = true; /* Unknown, assume new red zone needed */
+#endif /* ! HAVE___ASAN_ADDRESS_IS_POISONED */
+          if (need_red_zone_before)
+          {
+            _MHD_POISON_MEMORY (pool->memory + alg_start, _MHD_RED_ZONE_SIZE);
+            alg_start += _MHD_RED_ZONE_SIZE;
+          }
+        }
+#endif /* MHD_ASAN_POISON_ACTIVE */
+        mhd_assert (alg_start <= pool->pos);
+        mhd_assert (alg_start == ROUND_TO_ALIGN (alg_start));
+        pool->pos = alg_start;
+      }
+    }
+    else
+    {
+      /* Allocated "from the end" block. */
+      /* The size and the pointers of such block should not be manipulated by
+         MHD code (block split is disallowed). */
+      mhd_assert (block_offset >= pool->end);
+      mhd_assert (ROUND_TO_ALIGN (block_offset) == block_offset);
+      if (block_offset == pool->end)
+      {
+        /* The last allocated block, return deallocated block to the pool */
+        const size_t alg_end =
+          ROUND_TO_ALIGN_PLUS_RED_ZONE (block_offset + block_size);
+        pool->end = alg_end;
+      }
+    }
+  }
+}
+
+
 /**
  * Clear all entries from the memory pool except
  * for @a keep of the given @a copy_bytes.  The pointer
@@ -596,6 +707,9 @@ MHD_pool_reset (struct MemoryPool *pool,
   /* (keep == NULL || pool->memory + pool->size >= (uint8_t*) keep + copy_bytes) */
   mhd_assert ((keep == NULL) || \
               (pool->size >= mp_ptr_diff_ (keep, pool->memory) + copy_bytes));
+#if defined(MHD_ASAN_POISON_ACTIVE) && defined(HAVE___ASAN_REGION_IS_POISONED)
+  mhd_assert (NULL == __asan_region_is_poisoned (keep, copy_bytes));
+#endif /* MHD_ASAN_POISON_ACTIVE && HAVE___ASAN_REGION_IS_POISONED */
   _MHD_UNPOISON_MEMORY (pool->memory, new_size);
   if ( (NULL != keep) &&
        (keep != pool->memory) )

+ 18 - 0
src/microhttpd/memorypool.h

@@ -147,6 +147,24 @@ size_t
 MHD_pool_get_free (struct MemoryPool *pool);
 
 
+/**
+ * Deallocate a block of memory obtained from the pool.
+ *
+ * If the given block is not the most recently
+ * (re)allocated block, the memory of the this block
+ * allocation may be not released until the pool is
+ * destroyed or reset.
+ *
+ * @param pool memory pool to use for the operation
+ * @param block the allocated block, the NULL is tolerated
+ * @param block_size the size of the allocated block
+ */
+void
+MHD_pool_deallocate (struct MemoryPool *pool,
+                     void *block,
+                     size_t block_size);
+
+
 /**
  * Clear all entries from the memory pool except
  * for @a keep of the given @a copy_bytes.  The pointer

+ 1 - 1
src/microhttpd/postprocessor.c

@@ -83,7 +83,7 @@ MHD_create_post_processor (struct MHD_Connection *connection,
       return NULL; /* failed to determine boundary */
     boundary += MHD_STATICSTR_LEN_ ("boundary=");
     blen = strlen (boundary);
-    if ( (blen == 0) ||
+    if ( (blen < 2) ||
          (blen * 2 + 2 > buffer_size) )
       return NULL;              /* (will be) out of memory or invalid boundary */
     if ( (boundary[0] == '"') &&

+ 63 - 43
src/microhttpd/response.c

@@ -1942,22 +1942,14 @@ MHD_response_execute_upgrade_ (struct MHD_Response *response,
                MHD_thread_ID_match_current_ (connection->pid) );
 #endif /* MHD_USE_THREADS */
 
-  if (0 == (daemon->options & MHD_ALLOW_UPGRADE))
-    return MHD_NO;
-
-  if (NULL ==
-      MHD_get_response_element_n_ (response, MHD_HEADER_KIND,
-                                   MHD_HTTP_HEADER_UPGRADE,
-                                   MHD_STATICSTR_LEN_ ( \
-                                     MHD_HTTP_HEADER_UPGRADE)))
-  {
-#ifdef HAVE_MESSAGES
-    MHD_DLOG (daemon,
-              _ ("Invalid response for upgrade: " \
-                 "application failed to set the 'Upgrade' header!\n"));
-#endif
-    return MHD_NO;
-  }
+  /* "Upgrade" responses accepted only if MHD_ALLOW_UPGRADE is enabled */
+  mhd_assert (0 != (daemon->options & MHD_ALLOW_UPGRADE));
+  /* The header was checked when response queued */
+  mhd_assert (NULL != \
+              MHD_get_response_element_n_ (response, MHD_HEADER_KIND,
+                                           MHD_HTTP_HEADER_UPGRADE,
+                                           MHD_STATICSTR_LEN_ ( \
+                                             MHD_HTTP_HEADER_UPGRADE)));
 
   urh = MHD_calloc_ (1, sizeof (struct MHD_UpgradeResponseHandle));
   if (NULL == urh)
@@ -1970,9 +1962,6 @@ MHD_response_execute_upgrade_ (struct MHD_Response *response,
 #ifdef HTTPS_SUPPORT
   if (0 != (daemon->options & MHD_USE_TLS) )
   {
-    struct MemoryPool *pool;
-    size_t avail;
-    char *buf;
     MHD_socket sv[2];
 #if defined(MHD_socket_nosignal_) || ! defined(MHD_socket_pair_nblk_)
     int res1;
@@ -2051,30 +2040,6 @@ MHD_response_execute_upgrade_ (struct MHD_Response *response,
     urh->mhd.socket = sv[1];
     urh->mhd.urh = urh;
     urh->mhd.celi = MHD_EPOLL_STATE_UNREADY;
-    pool = connection->pool;
-    avail = MHD_pool_get_free (pool);
-    if (avail < RESERVE_EBUF_SIZE)
-    {
-      /* connection's pool is totally at the limit,
-         use our 'emergency' buffer of #RESERVE_EBUF_SIZE bytes. */
-      avail = RESERVE_EBUF_SIZE;
-      buf = urh->e_buf;
-    }
-    else
-    {
-      /* Normal case: grab all remaining memory from the
-         connection's pool for the IO buffers; the connection
-         certainly won't need it anymore as we've upgraded
-         to another protocol. */
-      buf = MHD_pool_allocate (pool,
-                               avail,
-                               false);
-    }
-    /* use half the buffer for inbound, half for outbound */
-    urh->in_buffer_size = avail / 2;
-    urh->out_buffer_size = avail - urh->in_buffer_size;
-    urh->in_buffer = buf;
-    urh->out_buffer = &buf[urh->in_buffer_size];
 #ifdef EPOLL_SUPPORT
     /* Launch IO processing by the event loop */
     if (0 != (daemon->options & MHD_USE_EPOLL))
@@ -2175,6 +2140,61 @@ MHD_response_execute_upgrade_ (struct MHD_Response *response,
                              connection->socket_fd,
 #endif /* ! HTTPS_SUPPORT */
                              urh);
+
+#ifdef HTTPS_SUPPORT
+  if (0 != (daemon->options & MHD_USE_TLS))
+  {
+    struct MemoryPool *const pool = connection->pool;
+    size_t avail;
+    char *buf;
+
+    /* All data should be sent already */
+    mhd_assert (connection->write_buffer_send_offset == \
+                connection->write_buffer_append_offset);
+    MHD_pool_deallocate (pool, connection->write_buffer,
+                         connection->write_buffer_size);
+    connection->write_buffer_append_offset = 0;
+    connection->write_buffer_send_offset = 0;
+    connection->write_buffer_size = 0;
+    connection->write_buffer = NULL;
+
+    /* Extra read data should be processed already by the application */
+    MHD_pool_deallocate (pool, connection->read_buffer,
+                         connection->read_buffer_size);
+    connection->read_buffer_offset = 0;
+    connection->read_buffer_size = 0;
+    connection->read_buffer = NULL;
+
+    avail = MHD_pool_get_free (pool);
+    if (avail < RESERVE_EBUF_SIZE)
+    {
+      /* connection's pool is totally at the limit,
+         use our 'emergency' buffer of #RESERVE_EBUF_SIZE bytes. */
+      avail = RESERVE_EBUF_SIZE;
+      buf = urh->e_buf;
+#ifdef HAVE_MESSAGES
+      MHD_DLOG (daemon,
+                _ ("Memory shortage in connection's memory pool. " \
+                   "The \"upgraded\" communication will be inefficient.\n"));
+#endif
+    }
+    else
+    {
+      /* Normal case: grab all remaining memory from the
+         connection's pool for the IO buffers; the connection
+         certainly won't need it anymore as we've upgraded
+         to another protocol. */
+      buf = MHD_pool_allocate (pool,
+                               avail,
+                               false);
+    }
+    /* use half the buffer for inbound, half for outbound */
+    urh->in_buffer_size = avail / 2;
+    urh->out_buffer_size = avail - urh->in_buffer_size;
+    urh->in_buffer = buf;
+    urh->out_buffer = buf + urh->in_buffer_size;
+  }
+#endif /* HTTPS_SUPPORT */
   return MHD_YES;
 }
 

+ 8 - 2
src/microhttpd/sha256_ext.c

@@ -42,11 +42,17 @@ MHD_SHA256_init_one_time (struct Sha256CtxExt *ctx)
   ctx->ext_error = gnutls_hash_init (&ctx->handle, GNUTLS_DIG_SHA256);
   if ((0 != ctx->ext_error) && (NULL != ctx->handle))
   {
+    /* GnuTLS may return initialisation error and set the handle at the
+       same time. Such handle cannot be used for calculations.
+       Note: GnuTLS may also return an error and NOT set the handle. */
     gnutls_free (ctx->handle);
     ctx->handle = NULL;
   }
-  else
-    mhd_assert (NULL != ctx->handle);
+
+  /* If handle is NULL, the error must be set */
+  mhd_assert ((NULL != ctx->handle) || (0 != ctx->ext_error));
+  /* If error is set, the handle must be NULL */
+  mhd_assert ((0 == ctx->ext_error) || (NULL == ctx->handle));
 }
 
 

+ 90 - 0
src/microhttpd/tls_plugin.h

@@ -0,0 +1,90 @@
+/*
+     This file is part of libmicrohttpd
+     Copyright (C) 2023 Christian Grothoff
+
+     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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+*/
+/**
+ * @file tls_plugin.h
+ * @brief  TLS API that enables pluggable TLS use
+ * @author Christian Grothoff
+ */
+#ifndef TLS_PLUGIN_H
+#define TLS_PLUGIN_H
+
+
+#define TLS_API(M)           \
+  M (enum MHD_TlsProtocolVersion, get_version, struct MHD_Connection *); \
+  M (void, set_callbacks, struct MHD_Connection *);                      \
+  M (bool, connection_shutdown, struct MHD_Connection *);                \
+  M (ssize_t, record_send, struct MHD_Connection *connection,            \
+     const void *buf, size_t data_size);                                 \
+  M (int, init_certificate, struct MHD_Daemon *);
+
+
+#define TLS_CALLBACKS(rval,fname,...) \
+  rval (*fname)(__VA_ARGS__)
+
+struct TLS_Plugin
+{
+  TLS_API (TLS_CALLBACKS)
+};
+
+
+#if ENABLE_TLS_PLUGINS
+
+
+/* If we are using a pluggable TLS library, use the plugin! */
+
+#define TLS_PLUGIN_API(rval,fname,...)                \
+  #define MHD_TLS_ ## fname daemon->tls_plugin->fname
+TLS_API (TLS_PLUGIN_API)
+#undef TLS_PLUGIN_API
+
+#else
+#if HTTPS_WITH_GNUTLS
+
+/* If we are using GNUtls exclusively, define
+   MHD_TLS_-API functions to directly use GNUtls variant */
+#define TLS_GNUTLS_API(rval,fname,...)                \
+  #define MHD_TLS_ ## fname MHD_TLS_gnutls_ ## fname
+TLS_API (TLS_GNUTLS_API)
+#undef TLS_GNUTLS_API
+
+#elif HTTPS_WITH_OPENSSL
+
+/* If we are using OpenSSL exclusively, define
+   MHD_TLS_-API functions to directly use OpenSSL variant */
+#define TLS_OPENSSL_API(rval,fname,...)                \
+  #define MHD_TLS_ ## fname MHD_TLS_openssl_ ## fname
+TLS_API (TLS_OPENSSL_API)
+#undef TLS_OPENSSL_API
+
+#elif HTTPS_WITH_MBEDTLS
+
+/* If we are using Mbedtls exclusively, define
+   MHD_TLS_-API functions to directly use Mbedtls variant */
+#define TLS_MBEDTLS_API(rval,fname,...)                \
+  #define MHD_TLS_ ## fname MHD_TLS_mbedtls_ ## fname
+TLS_API (TLS_MBEDTLS_API)
+#undef TLS_MBEDTLS_API
+
+#else
+#error WTF
+#endif
+#endif
+
+#endif

+ 36 - 50
src/microhttpd/tsearch.c

@@ -21,119 +21,105 @@
 
 typedef struct node
 {
-  const void   *key;
-  struct node  *llink;
-  struct node  *rlink;
+  const void *key;
+  struct node  *llink, *rlink;
 } node_t;
 
 
-/*	$NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $	*/
+/*  $NetBSD: tsearch.c,v 1.7 2012/06/25 22:32:45 abs Exp $  */
 /* find or insert datum into search tree */
 void *
-tsearch (const void *vkey,  /* key to be located */
-         void **vrootp,     /* address of tree root */
+tsearch (const void *vkey, void **vrootp,
          int (*compar)(const void *, const void *))
 {
   node_t *q;
   node_t **rootp = (node_t **) vrootp;
 
-  if (NULL == rootp)
+  if (rootp == NULL)
     return NULL;
 
-  while (*rootp != NULL)
-  {   /* Knuth's T1: */
+  while (*rootp != NULL)        /* Knuth's T1: */
+  {
     int r;
 
     if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
       return *rootp;                               /* we found it! */
 
     rootp = (r < 0) ?
-            &(*rootp)->llink : /* T3: follow left branch */
-            &(*rootp)->rlink; /* T4: follow right branch */
+            &(*rootp)->llink :      /* T3: follow left branch */
+            &(*rootp)->rlink;       /* T4: follow right branch */
   }
 
   q = malloc (sizeof(node_t)); /* T5: key not found */
-  if (q)
-  {                            /* make new node */
+  if (q != NULL)               /* make new node */
+  {
     *rootp = q;                /* link new node to old */
-    q->key = vkey;             /* initialize new node */
+    q->key = vkey; /* initialize new node */
     q->llink = q->rlink = NULL;
   }
   return q;
 }
 
 
-/*	$NetBSD: tfind.c,v 1.5 2005/03/23 08:16:53 kleink Exp $	*/
-/* find a node, or return NULL */
+/*  $NetBSD: tfind.c,v 1.7 2012/06/25 22:32:45 abs Exp $    */
+/* find a node by key "vkey" in tree "vrootp", or return 0 */
 void *
-tfind (const void *vkey,         /* key to be found */
-       void *const *vrootp,      /* address of the tree root */
+tfind (const void *vkey, void *const *vrootp,
        int (*compar)(const void *, const void *))
 {
-  node_t *const *rootp = (node_t *const*) vrootp;
+  node_t *const *rootp = (node_t *const *) vrootp;
 
-  if (NULL == rootp)
+  if (rootp == NULL)
     return NULL;
 
-  while (*rootp != NULL)
-  {     /* T1: */
+  while (*rootp != NULL)            /* T1: */
+  {
     int r;
 
     if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
       return *rootp;                               /* key found */
     rootp = (r < 0) ?
-            &(*rootp)->llink : /* T3: follow left branch */
-            &(*rootp)->rlink; /* T4: follow right branch */
+            &(*rootp)->llink :                     /* T3: follow left branch */
+            &(*rootp)->rlink;                      /* T4: follow right branch */
   }
   return NULL;
 }
 
 
-/*	$NetBSD: tdelete.c,v 1.2 1999/09/16 11:45:37 lukem Exp $	*/
-/*
- * delete node with given key
- *
- * vkey:   key to be deleted
- * vrootp: address of the root of the tree
- * compar: function to carry out node comparisons
- */
+/*  $NetBSD: tdelete.c,v 1.8 2016/01/20 20:47:41 christos Exp $ */
+/* find a node with key "vkey" in tree "vrootp" */
 void *
-tdelete (const void *__restrict vkey,
-         void **__restrict vrootp,
+tdelete (const void *vkey, void **vrootp,
          int (*compar)(const void *, const void *))
 {
   node_t **rootp = (node_t **) vrootp;
-  node_t *p;
-  node_t *q;
-  node_t *r;
+  node_t *p, *q, *r;
   int cmp;
 
-  if ((rootp == NULL) || ((p = *rootp) == NULL))
+  if ((rootp == NULL) || ((p = *rootp) == NULL) )
     return NULL;
 
   while ((cmp = (*compar)(vkey, (*rootp)->key)) != 0)
   {
     p = *rootp;
     rootp = (cmp < 0) ?
-            &(*rootp)->llink : /* follow llink branch */
-            &(*rootp)->rlink; /* follow rlink branch */
+            &(*rootp)->llink :       /* follow llink branch */
+            &(*rootp)->rlink;        /* follow rlink branch */
     if (*rootp == NULL)
       return NULL;                   /* key not found */
   }
   r = (*rootp)->rlink;               /* D1: */
   if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
-  {
     q = r;
-  }
-  else if (r != NULL)
-  {       /* Right link is NULL? */
-    if (r->llink == NULL)
-    {     /* D2: Find successor */
+  else if (r != NULL)                /* Right link is NULL? */
+  {
+    if (r->llink == NULL)            /* D2: Find successor */
+    {
       r->llink = q;
       q = r;
     }
-    else
-    {         /* D3: Find NULL link */
+    else                    /* D3: Find NULL link */
+    {
       for (q = r->llink; q->llink != NULL; q = r->llink)
         r = q;
       r->llink = q->rlink;
@@ -141,8 +127,8 @@ tdelete (const void *__restrict vkey,
       q->rlink = (*rootp)->rlink;
     }
   }
-  free (*rootp);    /* D4: Free node */
-  *rootp = q;       /* link parent to new node */
+  free (*rootp);            /* D4: Free node */
+  *rootp = q;               /* link parent to new node */
   return p;
 }
 

+ 11 - 20
src/microhttpd/tsearch.h

@@ -3,36 +3,27 @@
  * Public domain.
  *
  *	$NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $
- * $FreeBSD: release/9.0.0/include/search.h 105250 2002-10-16 14:29:23Z robert $
  */
 
 #ifndef _TSEARCH_H_
 #define _TSEARCH_H_
 
-#if defined(__cplusplus)
-extern "C" {
+#ifdef __cplusplus
+extern "C"
+{
 #endif /* __cplusplus */
 
+void    *tdelete (const void *, void **,
+                  int (*)(const void *, const void *));
 
-void  *
-  tdelete (const void *__restrict,
-           void **__restrict,
-           int (*)(const void *, const void *));
+void    *tfind (const void *, void *const *,
+                int (*)(const void *, const void *));
 
+void    *tsearch (const void *, void **,
+                  int (*)(const void *, const void *));
 
-void  *
-  tfind (const void *,
-         void *const *,
-         int (*)(const void *, const void *));
-
-
-void  *
-  tsearch (const void *,
-           void **,
-           int (*)(const void *, const void *));
-
-#if defined(__cplusplus)
-};
+#ifdef __cplusplus
+}
 #endif /* __cplusplus */
 
 #endif /* !_TSEARCH_H_ */

+ 1 - 34
w32/VS-Any-Version/hellobrowser.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\hellobrowser-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <VCProjectVersion>16.0</VCProjectVersion>

+ 1 - 34
w32/VS-Any-Version/largepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\largepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{77A27E6D-9A39-40B8-961B-40E63DB7FA65}</ProjectGuid>

+ 144 - 72
w32/VS-Any-Version/libmicrohttpd.sln

@@ -21,80 +21,152 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "largepost", "largepost.vcxp
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug-dll|Win32 = Debug-dll|Win32
-		Debug-dll|x64 = Debug-dll|x64
-		Debug-static|Win32 = Debug-static|Win32
-		Debug-static|x64 = Debug-static|x64
-		Release-dll|Win32 = Release-dll|Win32
-		Release-dll|x64 = Release-dll|x64
-		Release-static|Win32 = Release-static|Win32
-		Release-static|x64 = Release-static|x64
+		Debug-dll|2-Win32 = Debug-dll|2-Win32
+		Debug-dll|1-x64 = Debug-dll|1-x64
+		Debug-dll|4-ARM = Debug-dll|4-ARM
+		Debug-dll|3-ARM64 = Debug-dll|3-ARM64
+		Debug-static|2-Win32 = Debug-static|2-Win32
+		Debug-static|1-x64 = Debug-static|1-x64
+		Debug-static|4-ARM = Debug-static|4-ARM
+		Debug-static|3-ARM64 = Debug-static|3-ARM64
+		Release-dll|2-Win32 = Release-dll|2-Win32
+		Release-dll|1-x64 = Release-dll|1-x64
+		Release-dll|4-ARM = Release-dll|4-ARM
+		Release-dll|3-ARM64 = Release-dll|3-ARM64
+		Release-static|2-Win32 = Release-static|2-Win32
+		Release-static|1-x64 = Release-static|1-x64
+		Release-static|4-ARM = Release-static|4-ARM
+		Release-static|3-ARM64 = Release-static|3-ARM64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.Build.0 = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.Build.0 = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.Build.0 = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.ActiveCfg = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.Build.0 = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 1 - 34
w32/VS-Any-Version/libmicrohttpd.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\libmicrohttpd-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}</ProjectGuid>

+ 1 - 34
w32/VS-Any-Version/simplepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\simplepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{294D5317-E983-4682-8DB5-678EA4645E11}</ProjectGuid>

+ 1 - 34
w32/VS2013/hellobrowser.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\hellobrowser-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{310F39BD-A2D6-44FF-8344-37ADD0524CBD}</ProjectGuid>

+ 1 - 34
w32/VS2013/largepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\largepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{77A27E6D-9A39-40B8-961B-40E63DB7FA65}</ProjectGuid>

+ 281 - 145
w32/VS2013/libmicrohttpd.sln

@@ -16,158 +16,294 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simplepost", "simplepost.vc
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "largepost", "largepost.vcxproj", "{77A27E6D-9A39-40B8-961B-40E63DB7FA65}"
-    ProjectSection(ProjectDependencies) = postProject
+	77ProjectSection(ProjectDependencies) = postProject
 		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A} = {9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}
 	EndProjectSection
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug-dll|Win32 = Debug-dll|Win32
-		Debug-dll|x64 = Debug-dll|x64
-		Debug-dll-xp|Win32 = Debug-dll-xp|Win32
-		Debug-dll-xp|x64 = Debug-dll-xp|x64
-		Debug-static|Win32 = Debug-static|Win32
-		Debug-static|x64 = Debug-static|x64
-		Debug-static-xp|Win32 = Debug-static-xp|Win32
-		Debug-static-xp|x64 = Debug-static-xp|x64
-		Release-dll|Win32 = Release-dll|Win32
-		Release-dll|x64 = Release-dll|x64
-		Release-dll-xp|Win32 = Release-dll-xp|Win32
-		Release-dll-xp|x64 = Release-dll-xp|x64
-		Release-static|Win32 = Release-static|Win32
-		Release-static|x64 = Release-static|x64
-		Release-static-xp|Win32 = Release-static-xp|Win32
-		Release-static-xp|x64 = Release-static-xp|x64
+		Debug-dll|1-x64 = Debug-dll|1-x64
+		Debug-dll|2-Win32 = Debug-dll|2-Win32
+		Debug-dll|3-ARM64 = Debug-dll|3-ARM64
+		Debug-dll|4-ARM = Debug-dll|4-ARM
+		Debug-dll-xp|1-x64 = Debug-dll-xp|1-x64
+		Debug-dll-xp|2-Win32 = Debug-dll-xp|2-Win32
+		Debug-dll-xp|3-ARM64 = Debug-dll-xp|3-ARM64
+		Debug-dll-xp|4-ARM = Debug-dll-xp|4-ARM
+		Debug-static|1-x64 = Debug-static|1-x64
+		Debug-static|2-Win32 = Debug-static|2-Win32
+		Debug-static|3-ARM64 = Debug-static|3-ARM64
+		Debug-static|4-ARM = Debug-static|4-ARM
+		Debug-static-xp|1-x64 = Debug-static-xp|1-x64
+		Debug-static-xp|2-Win32 = Debug-static-xp|2-Win32
+		Debug-static-xp|3-ARM64 = Debug-static-xp|3-ARM64
+		Debug-static-xp|4-ARM = Debug-static-xp|4-ARM
+		Release-dll|1-x64 = Release-dll|1-x64
+		Release-dll|2-Win32 = Release-dll|2-Win32
+		Release-dll|3-ARM64 = Release-dll|3-ARM64
+		Release-dll|4-ARM = Release-dll|4-ARM
+		Release-dll-xp|1-x64 = Release-dll-xp|1-x64
+		Release-dll-xp|2-Win32 = Release-dll-xp|2-Win32
+		Release-dll-xp|3-ARM64 = Release-dll-xp|3-ARM64
+		Release-dll-xp|4-ARM = Release-dll-xp|4-ARM
+		Release-static|1-x64 = Release-static|1-x64
+		Release-static|2-Win32 = Release-static|2-Win32
+		Release-static|3-ARM64 = Release-static|3-ARM64
+		Release-static|4-ARM = Release-static|4-ARM
+		Release-static-xp|1-x64 = Release-static-xp|1-x64
+		Release-static-xp|2-Win32 = Release-static-xp|2-Win32
+		Release-static-xp|3-ARM64 = Release-static-xp|3-ARM64
+		Release-static-xp|4-ARM = Release-static-xp|4-ARM
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|Win32.Build.0 = Debug-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|x64.ActiveCfg = Debug-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|x64.Build.0 = Debug-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.Build.0 = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|Win32.ActiveCfg = Debug-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|Win32.Build.0 = Debug-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|x64.ActiveCfg = Debug-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|x64.Build.0 = Debug-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.Build.0 = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|Win32.ActiveCfg = Release-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|Win32.Build.0 = Release-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|x64.ActiveCfg = Release-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|x64.Build.0 = Release-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.Build.0 = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.ActiveCfg = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.Build.0 = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|Win32.ActiveCfg = Release-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|Win32.Build.0 = Release-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|x64.ActiveCfg = Release-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|x64.Build.0 = Release-static-xp|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.Build.0 = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|1-x64.Build.0 = Debug-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|3-ARM64.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|4-ARM.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|1-x64.ActiveCfg = Debug-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|1-x64.Build.0 = Debug-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|2-Win32.Build.0 = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|3-ARM64.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|4-ARM.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|1-x64.ActiveCfg = Release-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|1-x64.Build.0 = Release-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|2-Win32.Build.0 = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|3-ARM64.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|4-ARM.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|1-x64.ActiveCfg = Release-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|1-x64.Build.0 = Release-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|2-Win32.ActiveCfg = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|2-Win32.Build.0 = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|3-ARM64.ActiveCfg = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|4-ARM.ActiveCfg = Release-static-xp|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 2 - 66
w32/VS2013/libmicrohttpd.vcxproj

@@ -1,72 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll-xp|Win32">
-      <Configuration>Debug-dll-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll-xp|x64">
-      <Configuration>Debug-dll-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static-xp|Win32">
-      <Configuration>Debug-static-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static-xp|x64">
-      <Configuration>Debug-static-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll-xp|Win32">
-      <Configuration>Release-dll-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll-xp|x64">
-      <Configuration>Release-dll-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static-xp|Win32">
-      <Configuration>Release-static-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static-xp|x64">
-      <Configuration>Release-static-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
+  <Import Project="$(MhdW32Common)\project-configs-xp.vcxproj" />
   <Import Project="$(MhdW32Common)\libmicrohttpd-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}</ProjectGuid>

+ 1 - 34
w32/VS2013/simplepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\simplepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{294D5317-E983-4682-8DB5-678EA4645E11}</ProjectGuid>

+ 1 - 34
w32/VS2015/hellobrowser.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\hellobrowser-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{310F39BD-A2D6-44FF-8344-37ADD0524CBD}</ProjectGuid>

+ 1 - 34
w32/VS2015/largepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\largepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{77A27E6D-9A39-40B8-961B-40E63DB7FA65}</ProjectGuid>

+ 281 - 145
w32/VS2015/libmicrohttpd.sln

@@ -16,158 +16,294 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simplepost", "simplepost.vc
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "largepost", "largepost.vcxproj", "{77A27E6D-9A39-40B8-961B-40E63DB7FA65}"
-    ProjectSection(ProjectDependencies) = postProject
+	ProjectSection(ProjectDependencies) = postProject
 		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A} = {9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}
 	EndProjectSection
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug-dll|Win32 = Debug-dll|Win32
-		Debug-dll|x64 = Debug-dll|x64
-		Debug-dll-xp|Win32 = Debug-dll-xp|Win32
-		Debug-dll-xp|x64 = Debug-dll-xp|x64
-		Debug-static|Win32 = Debug-static|Win32
-		Debug-static|x64 = Debug-static|x64
-		Debug-static-xp|Win32 = Debug-static-xp|Win32
-		Debug-static-xp|x64 = Debug-static-xp|x64
-		Release-dll|Win32 = Release-dll|Win32
-		Release-dll|x64 = Release-dll|x64
-		Release-dll-xp|Win32 = Release-dll-xp|Win32
-		Release-dll-xp|x64 = Release-dll-xp|x64
-		Release-static|Win32 = Release-static|Win32
-		Release-static|x64 = Release-static|x64
-		Release-static-xp|Win32 = Release-static-xp|Win32
-		Release-static-xp|x64 = Release-static-xp|x64
+		Debug-dll|1-x64 = Debug-dll|1-x64
+		Debug-dll|2-Win32 = Debug-dll|2-Win32
+		Debug-dll|3-ARM64 = Debug-dll|3-ARM64
+		Debug-dll|4-ARM = Debug-dll|4-ARM
+		Debug-dll-xp|1-x64 = Debug-dll-xp|1-x64
+		Debug-dll-xp|2-Win32 = Debug-dll-xp|2-Win32
+		Debug-dll-xp|3-ARM64 = Debug-dll-xp|3-ARM64
+		Debug-dll-xp|4-ARM = Debug-dll-xp|4-ARM
+		Debug-static|1-x64 = Debug-static|1-x64
+		Debug-static|2-Win32 = Debug-static|2-Win32
+		Debug-static|3-ARM64 = Debug-static|3-ARM64
+		Debug-static|4-ARM = Debug-static|4-ARM
+		Debug-static-xp|1-x64 = Debug-static-xp|1-x64
+		Debug-static-xp|2-Win32 = Debug-static-xp|2-Win32
+		Debug-static-xp|3-ARM64 = Debug-static-xp|3-ARM64
+		Debug-static-xp|4-ARM = Debug-static-xp|4-ARM
+		Release-dll|1-x64 = Release-dll|1-x64
+		Release-dll|2-Win32 = Release-dll|2-Win32
+		Release-dll|3-ARM64 = Release-dll|3-ARM64
+		Release-dll|4-ARM = Release-dll|4-ARM
+		Release-dll-xp|1-x64 = Release-dll-xp|1-x64
+		Release-dll-xp|2-Win32 = Release-dll-xp|2-Win32
+		Release-dll-xp|3-ARM64 = Release-dll-xp|3-ARM64
+		Release-dll-xp|4-ARM = Release-dll-xp|4-ARM
+		Release-static|1-x64 = Release-static|1-x64
+		Release-static|2-Win32 = Release-static|2-Win32
+		Release-static|3-ARM64 = Release-static|3-ARM64
+		Release-static|4-ARM = Release-static|4-ARM
+		Release-static-xp|1-x64 = Release-static-xp|1-x64
+		Release-static-xp|2-Win32 = Release-static-xp|2-Win32
+		Release-static-xp|3-ARM64 = Release-static-xp|3-ARM64
+		Release-static-xp|4-ARM = Release-static-xp|4-ARM
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|Win32.Build.0 = Debug-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|x64.ActiveCfg = Debug-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|x64.Build.0 = Debug-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.Build.0 = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|Win32.ActiveCfg = Debug-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|Win32.Build.0 = Debug-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|x64.ActiveCfg = Debug-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|x64.Build.0 = Debug-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.Build.0 = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|Win32.ActiveCfg = Release-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|Win32.Build.0 = Release-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|x64.ActiveCfg = Release-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|x64.Build.0 = Release-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.Build.0 = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.ActiveCfg = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.Build.0 = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|Win32.ActiveCfg = Release-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|Win32.Build.0 = Release-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|x64.ActiveCfg = Release-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|x64.Build.0 = Release-static-xp|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.Build.0 = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|1-x64.Build.0 = Debug-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|3-ARM64.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|4-ARM.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|1-x64.ActiveCfg = Debug-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|1-x64.Build.0 = Debug-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|2-Win32.Build.0 = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|3-ARM64.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|4-ARM.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|1-x64.ActiveCfg = Release-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|1-x64.Build.0 = Release-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|2-Win32.Build.0 = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|3-ARM64.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|4-ARM.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|1-x64.ActiveCfg = Release-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|1-x64.Build.0 = Release-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|2-Win32.ActiveCfg = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|2-Win32.Build.0 = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|3-ARM64.ActiveCfg = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|4-ARM.ActiveCfg = Release-static-xp|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 2 - 66
w32/VS2015/libmicrohttpd.vcxproj

@@ -1,72 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll-xp|Win32">
-      <Configuration>Debug-dll-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll-xp|x64">
-      <Configuration>Debug-dll-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static-xp|Win32">
-      <Configuration>Debug-static-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static-xp|x64">
-      <Configuration>Debug-static-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll-xp|Win32">
-      <Configuration>Release-dll-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll-xp|x64">
-      <Configuration>Release-dll-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static-xp|Win32">
-      <Configuration>Release-static-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static-xp|x64">
-      <Configuration>Release-static-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
+  <Import Project="$(MhdW32Common)\project-configs-xp.vcxproj" />
   <Import Project="$(MhdW32Common)\libmicrohttpd-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}</ProjectGuid>

+ 1 - 34
w32/VS2015/simplepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\simplepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{294D5317-E983-4682-8DB5-678EA4645E11}</ProjectGuid>

+ 1 - 34
w32/VS2017/hellobrowser.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\hellobrowser-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{310F39BD-A2D6-44FF-8344-37ADD0524CBD}</ProjectGuid>

+ 1 - 34
w32/VS2017/largepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\largepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{77A27E6D-9A39-40B8-961B-40E63DB7FA65}</ProjectGuid>

+ 281 - 145
w32/VS2017/libmicrohttpd.sln

@@ -16,158 +16,294 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simplepost", "simplepost.vc
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "largepost", "largepost.vcxproj", "{77A27E6D-9A39-40B8-961B-40E63DB7FA65}"
-    ProjectSection(ProjectDependencies) = postProject
+	ProjectSection(ProjectDependencies) = postProject
 		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A} = {9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}
 	EndProjectSection
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug-dll|Win32 = Debug-dll|Win32
-		Debug-dll|x64 = Debug-dll|x64
-		Debug-dll-xp|Win32 = Debug-dll-xp|Win32
-		Debug-dll-xp|x64 = Debug-dll-xp|x64
-		Debug-static|Win32 = Debug-static|Win32
-		Debug-static|x64 = Debug-static|x64
-		Debug-static-xp|Win32 = Debug-static-xp|Win32
-		Debug-static-xp|x64 = Debug-static-xp|x64
-		Release-dll|Win32 = Release-dll|Win32
-		Release-dll|x64 = Release-dll|x64
-		Release-dll-xp|Win32 = Release-dll-xp|Win32
-		Release-dll-xp|x64 = Release-dll-xp|x64
-		Release-static|Win32 = Release-static|Win32
-		Release-static|x64 = Release-static|x64
-		Release-static-xp|Win32 = Release-static-xp|Win32
-		Release-static-xp|x64 = Release-static-xp|x64
+		Debug-dll|1-x64 = Debug-dll|1-x64
+		Debug-dll|2-Win32 = Debug-dll|2-Win32
+		Debug-dll|3-ARM64 = Debug-dll|3-ARM64
+		Debug-dll|4-ARM = Debug-dll|4-ARM
+		Debug-dll-xp|1-x64 = Debug-dll-xp|1-x64
+		Debug-dll-xp|2-Win32 = Debug-dll-xp|2-Win32
+		Debug-dll-xp|3-ARM64 = Debug-dll-xp|3-ARM64
+		Debug-dll-xp|4-ARM = Debug-dll-xp|4-ARM
+		Debug-static|1-x64 = Debug-static|1-x64
+		Debug-static|2-Win32 = Debug-static|2-Win32
+		Debug-static|3-ARM64 = Debug-static|3-ARM64
+		Debug-static|4-ARM = Debug-static|4-ARM
+		Debug-static-xp|1-x64 = Debug-static-xp|1-x64
+		Debug-static-xp|2-Win32 = Debug-static-xp|2-Win32
+		Debug-static-xp|3-ARM64 = Debug-static-xp|3-ARM64
+		Debug-static-xp|4-ARM = Debug-static-xp|4-ARM
+		Release-dll|1-x64 = Release-dll|1-x64
+		Release-dll|2-Win32 = Release-dll|2-Win32
+		Release-dll|3-ARM64 = Release-dll|3-ARM64
+		Release-dll|4-ARM = Release-dll|4-ARM
+		Release-dll-xp|1-x64 = Release-dll-xp|1-x64
+		Release-dll-xp|2-Win32 = Release-dll-xp|2-Win32
+		Release-dll-xp|3-ARM64 = Release-dll-xp|3-ARM64
+		Release-dll-xp|4-ARM = Release-dll-xp|4-ARM
+		Release-static|1-x64 = Release-static|1-x64
+		Release-static|2-Win32 = Release-static|2-Win32
+		Release-static|3-ARM64 = Release-static|3-ARM64
+		Release-static|4-ARM = Release-static|4-ARM
+		Release-static-xp|1-x64 = Release-static-xp|1-x64
+		Release-static-xp|2-Win32 = Release-static-xp|2-Win32
+		Release-static-xp|3-ARM64 = Release-static-xp|3-ARM64
+		Release-static-xp|4-ARM = Release-static-xp|4-ARM
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|Win32.Build.0 = Debug-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|x64.ActiveCfg = Debug-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|x64.Build.0 = Debug-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.Build.0 = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|Win32.ActiveCfg = Debug-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|Win32.Build.0 = Debug-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|x64.ActiveCfg = Debug-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|x64.Build.0 = Debug-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.Build.0 = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|Win32.ActiveCfg = Release-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|Win32.Build.0 = Release-dll-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|x64.ActiveCfg = Release-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|x64.Build.0 = Release-dll-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.Build.0 = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.ActiveCfg = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.Build.0 = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|Win32.ActiveCfg = Release-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|Win32.Build.0 = Release-static-xp|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|x64.ActiveCfg = Release-static-xp|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|x64.Build.0 = Release-static-xp|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.Build.0 = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|1-x64.Build.0 = Debug-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|3-ARM64.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll-xp|4-ARM.ActiveCfg = Debug-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|1-x64.ActiveCfg = Debug-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|1-x64.Build.0 = Debug-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|2-Win32.Build.0 = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|3-ARM64.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static-xp|4-ARM.ActiveCfg = Debug-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|1-x64.ActiveCfg = Release-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|1-x64.Build.0 = Release-dll-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|2-Win32.Build.0 = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|3-ARM64.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll-xp|4-ARM.ActiveCfg = Release-dll-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|1-x64.ActiveCfg = Release-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|1-x64.Build.0 = Release-static-xp|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|2-Win32.ActiveCfg = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|2-Win32.Build.0 = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|3-ARM64.ActiveCfg = Release-static-xp|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static-xp|4-ARM.ActiveCfg = Release-static-xp|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll-xp|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|3-ARM64.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|3-ARM64.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static-xp|4-ARM.Build.0 = Release-static|ARM
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 2 - 66
w32/VS2017/libmicrohttpd.vcxproj

@@ -1,72 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll-xp|Win32">
-      <Configuration>Debug-dll-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll-xp|x64">
-      <Configuration>Debug-dll-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static-xp|Win32">
-      <Configuration>Debug-static-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static-xp|x64">
-      <Configuration>Debug-static-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll-xp|Win32">
-      <Configuration>Release-dll-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll-xp|x64">
-      <Configuration>Release-dll-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static-xp|Win32">
-      <Configuration>Release-static-xp</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static-xp|x64">
-      <Configuration>Release-static-xp</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
+  <Import Project="$(MhdW32Common)\project-configs-xp.vcxproj" />
   <Import Project="$(MhdW32Common)\libmicrohttpd-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}</ProjectGuid>

+ 1 - 34
w32/VS2017/simplepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\simplepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{294D5317-E983-4682-8DB5-678EA4645E11}</ProjectGuid>

+ 1 - 34
w32/VS2019/hellobrowser.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\hellobrowser-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <VCProjectVersion>16.0</VCProjectVersion>

+ 1 - 34
w32/VS2019/largepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\largepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{77A27E6D-9A39-40B8-961B-40E63DB7FA65}</ProjectGuid>

+ 144 - 72
w32/VS2019/libmicrohttpd.sln

@@ -22,80 +22,152 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "largepost", "largepost.vcxp
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug-dll|Win32 = Debug-dll|Win32
-		Debug-dll|x64 = Debug-dll|x64
-		Debug-static|Win32 = Debug-static|Win32
-		Debug-static|x64 = Debug-static|x64
-		Release-dll|Win32 = Release-dll|Win32
-		Release-dll|x64 = Release-dll|x64
-		Release-static|Win32 = Release-static|Win32
-		Release-static|x64 = Release-static|x64
+		Debug-dll|2-Win32 = Debug-dll|2-Win32
+		Debug-dll|1-x64 = Debug-dll|1-x64
+		Debug-dll|4-ARM = Debug-dll|4-ARM
+		Debug-dll|3-ARM64 = Debug-dll|3-ARM64
+		Debug-static|2-Win32 = Debug-static|2-Win32
+		Debug-static|1-x64 = Debug-static|1-x64
+		Debug-static|4-ARM = Debug-static|4-ARM
+		Debug-static|3-ARM64 = Debug-static|3-ARM64
+		Release-dll|2-Win32 = Release-dll|2-Win32
+		Release-dll|1-x64 = Release-dll|1-x64
+		Release-dll|4-ARM = Release-dll|4-ARM
+		Release-dll|3-ARM64 = Release-dll|3-ARM64
+		Release-static|2-Win32 = Release-static|2-Win32
+		Release-static|1-x64 = Release-static|1-x64
+		Release-static|4-ARM = Release-static|4-ARM
+		Release-static|3-ARM64 = Release-static|3-ARM64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.Build.0 = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.Build.0 = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.Build.0 = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.ActiveCfg = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.Build.0 = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 1 - 34
w32/VS2019/libmicrohttpd.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\libmicrohttpd-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}</ProjectGuid>

+ 1 - 34
w32/VS2019/simplepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\simplepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{294D5317-E983-4682-8DB5-678EA4645E11}</ProjectGuid>

+ 1 - 34
w32/VS2022/hellobrowser.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\hellobrowser-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <VCProjectVersion>16.0</VCProjectVersion>

+ 1 - 34
w32/VS2022/largepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\largepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{77A27E6D-9A39-40B8-961B-40E63DB7FA65}</ProjectGuid>

+ 144 - 72
w32/VS2022/libmicrohttpd.sln

@@ -23,80 +23,152 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "largepost", "largepost.vcxp
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug-dll|Win32 = Debug-dll|Win32
-		Debug-dll|x64 = Debug-dll|x64
-		Debug-static|Win32 = Debug-static|Win32
-		Debug-static|x64 = Debug-static|x64
-		Release-dll|Win32 = Release-dll|Win32
-		Release-dll|x64 = Release-dll|x64
-		Release-static|Win32 = Release-static|Win32
-		Release-static|x64 = Release-static|x64
+		Debug-dll|2-Win32 = Debug-dll|2-Win32
+		Debug-dll|1-x64 = Debug-dll|1-x64
+		Debug-dll|4-ARM = Debug-dll|4-ARM
+		Debug-dll|3-ARM64 = Debug-dll|3-ARM64
+		Debug-static|2-Win32 = Debug-static|2-Win32
+		Debug-static|1-x64 = Debug-static|1-x64
+		Debug-static|4-ARM = Debug-static|4-ARM
+		Debug-static|3-ARM64 = Debug-static|3-ARM64
+		Release-dll|2-Win32 = Release-dll|2-Win32
+		Release-dll|1-x64 = Release-dll|1-x64
+		Release-dll|4-ARM = Release-dll|4-ARM
+		Release-dll|3-ARM64 = Release-dll|3-ARM64
+		Release-static|2-Win32 = Release-static|2-Win32
+		Release-static|1-x64 = Release-static|1-x64
+		Release-static|4-ARM = Release-static|4-ARM
+		Release-static|3-ARM64 = Release-static|3-ARM64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|x64.Build.0 = Debug-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|x64.Build.0 = Release-dll|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|Win32.Build.0 = Release-static|Win32
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.ActiveCfg = Release-static|x64
-		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|x64.Build.0 = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|x64.Build.0 = Debug-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|x64.Build.0 = Release-dll|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|Win32.Build.0 = Release-static|Win32
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.ActiveCfg = Release-static|x64
-		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|x64.Build.0 = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|x64.Build.0 = Debug-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|x64.Build.0 = Release-dll|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|Win32.Build.0 = Release-static|Win32
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.ActiveCfg = Release-static|x64
-		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|x64.Build.0 = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|Win32.Build.0 = Debug-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.ActiveCfg = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|x64.Build.0 = Debug-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.ActiveCfg = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|Win32.Build.0 = Debug-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.ActiveCfg = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|x64.Build.0 = Debug-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.ActiveCfg = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|Win32.Build.0 = Release-dll|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.ActiveCfg = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|x64.Build.0 = Release-dll|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.ActiveCfg = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|Win32.Build.0 = Release-static|Win32
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.ActiveCfg = Release-static|x64
-		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|1-x64.Build.0 = Release-static|x64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|1-x64.Build.0 = Release-static|x64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{310F39BD-A2D6-44FF-8344-37ADD0524CBD}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|1-x64.Build.0 = Release-static|x64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{294D5317-E983-4682-8DB5-678EA4645E11}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.ActiveCfg = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|2-Win32.Build.0 = Debug-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.ActiveCfg = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|1-x64.Build.0 = Debug-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.ActiveCfg = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|4-ARM.Build.0 = Debug-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.ActiveCfg = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-dll|3-ARM64.Build.0 = Debug-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.ActiveCfg = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|2-Win32.Build.0 = Debug-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.ActiveCfg = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.ActiveCfg = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|4-ARM.Build.0 = Debug-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.ActiveCfg = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|3-ARM64.Build.0 = Debug-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Debug-static|1-x64.Build.0 = Debug-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.ActiveCfg = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|2-Win32.Build.0 = Release-dll|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.ActiveCfg = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|1-x64.Build.0 = Release-dll|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.ActiveCfg = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|4-ARM.Build.0 = Release-dll|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.ActiveCfg = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-dll|3-ARM64.Build.0 = Release-dll|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.ActiveCfg = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|2-Win32.Build.0 = Release-static|Win32
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.ActiveCfg = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|1-x64.Build.0 = Release-static|x64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.ActiveCfg = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|4-ARM.Build.0 = Release-static|ARM
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.ActiveCfg = Release-static|ARM64
+		{77A27E6D-9A39-40B8-961B-40E63DB7FA65}.Release-static|3-ARM64.Build.0 = Release-static|ARM64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 1 - 34
w32/VS2022/libmicrohttpd.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\libmicrohttpd-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{9CFB0342-A9E7-483E-BEE5-A1DE22584C5A}</ProjectGuid>

+ 1 - 34
w32/VS2022/simplepost.vcxproj

@@ -1,40 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(SolutionDir)..\common\vs_dirs.props" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug-dll|Win32">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-dll|x64">
-      <Configuration>Debug-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|Win32">
-      <Configuration>Debug-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug-static|x64">
-      <Configuration>Debug-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|Win32">
-      <Configuration>Release-dll</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-dll|x64">
-      <Configuration>Release-dll</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|Win32">
-      <Configuration>Release-static</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release-static|x64">
-      <Configuration>Release-static</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
+  <Import Project="$(MhdW32Common)\project-configs.vcxproj" />
   <Import Project="$(MhdW32Common)\simplepost-files.vcxproj" />
   <PropertyGroup Label="Globals">
     <ProjectGuid>{294D5317-E983-4682-8DB5-678EA4645E11}</ProjectGuid>

+ 26 - 11
w32/common/common-build-settings.vcxproj

@@ -1,19 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Label="UserMacros">
-    <!-- WinXP = 0; Vista = 1; Win7 = 2; Win8 = 3...
-         Only 0 and 1 are used currently -->
-    <TargetOSLevel Condition="$(PlatformToolset.EndsWith('_xp'))">0</TargetOSLevel>
-    <TargetOSLevel Condition="! $(PlatformToolset.EndsWith('_xp'))">1</TargetOSLevel>
+    <!-- Target minimum OS version: WinXP = 0; Vista = 1; Win7 = 2; Win8 = 3...
+         Only 0, 1 and 3 are used currently -->
+    <TargetOSLevel Condition="$(Platform.StartsWith('ARM'))">3</TargetOSLevel>
+    <TargetOSLevel Condition="! $(Platform.StartsWith('ARM')) And $(PlatformToolset.EndsWith('_xp'))">0</TargetOSLevel>
+    <TargetOSLevel Condition="! $(Platform.StartsWith('ARM')) And ! $(PlatformToolset.EndsWith('_xp'))">1</TargetOSLevel>
+    <MhdNumBits Condition="$(Platform.EndsWith('64'))">64</MhdNumBits>
+    <MhdNumBits Condition="! $(Platform.EndsWith('64'))">32</MhdNumBits>
   </PropertyGroup>
   <PropertyGroup>
     <IncludePath>$(SolutionDir);$(MhdW32Common);$(MhdSrc)include;$(IncludePath)</IncludePath>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Platform)'=='Win32'">
-    <IntDir>$(SolutionDir)$(ProjectName)\$(Configuration)\</IntDir>
-    <OutDir>$(SolutionDir)Output\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Platform)'=='x64'">
+  <PropertyGroup>
     <IntDir>$(SolutionDir)$(ProjectName)\$(Configuration)\$(Platform)\</IntDir>
     <OutDir>$(SolutionDir)Output\$(Platform)\</OutDir>
   </PropertyGroup>
@@ -29,7 +28,7 @@
       <WarningLevel Condition="'%(ClCompile.ExternalWarningLevel)' != ''">EnableAllWarnings</WarningLevel>
       <WarningLevel Condition="'%(ClCompile.ExternalWarningLevel)' == ''">Level4</WarningLevel>
       <ExternalWarningLevel>Level3</ExternalWarningLevel>
-      <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <DisableSpecificWarnings>4996;4820;4127;5045</DisableSpecificWarnings>
       <TreatSpecificWarningsAsErrors>4013</TreatSpecificWarningsAsErrors>
       <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
@@ -40,7 +39,23 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(TargetOSLevel)'&gt;'0'">
+  <ItemDefinitionGroup Condition="'$(MhdNumBits)' == '32'">
+    <ClCompile>
+      <PreprocessorDefinitions>WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(TargetOSLevel)'&gt;='3'">
+    <ClCompile>
+      <PreprocessorDefinitions>_WIN32_WINNT=0x0602;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <MinimumRequiredVersion>6.02</MinimumRequiredVersion>
+    </Link>
+    <Lib>
+      <MinimumRequiredVersion>6.02</MinimumRequiredVersion>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(TargetOSLevel)'&gt;'0' And '$(TargetOSLevel)'&lt;'3'">
     <ClCompile>
       <PreprocessorDefinitions>_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>

+ 1 - 0
w32/common/libmicrohttpd-build-settings.vcxproj

@@ -14,6 +14,7 @@
   <ItemDefinitionGroup>
     <ClCompile>
       <PreprocessorDefinitions>BUILDING_MHD_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DisableSpecificWarnings>4746;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     </ClCompile>
     <Link>
       <Subsystem>WINDOWS</Subsystem>

+ 37 - 0
w32/common/project-configs-xp.vcxproj

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug-dll-xp|Win32">
+      <Configuration>Debug-dll-xp</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-dll-xp|x64">
+      <Configuration>Debug-dll-xp</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-static-xp|Win32">
+      <Configuration>Debug-static-xp</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-static-xp|x64">
+      <Configuration>Debug-static-xp</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-dll-xp|Win32">
+      <Configuration>Release-dll-xp</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-dll-xp|x64">
+      <Configuration>Release-dll-xp</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-static-xp|Win32">
+      <Configuration>Release-static-xp</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-static-xp|x64">
+      <Configuration>Release-static-xp</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+</Project>

+ 69 - 0
w32/common/project-configs.vcxproj

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug-dll|Win32">
+      <Configuration>Debug-dll</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-dll|x64">
+      <Configuration>Debug-dll</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-dll|ARM">
+      <Configuration>Debug-dll</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-dll|ARM64">
+      <Configuration>Debug-dll</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-static|Win32">
+      <Configuration>Debug-static</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-static|x64">
+      <Configuration>Debug-static</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-static|ARM">
+      <Configuration>Debug-static</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug-static|ARM64">
+      <Configuration>Debug-static</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-dll|Win32">
+      <Configuration>Release-dll</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-dll|x64">
+      <Configuration>Release-dll</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-dll|ARM">
+      <Configuration>Release-dll</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-dll|ARM64">
+      <Configuration>Release-dll</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-static|Win32">
+      <Configuration>Release-static</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-static|x64">
+      <Configuration>Release-static</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-static|ARM">
+      <Configuration>Release-static</Configuration>
+      <Platform>ARM</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release-static|ARM64">
+      <Configuration>Release-static</Configuration>
+      <Platform>ARM64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+</Project>

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است