RepositoryExternal.mk                                  |    4 
 bin/oss-fuzz-setup.sh                                  |    2 
 configure.ac                                           |    4 
 cui/source/dialogs/AdditionsDialog.cxx                 |   62 
 download.lst                                           |    8 
 external/liborcus/ExternalPackage_liborcus.mk          |    8 
 external/liborcus/ExternalProject_liborcus.mk          |    4 
 external/liborcus/Library_orcus-parser.mk              |    1 
 external/liborcus/UnpackedTarball_liborcus.mk          |    9 
 external/liborcus/allow-utf-8-in-xml-names.patch       |  301 ----
 external/liborcus/boost-filesystem.patch.1             |   41 
 external/liborcus/inc/pch/precompiled_orcus-parser.hxx |    1 
 external/liborcus/inc/pch/precompiled_orcus.hxx        |    1 
 external/liborcus/include.patch.0                      |   30 
 external/liborcus/remove-unused-parameters.patch.1     | 1209 +++++++++++++++++
 external/liborcus/std-get-busted.patch.1               |  418 +++++
 external/liborcus/unused-variables.patch.1             |   24 
 external/mdds/UnpackedTarball_mdds.mk                  |    6 
 external/mdds/Wunused-but-set-variable.patch           |   46 
 external/mdds/remove-more-unused-parameters.patch.1    |   42 
 external/mdds/remove-unused-parameters.patch.1         |   93 +
 sc/inc/mtvelements.hxx                                 |   22 
 sc/source/filter/inc/orcusinterface.hxx                |   50 
 sc/source/filter/orcus/interface.cxx                   |   97 -
 sc/source/filter/orcus/orcusfiltersimpl.cxx            |    8 
 sc/source/filter/orcus/xmlcontext.cxx                  |   10 
 sfx2/source/control/emojiview.cxx                      |   11 
 solenv/flatpak-manifest.in                             |   12 
 28 files changed, 1973 insertions(+), 551 deletions(-)

New commits:
commit eb07a0e76fe240a184348d96a6cebf7c0a229ac0
Author:     Kohei Yoshida <ko...@libreoffice.org>
AuthorDate: Mon Nov 1 14:01:22 2021 -0400
Commit:     Kohei Yoshida <ko...@libreoffice.org>
CommitDate: Wed Nov 3 21:17:18 2021 +0100

    Upgrade mdds and liborcus to 2.0.0 and 0.17.0, respectively.
    
    Change-Id: I9e856fc2d61f1789a6f1702514837860539a0f49
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124573
    Tested-by: Jenkins
    Tested-by: René Engelhard <r...@debian.org>
    Reviewed-by: Kohei Yoshida <ko...@libreoffice.org>

diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index c28b049caef8..a2a7212aa837 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -3329,7 +3329,7 @@ $(call gb_LinkTarget_set_include,$(1),\
 )
 
 $(call gb_LinkTarget_add_libs,$(1),\
-       -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs 
-lorcus-0.16 \
+       -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs 
-lorcus-0.17 \
 )
 
 $(if $(SYSTEM_BOOST), \
@@ -3348,7 +3348,7 @@ $(call gb_LinkTarget_set_include,$(1),\
 )
 
 $(call gb_LinkTarget_add_libs,$(1),\
-       -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs 
-lorcus-parser-0.16 \
+       -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs 
-lorcus-parser-0.17 \
 )
 
 endef
diff --git a/bin/oss-fuzz-setup.sh b/bin/oss-fuzz-setup.sh
index 22c9ef2b7e49..c72f63d4e1e0 100755
--- a/bin/oss-fuzz-setup.sh
+++ b/bin/oss-fuzz-setup.sh
@@ -38,7 +38,7 @@ curl --no-progress-meter -S \
     -C - -O https://dev-www.libreoffice.org/src/libmspub-0.1.4.tar.xz \
     -C - -O https://dev-www.libreoffice.org/src/libmwaw-0.3.20.tar.xz \
     -C - -O https://dev-www.libreoffice.org/src/libodfgen-0.1.8.tar.xz \
-    -C - -O https://dev-www.libreoffice.org/src/liborcus-0.16.1.tar.bz2 \
+    -C - -O https://dev-www.libreoffice.org/src/liborcus-0.17.0.tar.bz2 \
     -C - -O https://dev-www.libreoffice.org/src/libpagemaker-0.0.4.tar.xz \
     -C - -O https://dev-www.libreoffice.org/src/libpng-1.6.37.tar.xz \
     -C - -O https://dev-www.libreoffice.org/src/librevenge-0.0.4.tar.bz2 \
diff --git a/configure.ac b/configure.ac
index b8b3793b6204..a2a831da535a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10299,7 +10299,7 @@ AC_SUBST(SYSTEM_BOOST)
 dnl ===================================================================
 dnl Check for system mdds
 dnl ===================================================================
-libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-1.5 >= 1.5.0], 
["-I${WORKDIR}/UnpackedTarball/mdds/include"])
+libo_CHECK_SYSTEM_MODULE([mdds], [MDDS], [mdds-2.0 >= 2.0.0], 
["-I${WORKDIR}/UnpackedTarball/mdds/include"])
 
 dnl ===================================================================
 dnl Check for system cuckoo
@@ -10643,7 +10643,7 @@ AC_SUBST(ENABLE_FUZZERS)
 dnl ===================================================================
 dnl Orcus
 dnl ===================================================================
-libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.16 >= 0.16.0])
+libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.17 >= 0.17.0])
 if test "$with_system_orcus" != "yes"; then
     if test "$SYSTEM_BOOST" = "TRUE"; then
         # ===========================================================
diff --git a/cui/source/dialogs/AdditionsDialog.cxx 
b/cui/source/dialogs/AdditionsDialog.cxx
index ac633177ef36..ec173740bc63 100644
--- a/cui/source/dialogs/AdditionsDialog.cxx
+++ b/cui/source/dialogs/AdditionsDialog.cxx
@@ -54,7 +54,6 @@
 #include <orcus/json_document_tree.hpp>
 #include <orcus/json_parser.hpp>
 #include <orcus/config.hpp>
-#include <orcus/pstring.hpp>
 
 #define PAGE_SIZE 30
 
@@ -158,62 +157,37 @@ void parseResponse(const std::string& rResponse, 
std::vector<AdditionInfo>& aAdd
         try
         {
             AdditionInfo aNewAddition = {
-                
OStringToOUString(std::string_view(arrayElement.child("id").string_value().get()),
+                OStringToOUString(arrayElement.child("id").string_value(), 
RTL_TEXTENCODING_UTF8),
+                OStringToOUString(arrayElement.child("name").string_value(), 
RTL_TEXTENCODING_UTF8),
+                OStringToOUString(arrayElement.child("author").string_value(),
                                   RTL_TEXTENCODING_UTF8),
-                
OStringToOUString(std::string_view(arrayElement.child("name").string_value().get()),
+                OStringToOUString(arrayElement.child("url").string_value(), 
RTL_TEXTENCODING_UTF8),
+                
OStringToOUString(arrayElement.child("screenshotURL").string_value(),
                                   RTL_TEXTENCODING_UTF8),
-                OStringToOUString(
-                    
std::string_view(arrayElement.child("author").string_value().get()),
-                    RTL_TEXTENCODING_UTF8),
-                
OStringToOUString(std::string_view(arrayElement.child("url").string_value().get()),
+                
OStringToOUString(arrayElement.child("extensionIntroduction").string_value(),
+                                  RTL_TEXTENCODING_UTF8),
+                
OStringToOUString(arrayElement.child("extensionDescription").string_value(),
                                   RTL_TEXTENCODING_UTF8),
                 OStringToOUString(
-                    
std::string_view(arrayElement.child("screenshotURL").string_value().get()),
+                    
arrayElement.child("releases").child(0).child("compatibility").string_value(),
                     RTL_TEXTENCODING_UTF8),
                 OStringToOUString(
-                    std::string_view(
-                        
arrayElement.child("extensionIntroduction").string_value().get()),
+                    
arrayElement.child("releases").child(0).child("releaseName").string_value(),
                     RTL_TEXTENCODING_UTF8),
                 OStringToOUString(
-                    std::string_view(
-                        
arrayElement.child("extensionDescription").string_value().get()),
+                    
arrayElement.child("releases").child(0).child("license").string_value(),
                     RTL_TEXTENCODING_UTF8),
-                
OStringToOUString(std::string_view(arrayElement.child("releases")
-                                                       .child(0)
-                                                       .child("compatibility")
-                                                       .string_value()
-                                                       .get()),
+                
OStringToOUString(arrayElement.child("commentNumber").string_value(),
                                   RTL_TEXTENCODING_UTF8),
-                
OStringToOUString(std::string_view(arrayElement.child("releases")
-                                                       .child(0)
-                                                       .child("releaseName")
-                                                       .string_value()
-                                                       .get()),
+                
OStringToOUString(arrayElement.child("commentURL").string_value(),
                                   RTL_TEXTENCODING_UTF8),
-                
OStringToOUString(std::string_view(arrayElement.child("releases")
-                                                       .child(0)
-                                                       .child("license")
-                                                       .string_value()
-                                                       .get()),
+                OStringToOUString(arrayElement.child("rating").string_value(),
+                                  RTL_TEXTENCODING_UTF8),
+                
OStringToOUString(arrayElement.child("downloadNumber").string_value(),
                                   RTL_TEXTENCODING_UTF8),
                 OStringToOUString(
-                    
std::string_view(arrayElement.child("commentNumber").string_value().get()),
-                    RTL_TEXTENCODING_UTF8),
-                OStringToOUString(
-                    
std::string_view(arrayElement.child("commentURL").string_value().get()),
-                    RTL_TEXTENCODING_UTF8),
-                OStringToOUString(
-                    
std::string_view(arrayElement.child("rating").string_value().get()),
-                    RTL_TEXTENCODING_UTF8),
-                OStringToOUString(
-                    
std::string_view(arrayElement.child("downloadNumber").string_value().get()),
-                    RTL_TEXTENCODING_UTF8),
-                
OStringToOUString(std::string_view(arrayElement.child("releases")
-                                                       .child(0)
-                                                       .child("downloadURL")
-                                                       .string_value()
-                                                       .get()),
-                                  RTL_TEXTENCODING_UTF8)
+                    
arrayElement.child("releases").child(0).child("downloadURL").string_value(),
+                    RTL_TEXTENCODING_UTF8)
             };
 
             aAdditions.push_back(aNewAddition);
diff --git a/download.lst b/download.lst
index 561d4e5f5908..fc95d14dcc95 100644
--- a/download.lst
+++ b/download.lst
@@ -178,8 +178,8 @@ export LXML_SHA256SUM := 
940caef1ec7c78e0c34b0f6b94fe42d0f2022915ffc78643d28538a
 export LXML_TARBALL := lxml-4.1.1.tgz
 export MARIADB_CONNECTOR_C_SHA256SUM := 
431434d3926f4bcce2e5c97240609983f60d7ff50df5a72083934759bb863f7b
 export MARIADB_CONNECTOR_C_TARBALL := mariadb-connector-c-3.1.8-src.tar.gz
-export MDDS_SHA256SUM := 
a66a2a8293a3abc6cd9baff7c236156e2666935cbfb69a15d64d38141638fecf
-export MDDS_TARBALL := mdds-1.7.0.tar.bz2
+export MDDS_SHA256SUM := 
5a0fb2dd88a6420e0a69ec4c7259bcd1fe8f4a80b232c150e11f3da4c68236d7
+export MDDS_TARBALL := mdds-2.0.0.tar.bz2
 export MDNSRESPONDER_SHA256SUM := 
e777b4d7dbf5eb1552cb80090ad1ede319067ab6e45e3990d68aabf6e8b3f5a0
 export MDNSRESPONDER_TARBALL := mDNSResponder-878.200.35.tar.gz
 export MSPUB_SHA256SUM := 
ef36c1a1aabb2ba3b0bedaaafe717bf4480be2ba8de6f3894be5fd3702b013ba
@@ -204,8 +204,8 @@ export OPENLDAP_SHA256SUM := 
cdd6cffdebcd95161a73305ec13fc7a78e9707b46ca9f84fb89
 export OPENLDAP_TARBALL := openldap-2.4.45.tgz
 export OPENSSL_SHA256SUM := 
0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
 export OPENSSL_TARBALL := openssl-1.1.1l.tar.gz
-export ORCUS_SHA256SUM := 
c700d1325f744104d9fca0d5a019434901e9d51a16eedfb05792f90a298587a4
-export ORCUS_TARBALL := liborcus-0.16.1.tar.bz2
+export ORCUS_SHA256SUM := 
2ef9d2b5ee374c683cf631b78356b110510ab895788a68d778e225d8c4176d1b
+export ORCUS_TARBALL := liborcus-0.17.0.tar.bz2
 export PAGEMAKER_SHA256SUM := 
66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d
 export PAGEMAKER_TARBALL := libpagemaker-0.0.4.tar.xz
 export PDFIUM_SHA256SUM := 
eb98a77eaaab9e9e8de541cfd18b9438dd3c538bd5ef163820353179727f5dc9
diff --git a/external/liborcus/ExternalPackage_liborcus.mk 
b/external/liborcus/ExternalPackage_liborcus.mk
index 747691809d2e..13d61a8fecbd 100644
--- a/external/liborcus/ExternalPackage_liborcus.mk
+++ b/external/liborcus/ExternalPackage_liborcus.mk
@@ -12,11 +12,11 @@ $(eval $(call 
gb_ExternalPackage_ExternalPackage,liborcus,liborcus))
 $(eval $(call gb_ExternalPackage_use_external_project,liborcus,liborcus))
 
 ifeq ($(OS),MACOSX)
-$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.16.0.dylib,src/liborcus/.libs/liborcus-0.16.0.dylib))
-$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.16.0.dylib,src/parser/.libs/liborcus-parser-0.16.0.dylib))
+$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.17.0.dylib,src/liborcus/.libs/liborcus-0.17.0.dylib))
+$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.17.0.dylib,src/parser/.libs/liborcus-parser-0.17.0.dylib))
 else ifeq ($(DISABLE_DYNLOADING),)
-$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.16.so.0,src/liborcus/.libs/liborcus-0.16.so.0.0.0))
-$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.16.so.0,src/parser/.libs/liborcus-parser-0.16.so.0.0.0))
+$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.17.so.0,src/liborcus/.libs/liborcus-0.17.so.0.0.0))
+$(eval $(call 
gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.17.so.0,src/parser/.libs/liborcus-parser-0.17.so.0.0.0))
 endif
 
 # vim: set noet sw=4 ts=4:
diff --git a/external/liborcus/ExternalProject_liborcus.mk 
b/external/liborcus/ExternalProject_liborcus.mk
index c7dd76ebfee5..76a2a6afb1f2 100644
--- a/external/liborcus/ExternalProject_liborcus.mk
+++ b/external/liborcus/ExternalProject_liborcus.mk
@@ -123,8 +123,8 @@ $(call gb_ExternalProject_get_state_target,liborcus,build) :
                   $(MAKE) \
                $(if $(filter MACOSX,$(OS)),\
                        && $(PERL) 
$(SRCDIR)/solenv/bin/macosx-change-install-names.pl shl OOO \
-                               
$(EXTERNAL_WORKDIR)/src/liborcus/.libs/liborcus-0.16.0.dylib \
-                               
$(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.16.0.dylib \
+                               
$(EXTERNAL_WORKDIR)/src/liborcus/.libs/liborcus-0.17.0.dylib \
+                               
$(EXTERNAL_WORKDIR)/src/parser/.libs/liborcus-parser-0.17.0.dylib \
                ) \
        )
        $(call gb_Trace_EndRange,liborcus,EXTERNAL)
diff --git a/external/liborcus/Library_orcus-parser.mk 
b/external/liborcus/Library_orcus-parser.mk
index 4e46591b98fe..f26657756273 100644
--- a/external/liborcus/Library_orcus-parser.mk
+++ b/external/liborcus/Library_orcus-parser.mk
@@ -62,6 +62,7 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,orcus-parser,\
        UnpackedTarball/liborcus/src/parser/string_pool \
        UnpackedTarball/liborcus/src/parser/tokens \
        UnpackedTarball/liborcus/src/parser/types \
+       UnpackedTarball/liborcus/src/parser/utf8 \
        UnpackedTarball/liborcus/src/parser/xml_namespace \
        UnpackedTarball/liborcus/src/parser/xml_writer \
        UnpackedTarball/liborcus/src/parser/yaml_parser_base \
diff --git a/external/liborcus/UnpackedTarball_liborcus.mk 
b/external/liborcus/UnpackedTarball_liborcus.mk
index 710d126a8c17..3d2cec42e55e 100644
--- a/external/liborcus/UnpackedTarball_liborcus.mk
+++ b/external/liborcus/UnpackedTarball_liborcus.mk
@@ -20,12 +20,11 @@ $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\
        external/liborcus/gcc9.patch.0 \
        external/liborcus/libtool.patch.0 \
        external/liborcus/fix-pch.patch.0 \
-       external/liborcus/include.patch.0 \
        external/liborcus/liborcus_newline.patch.1 \
-))
-
-$(eval $(call gb_UnpackedTarball_add_patches,liborcus,\
-       external/liborcus/allow-utf-8-in-xml-names.patch \
+       external/liborcus/remove-unused-parameters.patch.1 \
+       external/liborcus/unused-variables.patch.1 \
+       external/liborcus/boost-filesystem.patch.1 \
+       external/liborcus/std-get-busted.patch.1 \
 ))
 
 ifeq ($(OS),WNT)
diff --git a/external/liborcus/allow-utf-8-in-xml-names.patch 
b/external/liborcus/allow-utf-8-in-xml-names.patch
deleted file mode 100644
index e3430881053d..000000000000
--- a/external/liborcus/allow-utf-8-in-xml-names.patch
+++ /dev/null
@@ -1,301 +0,0 @@
-From fa9b6845ed583f5486372c6ffbc59e02a140d303 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= <l.lu...@centrum.cz>
-Date: Thu, 29 Apr 2021 19:12:20 +0200
-Subject: [PATCH] allow utf-8 in xml names (#137)
-
-https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-NameStartChar
-has a list of all allowed characters.
----
- include/orcus/sax_parser_base.hpp |   3 +
- src/orcus_test_xml.cpp            |   1 +
- src/parser/sax_parser_base.cpp    | 201 ++++++++++++++++++++++++++++--
- test/xml/non-ascii/check.txt      |   4 +
- test/xml/non-ascii/input.xml      |   4 +
- 5 files changed, 201 insertions(+), 12 deletions(-)
- create mode 100644 test/xml/non-ascii/check.txt
- create mode 100644 test/xml/non-ascii/input.xml
-
-diff --git a/include/orcus/sax_parser_base.hpp 
b/include/orcus/sax_parser_base.hpp
-index 9939e133..8394c07b 100644
---- a/include/orcus/sax_parser_base.hpp
-+++ b/include/orcus/sax_parser_base.hpp
-@@ -218,6 +218,9 @@ protected:
-     void element_name(parser_element& elem, std::ptrdiff_t begin_pos);
-     void attribute_name(pstring& attr_ns, pstring& attr_name);
-     void characters_with_encoded_char(cell_buffer& buf);
-+
-+    int is_name_char();
-+    int is_name_start_char();
- };
- 
- }}
-diff --git a/src/orcus_test_xml.cpp b/src/orcus_test_xml.cpp
-index 8a864d68..35f3dea7 100644
---- a/src/orcus_test_xml.cpp
-+++ b/src/orcus_test_xml.cpp
-@@ -77,6 +77,7 @@ const char* sax_parser_test_dirs[] = {
-     SRCDIR"/test/xml/no-decl-1/",
-     SRCDIR"/test/xml/underscore-identifier/",
-     SRCDIR"/test/xml/self-closing-root/",
-+    SRCDIR"/test/xml/non-ascii/",
- };
- 
- const char* sax_parser_parse_only_test_dirs[] = {
-diff --git a/src/parser/sax_parser_base.cpp b/src/parser/sax_parser_base.cpp
-index 97aa34ec..db51ff94 100644
---- a/src/parser/sax_parser_base.cpp
-+++ b/src/parser/sax_parser_base.cpp
-@@ -328,20 +328,182 @@ bool parser_base::value(pstring& str, bool decode)
-     return transient_stream();
- }
- 
-+// https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-NameStartChar
-+// Return length of the character in bytes, otherwise 0.
-+template< bool only_start_name >
-+static
-+int is_name_char_helper(const char* mp_char, const char* mp_end)
-+{
-+    const unsigned char first = mp_char[0];
-+    // Note that ':' technically is an allowed name character, but it is 
handled separately
-+    // e.g. in element_name(), so here pretend it isn't.
-+    if (/*first == ':' ||*/ first == '_' || (first >= 'A' && first <= 'Z') || 
(first >= 'a' && first <= 'z'))
-+        return 1;
-+    if (!only_start_name && (first == '-' || first == '.' || (first >= '0' && 
first <= '9')))
-+        return 1;
-+
-+    if (first < 0x7f) // other ascii characters are not allowed
-+        return 0;
-+    if (mp_end < mp_char + 1)
-+        return 0;
-+    const unsigned char second = mp_char[1];
-+
-+    // 0xb7 = 0xc2 0xb7 utf-8
-+    if (!only_start_name && first == 0xc2 && second == 0xb7)
-+        return 2;
-+
-+    // [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF]
-+    // 0xc0 = 0xc3 0x80 utf-8
-+    if (first < 0xc3)
-+        return 0;
-+    // xd7 = 0xc3 0x97 utf-8, 0xf7 = 0xc3 0xb7 utf-8
-+    if (first == 0xc3)
-+        return second >= 0x80 && second <= 0xff && second != 0x97 && second 
!= 0xb7 ? 2 : 0;
-+    // 0x2ff = 0xcb 0xbf utf-8, 0x300 = 0xcc 0x80 utf-8
-+    if (first >= 0xc4 && first <= 0xcb)
-+        return 2;
-+
-+    // [#x0300-#x036F]
-+    // 0x0300 = 0xcc 0x80 utf-8, 0x36f = 0xcd 0xaf utf-8
-+    if (!only_start_name && first == 0xcc)
-+        return 2;
-+    if (!only_start_name && first == 0xcd && second <= 0xaf)
-+        return 2;
-+
-+    // [#x370-#x37D] | [#x37F-#x1FFF]
-+    // 0x370 = 0xcd 0xb0 utf-8, 0x37e = 0xcd 0xbe
-+    if (first < 0xcd)
-+        return 0;
-+    if (first == 0xcd)
-+        return second >= 0xb0 && second != 0xbe ? 2 : 0;
-+    // 0x07ff = 0xdf 0xbf utf-8 (the last 2-byte utf-8)
-+    if (first <= 0xdf)
-+        return 2;
-+
-+    if (first < 0xe0)
-+        return 0;
-+    if (mp_end < mp_char + 2)
-+        return 0;
-+    const unsigned char third = mp_char[2];
-+
-+    // 0x0800 = 0xe0 0xa0 0x80 utf-8, 0x1fff = 0xe1 0xbf 0xbf utf-8, 0x2000 = 
0xe2 0x80 0x80
-+    if (first == 0xe0 || first == 0xe1)
-+        return 3;
-+
-+    // [#x200C-#x200D]
-+    // 0x200c = 0xe2 0x80 0x8c utf-8, 0x200d = 0xe2 0x80 0x8d utf-8
-+    if (first < 0xe2)
-+        return 0;
-+    if (first == 0xe2 && second == 0x80 && (third == 0x8c || third == 0x8d))
-+        return 3;
-+
-+    // [#x203F-#x2040]
-+    // 0x203f = 0xe2 0x80 0xbf utf-8, 0x2040 = 0xe2 0x81 0x80 utf-8
-+    if (!only_start_name && first == 0xe2 && second == 0x80 && third == 0xbf)
-+        return 3;
-+    if (!only_start_name && first == 0xe2 && second == 0x81 && third == 0x80)
-+        return 3;
-+
-+    // [#x2070-#x218F]
-+    // 0x2070 = 0xe2 0x81 0xb0 utf-8, 0x218f = 0xe2 0x86 0x8f utf-8
-+    if (first == 0xe2)
-+    {
-+        if (second < 0x81)
-+            return 0;
-+        if (second >= 0x81 && second < 0x86)
-+            return 3;
-+        if (second == 0x86 && third <= 0x8f)
-+            return 3;
-+    }
-+
-+    // [#x2C00-#x2FEF]
-+    // 0x2c00 = 0xe2 0xb0 0x80 utf-8, 0x2fef = 0xe2 0xbf 0xaf utf-8
-+    if (first == 0xe2)
-+    {
-+        if (second < 0xb0)
-+            return 0;
-+        if (second < 0xbf)
-+            return 3;
-+        if (second == 0xbf && third <= 0xaf)
-+            return 3;
-+    }
-+
-+    // [#x3001-#xD7FF]
-+    // 0x3001 = 0xe3 0x80 0x81 utf-8, 0xd7ff = 0xed 0x9f 0xbf utf-8, 0xd800 = 
0xed 0xa0 0x80 utf-8
-+    if (first < 0xe3)
-+        return 0;
-+    if (first < 0xed)
-+        return 3;
-+    if (first == 0xed && second <= 0x9f)
-+        return 3;
-+
-+    // [#xF900-#xFDCF]
-+    // 0xf900 = 0xef 0xa4 0x80 utf-8, 0xfdcf = 0xef 0xb7 0x8f utf-8
-+    if (first == 0xef)
-+    {
-+        if (second < 0xa4)
-+            return 0;
-+        if (second < 0xb7)
-+            return 3;
-+        if (second == 0xb7 && third <= 0x8f)
-+            return 3;
-+    }
-+
-+    // [#xFDF0-#xFFFD]
-+    // 0xfdf0 = 0xef 0xb7 0xb0 utf-8, 0xfffd = 0xef 0xbf 0xbd utf-8
-+    if (first == 0xef)
-+    {
-+        assert(second >= 0xb7);
-+        if (second == 0xb7 && third < 0xb0)
-+            return 0;
-+        if (second < 0xbe)
-+            return 3;
-+        if (second == 0xbf && third <= 0xbd)
-+            return 3;
-+    }
-+
-+    if (first < 0xf0)
-+        return 0;
-+    if (mp_end < mp_char + 3)
-+        return 0;
-+    // const unsigned char fourth = mp_char[3];
-+
-+    // [#x10000-#xEFFFF]
-+    // 0x10000 = 0xf0 0x90 0x80 0x80 utf-8, 0xeffff = 0xf3 0xaf 0xbf 0xbf 
utf-8,
-+    // 0xf0000 = 0xf3 0xb0 0x80 0x80 utf-8
-+    if (first >= 0xf0 && first < 0xf2)
-+        return 4;
-+    if (first == 0xf3 && second < 0xb0)
-+        return 4;
-+
-+    return 0;
-+}
-+
-+int parser_base::is_name_char()
-+{
-+    return is_name_char_helper<false>(mp_char, mp_end);
-+}
-+
-+int parser_base::is_name_start_char()
-+{
-+    return is_name_char_helper<true>(mp_char, mp_end);
-+}
-+
- void parser_base::name(pstring& str)
- {
-     const char* p0 = mp_char;
--    char c = cur_char();
--    if (!is_alpha(c) && c != '_')
-+    int skip = is_name_start_char();
-+    if (skip == 0)
-     {
-         ::std::ostringstream os;
--        os << "name must begin with an alphabet, but got this instead '" << c 
<< "'";
-+        os << "name must begin with an alphabet, but got this instead '" << 
cur_char() << "'";
-         throw malformed_xml_error(os.str(), offset());
-     }
-+    next(skip);
- 
- #if defined(__ORCUS_CPU_FEATURES) && defined(__SSE4_2__)
- 
--    const __m128i match = _mm_loadu_si128((const __m128i*)"azAZ09--__");
-+    const __m128i match = _mm_loadu_si128((const __m128i*)"azAZ09--__..");
-     const int mode = _SIDD_LEAST_SIGNIFICANT | _SIDD_CMP_RANGES | 
_SIDD_UBYTE_OPS | _SIDD_NEGATIVE_POLARITY;
- 
-     size_t n_total = available_size();
-@@ -351,20 +513,35 @@ void parser_base::name(pstring& str)
-         __m128i char_block = _mm_loadu_si128((const __m128i*)mp_char);
- 
-         int n = std::min<size_t>(16u, n_total);
--        int r = _mm_cmpestri(match, 10, char_block, n, mode);
-+        int r = _mm_cmpestri(match, 12, char_block, n, mode);
-         mp_char += r; // Move the current char position.
-+        n_total -= r;
- 
--        if (r < 16)
--            // No need to move to the next segment. Stop here.
--            break;
-+        if (r < 16 && n_total)
-+        {
-+            // There is a character that does not match the SSE-based 
ASCII-only check.
-+            // It may either by an ascii character that is not allowed, in 
which case stop,
-+            // or it may possibly be an allowed utf-8 character, in which 
case move over it
-+            // using the slow function.
-+            skip = is_name_char();
-+            if(skip == 0)
-+                break;
-+            next(skip);
-+            n_total -= skip;
-+        }
- 
--        // Skip 16 chars to the next segment.
--        n_total -= 16;
-     }
-+    cur_char_checked(); // check end of xml stream
- 
- #else
--    while (is_alpha(c) || is_numeric(c) || is_name_char(c))
--        c = next_char_checked();
-+    for(;;)
-+    {
-+        cur_char_checked(); // check end of xml stream
-+        skip = is_name_char();
-+        if(skip == 0)
-+            break;
-+        next(skip);
-+    }
- #endif
- 
-     str = pstring(p0, mp_char-p0);
-diff --git a/test/xml/non-ascii/check.txt b/test/xml/non-ascii/check.txt
-new file mode 100644
-index 00000000..77b7c003
---- /dev/null
-+++ b/test/xml/non-ascii/check.txt
-@@ -0,0 +1,4 @@
-+/Myšička
-+/Myšička@jméno="Žužla"
-+/Myšička/Nožičky
-+/Myšička/Nožičky"4"
-diff --git a/test/xml/non-ascii/input.xml b/test/xml/non-ascii/input.xml
-new file mode 100644
-index 00000000..c516744b
---- /dev/null
-+++ b/test/xml/non-ascii/input.xml
-@@ -0,0 +1,4 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<Myšička jméno="Žužla">
-+   <Nožičky>4</Nožičky>
-+</Myšička>
--- 
-2.26.2
-
diff --git a/external/liborcus/boost-filesystem.patch.1 
b/external/liborcus/boost-filesystem.patch.1
new file mode 100644
index 000000000000..14128b4e1c67
--- /dev/null
+++ b/external/liborcus/boost-filesystem.patch.1
@@ -0,0 +1,41 @@
+From e44737bad582fa2a05a23820e49d7930db710412 Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <kohei.yosh...@gmail.com>
+Date: Tue, 2 Nov 2021 21:33:19 -0400
+Subject: [PATCH] Try using boost::filesystem instead of std::filesystem.
+
+std::filesystem still seems unreliable.
+---
+ src/parser/stream.cpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/parser/stream.cpp b/src/parser/stream.cpp
+index 09855300..00395f59 100644
+--- a/src/parser/stream.cpp
++++ b/src/parser/stream.cpp
+@@ -17,12 +17,12 @@
+ #include <locale>
+ #include <codecvt>
+ #include <iostream>
+-#include <filesystem>
+ 
++#include <boost/filesystem.hpp>
+ #include <boost/interprocess/file_mapping.hpp>
+ #include <boost/interprocess/mapped_region.hpp>
+ 
+-namespace fs = std::filesystem;
++namespace fs = boost::filesystem;
+ namespace bip = boost::interprocess;
+ 
+ namespace orcus {
+@@ -162,7 +162,7 @@ struct file_content::impl
+     impl() : content_size(0), content(nullptr) {}
+ 
+     impl(std::string_view filepath) :
+-        content_size(fs::file_size(filepath)),
++        content_size(fs::file_size(std::string{filepath}.c_str())),
+         mapped_file(std::string{filepath}.c_str(), bip::read_only),
+         mapped_region(mapped_file, bip::read_only, 0, content_size),
+         content(nullptr)
+-- 
+2.25.1
+
diff --git a/external/liborcus/inc/pch/precompiled_orcus-parser.hxx 
b/external/liborcus/inc/pch/precompiled_orcus-parser.hxx
index 1427148445d1..a8047d5c9e0a 100644
--- a/external/liborcus/inc/pch/precompiled_orcus-parser.hxx
+++ b/external/liborcus/inc/pch/precompiled_orcus-parser.hxx
@@ -69,7 +69,6 @@
 #include <orcus/json_parser_thread.hpp>
 #include <orcus/parser_base.hpp>
 #include <orcus/parser_global.hpp>
-#include <orcus/pstring.hpp>
 #include <orcus/sax_parser_base.hpp>
 #include <orcus/sax_token_parser.hpp>
 #include <orcus/sax_token_parser_thread.hpp>
diff --git a/external/liborcus/inc/pch/precompiled_orcus.hxx 
b/external/liborcus/inc/pch/precompiled_orcus.hxx
index 9edb13aec79b..9543b44eb7c5 100644
--- a/external/liborcus/inc/pch/precompiled_orcus.hxx
+++ b/external/liborcus/inc/pch/precompiled_orcus.hxx
@@ -81,7 +81,6 @@
 #include <orcus/orcus_xml.hpp>
 #include <orcus/parser_base.hpp>
 #include <orcus/parser_global.hpp>
-#include <orcus/pstring.hpp>
 #include <orcus/sax_ns_parser.hpp>
 #include <orcus/sax_parser.hpp>
 #include <orcus/sax_parser_base.hpp>
diff --git a/external/liborcus/include.patch.0 
b/external/liborcus/include.patch.0
deleted file mode 100644
index a3275b1b13fa..000000000000
--- a/external/liborcus/include.patch.0
+++ /dev/null
@@ -1,30 +0,0 @@
---- src/liborcus/orcus_xlsx.cpp
-+++ src/liborcus/orcus_xlsx.cpp
-@@ -32,6 +32,7 @@
- 
- #include <cstdlib>
- #include <iostream>
-+#include <limits>
- #include <string>
- #include <cstring>
- #include <sstream>
---- src/liborcus/xls_xml_context.cpp
-+++ src/liborcus/xls_xml_context.cpp
-@@ -16,6 +16,7 @@
- #include <mdds/sorted_string_map.hpp>
- 
- #include <iostream>
-+#include <limits>
- 
- using namespace std;
- namespace ss = orcus::spreadsheet;
---- src/liborcus/xlsx_revision_context.cpp
-+++ src/liborcus/xlsx_revision_context.cpp
-@@ -16,6 +16,7 @@
- #include "orcus/global.hpp"
- 
- #include <iostream>
-+#include <limits>
- 
- using namespace std;
- 
diff --git a/external/liborcus/remove-unused-parameters.patch.1 
b/external/liborcus/remove-unused-parameters.patch.1
new file mode 100644
index 000000000000..251ed804acaf
--- /dev/null
+++ b/external/liborcus/remove-unused-parameters.patch.1
@@ -0,0 +1,1209 @@
+From 5bb64db5ecfd1dc3be3304092f4bdebff54deae5 Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <kohei.yosh...@gmail.com>
+Date: Tue, 2 Nov 2021 19:33:29 -0400
+Subject: [PATCH] Remove unused parameter warnings.
+
+---
+ doc_example/json_parser_1.cpp                 |  4 +-
+ ...preadsheet_doc_2_sheets_no_string_pool.cpp | 22 ++++-----
+ .../spreadsheet_doc_2_sheets_with_formula.cpp | 47 +++++++++----------
+ ...eadsheet_doc_2_sheets_with_string_pool.cpp | 40 +++++++---------
+ doc_example/xml_mapping_1.cpp                 |  2 +-
+ src/liborcus/css_document_tree.cpp            |  3 ++
+ src/liborcus/dom_tree.cpp                     |  2 +-
+ src/liborcus/gnumeric_cell_context_test.cpp   | 14 +++---
+ src/liborcus/json_document_tree.cpp           |  6 +--
+ src/liborcus/json_structure_mapper.cpp        |  2 +-
+ src/liborcus/json_structure_tree.cpp          |  4 +-
+ src/liborcus/mock_spreadsheet.cpp             | 14 +++---
+ src/liborcus/ods_dde_links_context.cpp        | 10 ++--
+ src/liborcus/opc_context.cpp                  | 16 +++----
+ src/liborcus/orcus_json.cpp                   |  4 +-
+ src/liborcus/orcus_xml_map_def.cpp            |  4 +-
+ src/liborcus/spreadsheet_interface.cpp        |  4 +-
+ src/liborcus/xls_xml_context.cpp              | 12 ++---
+ src/liborcus/xls_xml_detection_handler.cpp    |  2 +-
+ src/liborcus/xlsx_drawing_context.cpp         |  2 +-
+ src/liborcus/xlsx_sheet_context.cpp           |  2 +-
+ src/liborcus/xlsx_sheet_context_test.cpp      |  8 ++--
+ src/liborcus/xlsx_table_context.cpp           |  2 +-
+ src/liborcus/xml_structure_tree.cpp           |  6 +--
+ src/liborcus/xpath_parser_test.cpp            |  2 +-
+ src/orcus_env_dump.cpp                        |  2 +-
+ src/orcus_test_json_mapped.cpp                |  2 +-
+ src/orcus_test_xml.cpp                        |  2 +-
+ src/orcus_test_xml_mapped.cpp                 |  2 +-
+ src/parser/sax_token_parser_test.cpp          |  2 +-
+ src/parser/sax_token_parser_thread.cpp        |  2 +-
+ src/parser/utf8.cpp                           |  2 +-
+ src/parser/utf8_test.cpp                      |  2 +-
+ src/parser/xml_writer_test.cpp                |  2 +-
+ src/python/cell.cpp                           |  2 +-
+ src/python/document.cpp                       |  4 +-
+ src/python/formula_tokens.cpp                 |  2 +-
+ src/python/global.cpp                         |  2 +-
+ src/python/json.cpp                           |  4 +-
+ src/python/named_expression.cpp               |  2 +-
+ src/python/named_expressions.cpp              |  4 +-
+ src/python/sheet.cpp                          |  6 +--
+ src/python/sheet_rows.cpp                     |  2 +-
+ src/spreadsheet/factory_sheet.cpp             | 18 +++----
+ src/spreadsheet/sheet_impl.cpp                |  2 +-
+ 45 files changed, 143 insertions(+), 157 deletions(-)
+
+diff --git a/doc_example/json_parser_1.cpp b/doc_example/json_parser_1.cpp
+index 6fc6de12..832e5176 100644
+--- a/doc_example/json_parser_1.cpp
++++ b/doc_example/json_parser_1.cpp
+@@ -8,12 +8,12 @@ using namespace std;
+ class json_parser_handler : public orcus::json_handler
+ {
+ public:
+-    void object_key(const char* p, size_t len, bool transient)
++    void object_key(const char* p, size_t len, bool /*transient*/)
+     {
+         cout << "object key: " << std::string_view(p, len) << endl;
+     }
+ 
+-    void string(const char* p, size_t len, bool transient)
++    void string(const char* p, size_t len, bool /*transient*/)
+     {
+         cout << "string: " << std::string_view(p, len) << endl;
+     }
+diff --git a/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp 
b/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
+index 63ffacc3..0aa86caf 100644
+--- a/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
++++ b/doc_example/spreadsheet_doc_2_sheets_no_string_pool.cpp
+@@ -64,22 +64,17 @@ public:
+     }
+ 
+     // We don't implement these methods for now.
+-    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) 
override {}
++    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
+ 
+-    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override 
{}
++    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
+ 
+-    virtual void set_date_time(
+-        ss::row_t row, ss::col_t col,
+-        int year, int month, int day, int hour, int minute, double second) 
override {}
++    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, 
double) override {}
+ 
+-    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t 
xf_index) override {}
++    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
+ 
+-    virtual void set_format(
+-        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, 
ss::col_t col_end,
+-        std::size_t xf_index) override {}
++    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, 
std::size_t) override {}
+ 
+-    virtual void fill_down_cells(
+-        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override 
{}
++    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
+ };
+ //!code-end: my_sheet
+ 
+@@ -89,14 +84,13 @@ class my_import_factory : public ss::iface::import_factory
+     std::vector<std::unique_ptr<my_sheet>> m_sheets;
+ 
+ public:
+-    virtual ss::iface::import_sheet* append_sheet(
+-        ss::sheet_t sheet_index, std::string_view name) override
++    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, 
std::string_view) override
+     {
+         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size()));
+         return m_sheets.back().get();
+     }
+ 
+-    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
++    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
+     {
+         // TODO : implement this.
+         return nullptr;
+diff --git a/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp 
b/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
+index 1c3f3d5b..11e1932e 100644
+--- a/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
++++ b/doc_example/spreadsheet_doc_2_sheets_with_formula.cpp
+@@ -87,15 +87,15 @@ public:
+         m_formula.grammar = grammar;
+     }
+ 
+-    virtual void set_shared_formula_index(std::size_t index) override {}
++    virtual void set_shared_formula_index(std::size_t) override {}
+ 
+-    virtual void set_result_string(std::string_view value) override {}
++    virtual void set_result_string(std::string_view) override {}
+ 
+-    virtual void set_result_value(double value) override {}
++    virtual void set_result_value(double) override {}
+ 
+     virtual void set_result_empty() override {}
+ 
+-    virtual void set_result_bool(bool value) override {}
++    virtual void set_result_bool(bool) override {}
+ 
+     virtual void commit() override
+     {
+@@ -154,22 +154,17 @@ public:
+     }
+ 
+     // We don't implement these methods for now.
+-    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) 
override {}
++    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
+ 
+-    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override 
{}
++    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
+ 
+-    virtual void set_date_time(
+-        ss::row_t row, ss::col_t col,
+-        int year, int month, int day, int hour, int minute, double second) 
override {}
++    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, 
double) override {}
+ 
+-    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t 
xf_index) override {}
++    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
+ 
+-    virtual void set_format(
+-        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, 
ss::col_t col_end,
+-        std::size_t xf_index) override {}
++    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, 
std::size_t) override {}
+ 
+-    virtual void fill_down_cells(
+-        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override 
{}
++    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
+ 
+     virtual ss::iface::import_formula* get_formula() override
+     {
+@@ -208,21 +203,21 @@ public:
+     }
+ 
+     // The following methods are for formatted text segments, which we ignore 
for now.
+-    virtual void set_segment_bold(bool b) override {}
++    virtual void set_segment_bold(bool) override {}
+ 
+-    virtual void set_segment_font(std::size_t font_index) override {}
++    virtual void set_segment_font(std::size_t) override {}
+ 
+     virtual void set_segment_font_color(
+-        ss::color_elem_t alpha,
+-        ss::color_elem_t red,
+-        ss::color_elem_t green,
+-        ss::color_elem_t blue) override {}
++        ss::color_elem_t,
++        ss::color_elem_t,
++        ss::color_elem_t,
++        ss::color_elem_t) override {}
+ 
+-    virtual void set_segment_font_name(std::string_view s) override {}
++    virtual void set_segment_font_name(std::string_view) override {}
+ 
+-    virtual void set_segment_font_size(double point) override {}
++    virtual void set_segment_font_size(double) override {}
+ 
+-    virtual void set_segment_italic(bool b) override {}
++    virtual void set_segment_italic(bool) override {}
+ 
+     virtual void append_segment(std::string_view s) override
+     {
+@@ -256,14 +251,14 @@ public:
+         return &m_shared_strings;
+     }
+ 
+-    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t sheet_index, 
std::string_view name) override
++    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, 
std::string_view) override
+     {
+         // Pass the string pool to each sheet instance.
+         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size(), 
m_string_pool));
+         return m_sheets.back().get();
+     }
+ 
+-    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
++    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
+     {
+         // TODO : implement this.
+         return nullptr;
+diff --git a/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp 
b/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
+index ff69c835..0153dd08 100644
+--- a/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
++++ b/doc_example/spreadsheet_doc_2_sheets_with_string_pool.cpp
+@@ -70,22 +70,17 @@ public:
+     }
+ 
+     // We don't implement these methods for now.
+-    virtual void set_auto(ss::row_t row, ss::col_t col, std::string_view s) 
override {}
++    virtual void set_auto(ss::row_t, ss::col_t, std::string_view) override {}
+ 
+-    virtual void set_bool(ss::row_t row, ss::col_t col, bool value) override 
{}
++    virtual void set_bool(ss::row_t, ss::col_t, bool) override {}
+ 
+-    virtual void set_date_time(
+-        ss::row_t row, ss::col_t col,
+-        int year, int month, int day, int hour, int minute, double second) 
override {}
++    virtual void set_date_time(ss::row_t, ss::col_t, int, int, int, int, int, 
double) override {}
+ 
+-    virtual void set_format(ss::row_t row, ss::col_t col, std::size_t 
xf_index) override {}
++    virtual void set_format(ss::row_t, ss::col_t, std::size_t) override {}
+ 
+-    virtual void set_format(
+-        ss::row_t row_start, ss::col_t col_start, ss::row_t row_end, 
ss::col_t col_end,
+-        std::size_t xf_index) override {}
++    virtual void set_format(ss::row_t, ss::col_t, ss::row_t, ss::col_t, 
std::size_t) override {}
+ 
+-    virtual void fill_down_cells(
+-        ss::row_t src_row, ss::col_t src_col, ss::row_t range_size) override 
{}
++    virtual void fill_down_cells(ss::row_t, ss::col_t, ss::row_t) override {}
+ };
+ 
+ //!code-start: my_shared_strings
+@@ -119,21 +114,21 @@ public:
+     }
+ 
+     // The following methods are for formatted text segments, which we ignore 
for now.
+-    virtual void set_segment_bold(bool b) override {}
++    virtual void set_segment_bold(bool) override {}
+ 
+-    virtual void set_segment_font(std::size_t font_index) override {}
++    virtual void set_segment_font(std::size_t) override {}
+ 
+     virtual void set_segment_font_color(
+-        ss::color_elem_t alpha,
+-        ss::color_elem_t red,
+-        ss::color_elem_t green,
+-        ss::color_elem_t blue) override {}
++        ss::color_elem_t,
++        ss::color_elem_t,
++        ss::color_elem_t,
++        ss::color_elem_t) override {}
+ 
+-    virtual void set_segment_font_name(std::string_view s) override {}
++    virtual void set_segment_font_name(std::string_view) override {}
+ 
+-    virtual void set_segment_font_size(double point) override {}
++    virtual void set_segment_font_size(double) override {}
+ 
+-    virtual void set_segment_italic(bool b) override {}
++    virtual void set_segment_italic(bool) override {}
+ 
+     virtual void append_segment(std::string_view s) override
+     {
+@@ -169,15 +164,14 @@ public:
+         return &m_shared_strings;
+     }
+ 
+-    virtual ss::iface::import_sheet* append_sheet(
+-        ss::sheet_t sheet_index, std::string_view name) override
++    virtual ss::iface::import_sheet* append_sheet(ss::sheet_t, 
std::string_view) override
+     {
+         // Pass the string pool to each sheet instance.
+         m_sheets.push_back(std::make_unique<my_sheet>(m_sheets.size(), 
m_string_pool));
+         return m_sheets.back().get();
+     }
+ 
+-    virtual ss::iface::import_sheet* get_sheet(std::string_view name) override
++    virtual ss::iface::import_sheet* get_sheet(std::string_view) override
+     {
+         // TODO : implement this.
+         return nullptr;
+diff --git a/doc_example/xml_mapping_1.cpp b/doc_example/xml_mapping_1.cpp
+index f23d620c..33d6ff22 100644
+--- a/doc_example/xml_mapping_1.cpp
++++ b/doc_example/xml_mapping_1.cpp
+@@ -118,7 +118,7 @@ void run_xmlns_different_ns_same_alias()
+     cout << (alias_1 == alias_2 ? "same" : "different") << endl;
+ }
+ 
+-int main(int argc, char** argv)
++int main()
+ {
+     run_xmlns_example();
+     run_xmlns_stacked();
+diff --git a/src/liborcus/css_document_tree.cpp 
b/src/liborcus/css_document_tree.cpp
+index 5f84c013..46bf7e91 100644
+--- a/src/liborcus/css_document_tree.cpp
++++ b/src/liborcus/css_document_tree.cpp
+@@ -54,6 +54,9 @@ public:
+     {
+ #if ORCUS_DEBUG_CSS_DOCTREE
+         cout << "@" << string(p, n).c_str();
++#else
++        (void)p;
++        (void)n;
+ #endif
+     }
+ 
+diff --git a/src/liborcus/dom_tree.cpp b/src/liborcus/dom_tree.cpp
+index 51db6ef8..64ecf8ef 100644
+--- a/src/liborcus/dom_tree.cpp
++++ b/src/liborcus/dom_tree.cpp
+@@ -527,7 +527,7 @@ void document_tree::impl::end_element(const 
sax_ns_parser_element& elem)
+     m_elem_stack.pop_back();
+ }
+ 
+-void document_tree::impl::characters(const pstring& val, bool transient)
++void document_tree::impl::characters(const pstring& val, bool /*transient*/)
+ {
+     if (m_elem_stack.empty())
+         // No root element has been encountered.  Ignore this.
+diff --git a/src/liborcus/gnumeric_cell_context_test.cpp 
b/src/liborcus/gnumeric_cell_context_test.cpp
+index fc543096..aeec16bd 100644
+--- a/src/liborcus/gnumeric_cell_context_test.cpp
++++ b/src/liborcus/gnumeric_cell_context_test.cpp
+@@ -41,19 +41,19 @@ public:
+         assert(formula == "=arrayFormula");
+     }
+ 
+-    virtual void set_result_bool(row_t row, col_t col, bool value) override
++    virtual void set_result_bool(row_t, col_t, bool) override
+     {
+     }
+ 
+-    virtual void set_result_empty(row_t row, col_t col) override
++    virtual void set_result_empty(row_t, col_t) override
+     {
+     }
+ 
+-    virtual void set_result_string(row_t row, col_t col, std::string_view) 
override
++    virtual void set_result_string(row_t, col_t, std::string_view) override
+     {
+     }
+ 
+-    virtual void set_result_value(row_t row, col_t col, double value) override
++    virtual void set_result_value(row_t, col_t, double) override
+     {
+     }
+ 
+@@ -77,11 +77,11 @@ public:
+         assert(formula == "=formula");
+     }
+ 
+-    virtual void set_shared_formula_index(size_t index) override
++    virtual void set_shared_formula_index(size_t) override
+     {
+     }
+ 
+-    virtual void set_result_bool(bool value) override
++    virtual void set_result_bool(bool) override
+     {
+     }
+ 
+@@ -93,7 +93,7 @@ public:
+     {
+     }
+ 
+-    virtual void set_result_value(double value) override
++    virtual void set_result_value(double) override
+     {
+     }
+ 
+diff --git a/src/liborcus/json_document_tree.cpp 
b/src/liborcus/json_document_tree.cpp
+index 4eedea47..c163a364 100644
+--- a/src/liborcus/json_document_tree.cpp
++++ b/src/liborcus/json_document_tree.cpp
+@@ -1217,7 +1217,7 @@ array::array(std::initializer_list<detail::init::node> 
vs)
+ array::~array() {}
+ 
+ object::object() {}
+-object::object(object&& other) {}
++object::object(object&& /*other*/) {}
+ object::~object() {}
+ 
+ namespace {
+@@ -1388,7 +1388,7 @@ struct node::impl
+         m_value_array(std::move(array.m_vs))
+     {}
+ 
+-    impl(json::object obj) :
++    impl(json::object /*obj*/) :
+         m_type(detail::node_t::object) {}
+ };
+ 
+@@ -1634,7 +1634,7 @@ document_tree::document_tree(array vs) : 
mp_impl(std::make_unique<impl>())
+     }
+ }
+ 
+-document_tree::document_tree(object obj) : mp_impl(std::make_unique<impl>())
++document_tree::document_tree(object /*obj*/) : 
mp_impl(std::make_unique<impl>())
+ {
+     mp_impl->m_root = 
mp_impl->m_res.obj_pool.construct(detail::node_t::object);
+     mp_impl->m_root->value.object = mp_impl->m_res.obj_pool_jvo.construct();
+diff --git a/src/liborcus/json_structure_mapper.cpp 
b/src/liborcus/json_structure_mapper.cpp
+index 111d1674..09a9e97e 100644
+--- a/src/liborcus/json_structure_mapper.cpp
++++ b/src/liborcus/json_structure_mapper.cpp
+@@ -40,7 +40,7 @@ void structure_mapper::push_range()
+     m_current_range.row_groups.clear();
+ }
+ 
+-void structure_mapper::traverse(size_t pos)
++void structure_mapper::traverse(size_t /*pos*/)
+ {
+     json::structure_tree::node_properties node = m_walker.get_node();
+ 
+diff --git a/src/liborcus/json_structure_tree.cpp 
b/src/liborcus/json_structure_tree.cpp
+index 5c9d600c..3ae8ecc0 100644
+--- a/src/liborcus/json_structure_tree.cpp
++++ b/src/liborcus/json_structure_tree.cpp
+@@ -235,12 +235,12 @@ struct structure_tree::impl
+         push_value();
+     }
+ 
+-    void string(const char* p, size_t len, bool transient)
++    void string(const char* /*p*/, size_t /*len*/, bool /*transient*/)
+     {
+         push_value();
+     }
+ 
+-    void number(double val)
++    void number(double /*val*/)
+     {
+         push_value();
+     }
+diff --git a/src/liborcus/mock_spreadsheet.cpp 
b/src/liborcus/mock_spreadsheet.cpp
+index 3bde38ff..4042bdc9 100644
+--- a/src/liborcus/mock_spreadsheet.cpp
++++ b/src/liborcus/mock_spreadsheet.cpp
+@@ -211,22 +211,22 @@ import_formula::~import_formula()
+ {
+ }
+ 
+-void import_formula::set_position(row_t row, col_t col)
++void import_formula::set_position(row_t, col_t)
+ {
+     assert(false);
+ }
+ 
+-void import_formula::set_formula(formula_grammar_t grammar, std::string_view)
++void import_formula::set_formula(formula_grammar_t, std::string_view)
+ {
+     assert(false);
+ }
+ 
+-void import_formula::set_shared_formula_index(size_t index)
++void import_formula::set_shared_formula_index(size_t)
+ {
+     assert(false);
+ }
+ 
+-void import_formula::set_result_value(double value)
++void import_formula::set_result_value(double)
+ {
+     assert(false);
+ }
+@@ -236,7 +236,7 @@ void import_formula::set_result_string(std::string_view)
+     assert(false);
+ }
+ 
+-void import_formula::set_result_bool(bool value)
++void import_formula::set_result_bool(bool)
+ {
+     assert(false);
+ }
+@@ -257,7 +257,7 @@ import_sheet::~import_sheet()
+ {
+ }
+ 
+-void import_sheet::set_auto(row_t, col_t, std::string_view s)
++void import_sheet::set_auto(row_t, col_t, std::string_view)
+ {
+     assert(false);
+ }
+@@ -292,7 +292,7 @@ void import_sheet::set_format(row_t, col_t, row_t, col_t, 
size_t)
+     assert(false);
+ }
+ 
+-void import_sheet::fill_down_cells(row_t src_row, col_t src_col, row_t 
range_size)
++void import_sheet::fill_down_cells(row_t, col_t, row_t)
+ {
+     assert(false);
+ }
+diff --git a/src/liborcus/ods_dde_links_context.cpp 
b/src/liborcus/ods_dde_links_context.cpp
+index db7ab672..783b106f 100644
+--- a/src/liborcus/ods_dde_links_context.cpp
++++ b/src/liborcus/ods_dde_links_context.cpp
+@@ -14,21 +14,21 @@ 
ods_dde_links_context::ods_dde_links_context(session_context& session_cxt, const
+ 
+ ods_dde_links_context::~ods_dde_links_context() {}
+ 
+-bool ods_dde_links_context::can_handle_element(xmlns_id_t ns, xml_token_t 
name) const
++bool ods_dde_links_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t 
/*name*/) const
+ {
+     return true;
+ }
+ 
+-xml_context_base* ods_dde_links_context::create_child_context(xmlns_id_t ns, 
xml_token_t name)
++xml_context_base* ods_dde_links_context::create_child_context(xmlns_id_t 
/*ns*/, xml_token_t /*name*/)
+ {
+     return nullptr;
+ }
+ 
+-void ods_dde_links_context::end_child_context(xmlns_id_t ns, xml_token_t 
name, xml_context_base *child)
++void ods_dde_links_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t 
/*name*/, xml_context_base* /*child*/)
+ {
+ }
+ 
+-void ods_dde_links_context::start_element(xmlns_id_t ns, xml_token_t name, 
const::std::vector<xml_token_attr_t> &attrs)
++void ods_dde_links_context::start_element(xmlns_id_t ns, xml_token_t name, 
const::std::vector<xml_token_attr_t>& /*attrs*/)
+ {
+     xml_token_pair_t parent = push_stack(ns, name);
+     (void)parent;
+@@ -41,7 +41,7 @@ bool ods_dde_links_context::end_element(xmlns_id_t ns, 
xml_token_t name)
+     return pop_stack(ns, name);
+ }
+ 
+-void ods_dde_links_context::characters(const pstring &str, bool transient)
++void ods_dde_links_context::characters(const pstring& /*str*/, bool 
/*transient*/)
+ {
+ }
+ 
+diff --git a/src/liborcus/opc_context.cpp b/src/liborcus/opc_context.cpp
+index ef1a591f..d3cddabd 100644
+--- a/src/liborcus/opc_context.cpp
++++ b/src/liborcus/opc_context.cpp
+@@ -90,17 +90,17 @@ opc_content_types_context::~opc_content_types_context()
+ {
+ }
+ 
+-bool opc_content_types_context::can_handle_element(xmlns_id_t ns, xml_token_t 
name) const
++bool opc_content_types_context::can_handle_element(xmlns_id_t /*ns*/, 
xml_token_t /*name*/) const
+ {
+     return true;
+ }
+ 
+-xml_context_base* opc_content_types_context::create_child_context(xmlns_id_t 
ns, xml_token_t name)
++xml_context_base* opc_content_types_context::create_child_context(xmlns_id_t 
/*ns*/, xml_token_t /*name*/)
+ {
+     return nullptr;
+ }
+ 
+-void opc_content_types_context::end_child_context(xmlns_id_t ns, xml_token_t 
name, xml_context_base *child)
++void opc_content_types_context::end_child_context(xmlns_id_t /*ns*/, 
xml_token_t /*name*/, xml_context_base* /*child*/)
+ {
+ }
+ 
+@@ -153,7 +153,7 @@ bool opc_content_types_context::end_element(xmlns_id_t ns, 
xml_token_t name)
+     return pop_stack(ns, name);
+ }
+ 
+-void opc_content_types_context::characters(const pstring &str, bool transient)
++void opc_content_types_context::characters(const pstring& /*str*/, bool 
/*transient*/)
+ {
+ }
+ 
+@@ -256,17 +256,17 @@ opc_relations_context::~opc_relations_context()
+ {
+ }
+ 
+-bool opc_relations_context::can_handle_element(xmlns_id_t ns, xml_token_t 
name) const
++bool opc_relations_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t 
/*name*/) const
+ {
+     return true;
+ }
+ 
+-xml_context_base* opc_relations_context::create_child_context(xmlns_id_t ns, 
xml_token_t name)
++xml_context_base* opc_relations_context::create_child_context(xmlns_id_t 
/*ns*/, xml_token_t /*name*/)
+ {
+     return nullptr;
+ }
+ 
+-void opc_relations_context::end_child_context(xmlns_id_t ns, xml_token_t 
name, xml_context_base *child)
++void opc_relations_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t 
/*name*/, xml_context_base* /*child*/)
+ {
+ }
+ 
+@@ -302,7 +302,7 @@ bool opc_relations_context::end_element(xmlns_id_t ns, 
xml_token_t name)
+     return pop_stack(ns, name);
+ }
+ 
+-void opc_relations_context::characters(const pstring &str, bool transient)
++void opc_relations_context::characters(const pstring& /*str*/, bool 
/*transient*/)
+ {
+ }
+ 
+diff --git a/src/liborcus/orcus_json.cpp b/src/liborcus/orcus_json.cpp
+index 2b5967d5..69672190 100644
+--- a/src/liborcus/orcus_json.cpp
++++ b/src/liborcus/orcus_json.cpp
+@@ -137,7 +137,7 @@ public:
+         push_node(json_map_tree::input_node_type::object);
+     }
+ 
+-    void object_key(const char* p, size_t len, bool transient)
++    void object_key(const char* p, size_t len, bool /*transient*/)
+     {
+         m_walker.set_object_key(p, len);
+     }
+@@ -168,7 +168,7 @@ public:
+         pop_node(json_map_tree::input_node_type::value);
+     }
+ 
+-    void string(const char* p, size_t len, bool transient)
++    void string(const char* p, size_t len, bool /*transient*/)
+     {
+         push_node(json_map_tree::input_node_type::value);
+         commit_value(json_value(p, len));
+diff --git a/src/liborcus/orcus_xml_map_def.cpp 
b/src/liborcus/orcus_xml_map_def.cpp
+index 4c70e060..889dbcb0 100644
+--- a/src/liborcus/orcus_xml_map_def.cpp
++++ b/src/liborcus/orcus_xml_map_def.cpp
+@@ -43,9 +43,9 @@ public:
+     xml_map_sax_handler(orcus_xml& app) : m_app(app) {}
+ 
+     void doctype(const sax::doctype_declaration&) {}
+-    void start_declaration(const pstring& name) {}
++    void start_declaration(const pstring& /*name*/) {}
+ 
+-    void end_declaration(const pstring& name)
++    void end_declaration(const pstring& /*name*/)
+     {
+         m_attrs.clear();
+     }
+diff --git a/src/liborcus/spreadsheet_interface.cpp 
b/src/liborcus/spreadsheet_interface.cpp
+index 87103233..985caf45 100644
+--- a/src/liborcus/spreadsheet_interface.cpp
++++ b/src/liborcus/spreadsheet_interface.cpp
+@@ -124,13 +124,13 @@ import_reference_resolver* 
import_factory::get_reference_resolver(formula_ref_co
+ }
+ 
+ import_pivot_cache_definition* import_factory::create_pivot_cache_definition(
+-        orcus::spreadsheet::pivot_cache_id_t cache_id)
++        orcus::spreadsheet::pivot_cache_id_t /*cache_id*/)
+ {
+     return nullptr;
+ }
+ 
+ import_pivot_cache_records* import_factory::create_pivot_cache_records(
+-        orcus::spreadsheet::pivot_cache_id_t cache_id)
++        orcus::spreadsheet::pivot_cache_id_t /*cache_id*/)
+ {
+     return nullptr;
+ }
+diff --git a/src/liborcus/xls_xml_context.cpp 
b/src/liborcus/xls_xml_context.cpp
+index f5b8fe26..b2d6d398 100644
+--- a/src/liborcus/xls_xml_context.cpp
++++ b/src/liborcus/xls_xml_context.cpp
+@@ -90,17 +90,17 @@ xls_xml_data_context::xls_xml_data_context(
+ 
+ xls_xml_data_context::~xls_xml_data_context() {}
+ 
+-bool xls_xml_data_context::can_handle_element(xmlns_id_t ns, xml_token_t 
name) const
++bool xls_xml_data_context::can_handle_element(xmlns_id_t /*ns*/, xml_token_t 
/*name*/) const
+ {
+     return true;
+ }
+ 
+-xml_context_base* xls_xml_data_context::create_child_context(xmlns_id_t ns, 
xml_token_t name)
++xml_context_base* xls_xml_data_context::create_child_context(xmlns_id_t 
/*ns*/, xml_token_t /*name*/)
+ {
+     return nullptr;
+ }
+ 
+-void xls_xml_data_context::end_child_context(xmlns_id_t ns, xml_token_t name, 
xml_context_base* child)
++void xls_xml_data_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t 
/*name*/, xml_context_base* /*child*/)
+ {
+ }
+ 
+@@ -254,7 +254,7 @@ void xls_xml_data_context::reset()
+ }
+ 
+ void xls_xml_data_context::start_element_data(
+-    const xml_token_pair_t& parent, const xml_attrs_t& attrs)
++    const xml_token_pair_t& /*parent*/, const xml_attrs_t& attrs)
+ {
+     m_cell_type = ct_unknown;
+     m_cell_string.clear();
+@@ -776,7 +776,7 @@ xml_context_base* 
xls_xml_context::create_child_context(xmlns_id_t ns, xml_token
+     return nullptr;
+ }
+ 
+-void xls_xml_context::end_child_context(xmlns_id_t ns, xml_token_t name, 
xml_context_base* child)
++void xls_xml_context::end_child_context(xmlns_id_t /*ns*/, xml_token_t 
/*name*/, xml_context_base* /*child*/)
+ {
+ }
+ 
+@@ -1217,7 +1217,7 @@ void xls_xml_context::characters(const pstring& str, 
bool /*transient*/)
+     }
+ }
+ 
+-void xls_xml_context::start_element_borders(const xml_token_pair_t& parent, 
const xml_attrs_t& attrs)
++void xls_xml_context::start_element_borders(const xml_token_pair_t& parent, 
const xml_attrs_t& /*attrs*/)
+ {
+     xml_element_expected(parent, NS_xls_xml_ss, XML_Style);
+     m_current_style->borders.clear();
+diff --git a/src/liborcus/xls_xml_detection_handler.cpp 
b/src/liborcus/xls_xml_detection_handler.cpp
+index aaa1b148..2b18c8ee 100644
+--- a/src/liborcus/xls_xml_detection_handler.cpp
++++ b/src/liborcus/xls_xml_detection_handler.cpp
+@@ -36,7 +36,7 @@ public:
+         return nullptr;
+     }
+ 
+-    virtual void start_element(xmlns_id_t ns, xml_token_t name, 
const::std::vector<xml_token_attr_t>& attrs)
++    virtual void start_element(xmlns_id_t ns, xml_token_t name, 
const::std::vector<xml_token_attr_t>& /*attrs*/)
+     {
+         xml_token_pair_t parent = push_stack(ns, name);
+         if (ns == NS_xls_xml_ss)
+diff --git a/src/liborcus/xlsx_drawing_context.cpp 
b/src/liborcus/xlsx_drawing_context.cpp
+index f7dc31ab..380d7852 100644
+--- a/src/liborcus/xlsx_drawing_context.cpp
++++ b/src/liborcus/xlsx_drawing_context.cpp
+@@ -41,7 +41,7 @@ void xlsx_drawing_context::end_child_context(xmlns_id_t 
/*ns*/, xml_token_t /*na
+ {
+ }
+ 
+-void xlsx_drawing_context::start_element(xmlns_id_t ns, xml_token_t name, 
const::std::vector<xml_token_attr_t>& attrs)
++void xlsx_drawing_context::start_element(xmlns_id_t ns, xml_token_t name, 
const::std::vector<xml_token_attr_t>& /*attrs*/)
+ {
+     xml_token_pair_t parent = push_stack(ns, name);
+ 
+diff --git a/src/liborcus/xlsx_sheet_context.cpp 
b/src/liborcus/xlsx_sheet_context.cpp
+index 669f604f..50018c32 100644
+--- a/src/liborcus/xlsx_sheet_context.cpp
++++ b/src/liborcus/xlsx_sheet_context.cpp
+@@ -845,7 +845,7 @@ void xlsx_sheet_context::push_raw_cell_value()
+ }
+ 
+ void xlsx_sheet_context::push_raw_cell_result(
+-    range_formula_results& res, size_t row_offset, size_t col_offset, 
xlsx_session_data& session_data) const
++    range_formula_results& res, size_t row_offset, size_t col_offset, 
xlsx_session_data& /*session_data*/) const
+ {
+     if (m_cur_value.empty())
+         return;
+diff --git a/src/liborcus/xlsx_sheet_context_test.cpp 
b/src/liborcus/xlsx_sheet_context_test.cpp
+index 9cb0d2a5..11ec8b71 100644
+--- a/src/liborcus/xlsx_sheet_context_test.cpp
++++ b/src/liborcus/xlsx_sheet_context_test.cpp
+@@ -64,19 +64,19 @@ public:
+         assert(formula == "A1:A2");
+     }
+ 
+-    virtual void set_result_bool(row_t row, col_t col, bool value) override
++    virtual void set_result_bool(row_t, col_t, bool) override
+     {
+     }
+ 
+-    virtual void set_result_empty(row_t row, col_t col) override
++    virtual void set_result_empty(row_t, col_t) override
+     {
+     }
+ 
+-    virtual void set_result_string(row_t row, col_t col, std::string_view) 
override
++    virtual void set_result_string(row_t, col_t, std::string_view) override
+     {
+     }
+ 
+-    virtual void set_result_value(row_t row, col_t col, double value) override
++    virtual void set_result_value(row_t, col_t, double) override
+     {
+     }
+ 
+diff --git a/src/liborcus/xlsx_table_context.cpp 
b/src/liborcus/xlsx_table_context.cpp
+index e135f44d..d8c360df 100644
+--- a/src/liborcus/xlsx_table_context.cpp
++++ b/src/liborcus/xlsx_table_context.cpp
+@@ -317,7 +317,7 @@ bool xlsx_table_context::end_element(xmlns_id_t ns, 
xml_token_t name)
+     return pop_stack(ns, name);
+ }
+ 
+-void xlsx_table_context::characters(const pstring& str, bool transient)
++void xlsx_table_context::characters(const pstring& /*str*/, bool 
/*transient*/)
+ {
+ }
+ 
+diff --git a/src/liborcus/xml_structure_tree.cpp 
b/src/liborcus/xml_structure_tree.cpp
+index 9eaf3c07..5185049e 100644
+--- a/src/liborcus/xml_structure_tree.cpp
++++ b/src/liborcus/xml_structure_tree.cpp
+@@ -125,11 +125,11 @@ public:
+ 
+     void doctype(const sax::doctype_declaration&) {}
+ 
+-    void start_declaration(const pstring& name)
++    void start_declaration(const pstring& /*name*/)
+     {
+     }
+ 
+-    void end_declaration(const pstring& name)
++    void end_declaration(const pstring& /*name*/)
+     {
+         m_attrs.clear();
+     }
+@@ -185,7 +185,7 @@ public:
+         m_stack.push_back(ref);
+     }
+ 
+-    void end_element(const sax_ns_parser_element& elem)
++    void end_element(const sax_ns_parser_element& /*elem*/)
+     {
+         if (m_stack.empty())
+             throw general_error("Element stack is empty.");
+diff --git a/src/liborcus/xpath_parser_test.cpp 
b/src/liborcus/xpath_parser_test.cpp
+index 12242f62..f67c0dc6 100644
+--- a/src/liborcus/xpath_parser_test.cpp
++++ b/src/liborcus/xpath_parser_test.cpp
+@@ -64,7 +64,7 @@ void test_attributes()
+     assert(token.attribute);
+ }
+ 
+-int main(int argc, char** argv)
++int main()
+ {
+     test_elements();
+     test_attributes();
+diff --git a/src/orcus_env_dump.cpp b/src/orcus_env_dump.cpp
+index ad60927a..99f53718 100644
+--- a/src/orcus_env_dump.cpp
++++ b/src/orcus_env_dump.cpp
+@@ -13,7 +13,7 @@
+ using std::cout;
+ using std::endl;
+ 
+-int main(int argc, char** argv)
++int main()
+ {
+     cout << "CPU flags:" << endl;
+     cout << "  SSE 4.2: " << orcus::detail::cpu::has_sse42() << endl;
+diff --git a/src/orcus_test_json_mapped.cpp b/src/orcus_test_json_mapped.cpp
+index ed10a842..c504e156 100644
+--- a/src/orcus_test_json_mapped.cpp
++++ b/src/orcus_test_json_mapped.cpp
+@@ -88,7 +88,7 @@ void test_invalid_map_definition()
+     }
+ }
+ 
+-int main(int argc, char** argv)
++int main()
+ {
+     test_mapped_json_import();
+     test_invalid_map_definition();
+diff --git a/src/orcus_test_xml.cpp b/src/orcus_test_xml.cpp
+index 2a44a8ac..de5197cf 100644
+--- a/src/orcus_test_xml.cpp
++++ b/src/orcus_test_xml.cpp
+@@ -85,7 +85,7 @@ const char* sax_parser_parse_only_test_dirs[] = {
+     SRCDIR"/test/xml/parse-only/rss/"
+ };
+ 
+-void parse_file(dom::document_tree& tree, const char* filepath, string& strm)
++void parse_file(dom::document_tree& tree, const char* filepath, std::string& 
/*strm*/)
+ {
+     cout << "testing " << filepath << endl;
+     file_content content(filepath);
+diff --git a/src/orcus_test_xml_mapped.cpp b/src/orcus_test_xml_mapped.cpp
+index b90ea020..8e18cfda 100644
+--- a/src/orcus_test_xml_mapped.cpp
++++ b/src/orcus_test_xml_mapped.cpp
+@@ -66,7 +66,7 @@ void test_mapped_xml_import()
+         { SRCDIR"/test/xml-mapped/nested-repeats-4", false },
+     };
+ 
+-    auto dump_xml_structure = [](string& dump_content, string& strm, const 
char* filepath, xmlns_context& cxt)
++    auto dump_xml_structure = [](std::string& dump_content, std::string& 
/*strm*/, const char* filepath, xmlns_context& cxt)
+     {
+         file_content content(filepath);
+         dom::document_tree tree(cxt);
+diff --git a/src/parser/sax_token_parser_test.cpp 
b/src/parser/sax_token_parser_test.cpp
+index 2647444c..6ff8c932 100644
+--- a/src/parser/sax_token_parser_test.cpp
++++ b/src/parser/sax_token_parser_test.cpp
+@@ -146,7 +146,7 @@ void test_unicode_string()
+         {
+         }
+ 
+-        void characters(std::string_view val, bool transient)
++        void characters(std::string_view val, bool /*transient*/)
+         {
+             std::cout << "charachters:" << std::endl;
+             std::cout << val << std::endl;
+diff --git a/src/parser/sax_token_parser_thread.cpp 
b/src/parser/sax_token_parser_thread.cpp
+index b9166e3c..d21ae6d7 100644
+--- a/src/parser/sax_token_parser_thread.cpp
++++ b/src/parser/sax_token_parser_thread.cpp
+@@ -86,7 +86,7 @@ struct parser_thread::impl
+         m_token_buffer.abort();
+     }
+ 
+-    void declaration(const orcus::xml_declaration_t& decl)
++    void declaration(const orcus::xml_declaration_t& /*decl*/)
+     {
+     }
+ 
+diff --git a/src/parser/utf8.cpp b/src/parser/utf8.cpp
+index f3b264a7..e02d2244 100644
+--- a/src/parser/utf8.cpp
++++ b/src/parser/utf8.cpp
+@@ -231,7 +231,7 @@ bool parse_3b_second_char(uint8_t c1, uint8_t c2, uint8_t 
c3)
+ }
+ 
+ // [#x10000-#xEFFFF]:  F0 90 80 80 -> F3 AF BF BF
+-bool parse_4b_char(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4)
++bool parse_4b_char(uint8_t c1, uint8_t c2, uint8_t /*c3*/, uint8_t /*c4*/)
+ {
+     // F0 90 80 80 -> F3 AF BF BF
+     //  - F0 90 xx xx -> F0 xx xx xx
+diff --git a/src/parser/utf8_test.cpp b/src/parser/utf8_test.cpp
+index 78b7656a..88dcd3e8 100644
+--- a/src/parser/utf8_test.cpp
++++ b/src/parser/utf8_test.cpp
+@@ -159,7 +159,7 @@ void test_xml_name_char()
+     assert(res);
+ }
+ 
+-int main(int argc, char** argv)
++int main()
+ {
+     test_xml_name_start_char();
+     test_xml_name_char();
+diff --git a/src/parser/xml_writer_test.cpp b/src/parser/xml_writer_test.cpp
+index e5a22357..8687db32 100644
+--- a/src/parser/xml_writer_test.cpp
++++ b/src/parser/xml_writer_test.cpp
+@@ -28,7 +28,7 @@ void test_encoded_content()
+     {
+         std::ostringstream os_content;
+ 
+-        void characters(std::string_view val, bool transient)
++        void characters(std::string_view val, bool /*transient*/)
+         {
+             os_content << val;
+         }
+diff --git a/src/python/cell.cpp b/src/python/cell.cpp
+index 536b5c4d..16374b8f 100644
+--- a/src/python/cell.cpp
++++ b/src/python/cell.cpp
+@@ -115,7 +115,7 @@ int tp_init(pyobj_cell* self, PyObject* args, PyObject* 
kwargs)
+     return 0;
+ }
+ 
+-PyObject* cell_get_formula_tokens(PyObject* self, PyObject* args, PyObject* 
kwargs)
++PyObject* cell_get_formula_tokens(PyObject* self, PyObject* /*args*/, 
PyObject* /*kwargs*/)
+ {
+     pyobj_cell* obj = reinterpret_cast<pyobj_cell*>(self);
+     cell_data& data = *obj->data;
+diff --git a/src/python/document.cpp b/src/python/document.cpp
+index b06463bc..02a2dc49 100644
+--- a/src/python/document.cpp
++++ b/src/python/document.cpp
+@@ -69,12 +69,12 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, 
PyObject* /*kwargs*/)
+     return reinterpret_cast<PyObject*>(self);
+ }
+ 
+-int tp_init(pyobj_document* self, PyObject* /*args*/, PyObject* /*kwargs*/)
++int tp_init(pyobj_document* /*self*/, PyObject* /*args*/, PyObject* 
/*kwargs*/)
+ {
+     return 0;
+ }
+ 
+-PyObject* doc_get_named_expressions(PyObject* self, PyObject* args, PyObject* 
kwargs)
++PyObject* doc_get_named_expressions(PyObject* self, PyObject* /*args*/, 
PyObject* /*kwargs*/)
+ {
+     const ss::document& doc = *t(self)->data->m_doc;
+     const ixion::model_context& cxt = doc.get_model_context();
+diff --git a/src/python/formula_tokens.cpp b/src/python/formula_tokens.cpp
+index 569d1a7a..3eece2d4 100644
+--- a/src/python/formula_tokens.cpp
++++ b/src/python/formula_tokens.cpp
+@@ -56,7 +56,7 @@ void tp_dealloc(pyobj_formula_tokens* self)
+     Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
+ }
+ 
+-int tp_init(pyobj_formula_tokens* self, PyObject* /*args*/, PyObject* 
/*kwargs*/)
++int tp_init(pyobj_formula_tokens* /*self*/, PyObject* /*args*/, PyObject* 
/*kwargs*/)
+ {
+     return 0;
+ }
+diff --git a/src/python/global.cpp b/src/python/global.cpp
+index 7a21f960..f8623e0d 100644
+--- a/src/python/global.cpp
++++ b/src/python/global.cpp
+@@ -16,7 +16,7 @@ void set_python_exception(PyObject* type, const 
std::exception& e)
+ {
+     std::ostringstream os;
+     os << "C++ exception caught: " << e.what();
+-    PyErr_SetString(PyExc_RuntimeError, os.str().data());
++    PyErr_SetString(type, os.str().data());
+ }
+ 
+ PyObject* get_python_enum_value(const char* enum_class_name, const char* 
value_name)
+diff --git a/src/python/json.cpp b/src/python/json.cpp
+index fdeea10c..f22cf666 100644
+--- a/src/python/json.cpp
++++ b/src/python/json.cpp
+@@ -177,7 +177,7 @@ public:
+         }
+     }
+ 
+-    void object_key(const char* p, size_t len, bool transient)
++    void object_key(const char* p, size_t len, bool /*transient*/)
+     {
+         parser_stack& cur = m_stack.back();
+         cur.key = PyUnicode_FromStringAndSize(p, len);
+@@ -213,7 +213,7 @@ public:
+         push_value(Py_None);
+     }
+ 
+-    void string(const char* p, size_t len, bool transient)
++    void string(const char* p, size_t len, bool /*transient*/)
+     {
+         push_value(PyUnicode_FromStringAndSize(p, len));
+     }
+diff --git a/src/python/named_expression.cpp b/src/python/named_expression.cpp
+index 8edeeacf..1402daa0 100644
+--- a/src/python/named_expression.cpp
++++ b/src/python/named_expression.cpp
+@@ -81,7 +81,7 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, 
PyObject* /*kwargs*/)
+     return reinterpret_cast<PyObject*>(self);
+ }
+ 
+-PyObject* ne_get_formula_tokens(PyObject* self, PyObject* args, PyObject* 
kwargs)
++PyObject* ne_get_formula_tokens(PyObject* self, PyObject* /*args*/, PyObject* 
/*kwargs*/)
+ {
+     named_exp_data& data = *t(self)->data;
+     if (!data.tokens)
+diff --git a/src/python/named_expressions.cpp 
b/src/python/named_expressions.cpp
+index 235389ac..6faffee5 100644
+--- a/src/python/named_expressions.cpp
++++ b/src/python/named_expressions.cpp
+@@ -44,7 +44,7 @@ inline pyobj_named_exps* t(PyObject* self)
+     return reinterpret_cast<pyobj_named_exps*>(self);
+ }
+ 
+-PyObject* named_exps_names(PyObject* self, PyObject* args, PyObject* kwargs)
++PyObject* named_exps_names(PyObject* self, PyObject* /*args*/, PyObject* 
/*kwargs*/)
+ {
+     named_exps_data& data = *t(self)->data;
+     PyObject* s = PySet_New(nullptr);
+@@ -64,7 +64,7 @@ void tp_dealloc(pyobj_named_exps* self)
+     Py_TYPE(self)->tp_free(reinterpret_cast<PyObject*>(self));
+ }
+ 
+-int tp_init(pyobj_named_exps* self, PyObject* /*args*/, PyObject* /*kwargs*/)
++int tp_init(pyobj_named_exps* /*self*/, PyObject* /*args*/, PyObject* 
/*kwargs*/)
+ {
+     return 0;
+ }
+diff --git a/src/python/sheet.cpp b/src/python/sheet.cpp
+index 0ccc39bd..38b96241 100644
+--- a/src/python/sheet.cpp
++++ b/src/python/sheet.cpp
+@@ -85,12 +85,12 @@ PyObject* tp_new(PyTypeObject* type, PyObject* /*args*/, 
PyObject* /*kwargs*/)
+     return reinterpret_cast<PyObject*>(self);
+ }
+ 
+-int tp_init(pyobj_sheet* self, PyObject* /*args*/, PyObject* /*kwargs*/)
++int tp_init(pyobj_sheet* /*self*/, PyObject* /*args*/, PyObject* /*kwargs*/)
+ {
+     return 0;
+ }
+ 
+-PyObject* sheet_get_rows(PyObject* self, PyObject* args, PyObject* kwargs)
++PyObject* sheet_get_rows(PyObject* self, PyObject* /*args*/, PyObject* 
/*kwargs*/)
+ {
+     PyTypeObject* sr_type = get_sheet_rows_type();
+ 
+@@ -210,7 +210,7 @@ PyObject* sheet_write(PyObject* self, PyObject* args, 
PyObject* kwargs)
+     return Py_None;
+ }
+ 
+-PyObject* sheet_get_named_expressions(PyObject* self, PyObject* args, 
PyObject* kwargs)
++PyObject* sheet_get_named_expressions(PyObject* self, PyObject* /*args*/, 
PyObject* /*kwargs*/)
+ {
+     const ss::document& doc = *t(self)->data->m_doc;
+     ss::sheet_t si = t(self)->data->m_sheet->get_index();
+diff --git a/src/python/sheet_rows.cpp b/src/python/sheet_rows.cpp
+index 7fa869ea..be495894 100644
+--- a/src/python/sheet_rows.cpp
++++ b/src/python/sheet_rows.cpp
+@@ -49,7 +49,7 @@ PyObject* sheet_rows_new(PyTypeObject* type, PyObject* 
/*args*/, PyObject* /*kwa
+     return reinterpret_cast<PyObject*>(self);
+ }
+ 
+-int sheet_rows_init(pyobj_sheet_rows* self, PyObject* /*args*/, PyObject* 
/*kwargs*/)
++int sheet_rows_init(pyobj_sheet_rows* /*self*/, PyObject* /*args*/, PyObject* 
/*kwargs*/)
+ {
+     return 0;
+ }
+diff --git a/src/spreadsheet/factory_sheet.cpp 
b/src/spreadsheet/factory_sheet.cpp
+index 3e04295c..61541174 100644
+--- a/src/spreadsheet/factory_sheet.cpp
++++ b/src/spreadsheet/factory_sheet.cpp
+@@ -74,19 +74,19 @@ void import_data_table::reset()
+ {
+ }
+ 
+-void import_data_table::set_type(data_table_type_t type)
++void import_data_table::set_type(data_table_type_t /*type*/)
+ {
+ }
+ 
+-void import_data_table::set_range(const range_t& range)
++void import_data_table::set_range(const range_t& /*range*/)
+ {
+ }
+ 
+-void import_data_table::set_first_reference(std::string_view ref, bool 
deleted)
++void import_data_table::set_first_reference(std::string_view /*ref*/, bool 
/*deleted*/)
+ {
+ }
+ 
+-void import_data_table::set_second_reference(std::string_view ref, bool 
deleted)
++void import_data_table::set_second_reference(std::string_view /*ref*/, bool 
/*deleted*/)
+ {
+ }
+ 
+@@ -193,7 +193,7 @@ void import_array_formula::set_range(const range_t& range)
+     }
+ }
+ 
+-void import_array_formula::set_formula(formula_grammar_t grammar, 
std::string_view formula)
++void import_array_formula::set_formula(formula_grammar_t /*grammar*/, 
std::string_view formula)
+ {
+     const ixion::formula_name_resolver* resolver =
+         
m_doc.get_formula_name_resolver(spreadsheet::formula_ref_context_t::global);
+@@ -223,12 +223,12 @@ void import_array_formula::set_result_value(row_t row, 
col_t col, double value)
+     m_result_mtx.set(row, col, value);
+ }
+ 
+-void import_array_formula::set_result_string(row_t row, col_t col, 
std::string_view value)
++void import_array_formula::set_result_string(row_t /*row*/, col_t /*col*/, 
std::string_view /*value*/)
+ {
+     // TODO : handle this
+ }
+ 
+-void import_array_formula::set_result_empty(row_t row, col_t col)
++void import_array_formula::set_result_empty(row_t /*row*/, col_t /*col*/)
+ {
+     // TODO : handle this
+ }
+@@ -282,7 +282,7 @@ void import_formula::set_position(row_t row, col_t col)
+     m_col = col;
+ }
+ 
+-void import_formula::set_formula(formula_grammar_t grammar, std::string_view 
formula)
++void import_formula::set_formula(formula_grammar_t /*grammar*/, 
std::string_view formula)
+ {
+     if (m_row < 0 || m_col < 0)
+         return;
+@@ -331,7 +331,7 @@ void import_formula::set_result_string(std::string_view 
value)
+ }
+ 
+ void import_formula::set_result_empty() {}
+-void import_formula::set_result_bool(bool value) {}
++void import_formula::set_result_bool(bool /*value*/) {}
+ 
+ void import_formula::commit()
+ {
+diff --git a/src/spreadsheet/sheet_impl.cpp b/src/spreadsheet/sheet_impl.cpp
+index 72e521c5..c2e7ecb6 100644
+--- a/src/spreadsheet/sheet_impl.cpp
++++ b/src/spreadsheet/sheet_impl.cpp
+@@ -12,7 +12,7 @@
+ 
+ namespace orcus { namespace spreadsheet {
+ 
+-sheet_impl::sheet_impl(document& doc, sheet& sh, sheet_t sheet_index) :
++sheet_impl::sheet_impl(document& doc, sheet& /*sh*/, sheet_t sheet_index) :
+     m_doc(doc),
+     m_col_widths(0, m_doc.get_sheet_size().columns, 
get_default_column_width()),
+     m_row_heights(0, m_doc.get_sheet_size().rows, get_default_row_height()),
+-- 
+2.25.1
+
diff --git a/external/liborcus/std-get-busted.patch.1 
b/external/liborcus/std-get-busted.patch.1
new file mode 100644
index 000000000000..40b839f65f47
--- /dev/null
+++ b/external/liborcus/std-get-busted.patch.1
@@ -0,0 +1,418 @@
+From f917ed284c52ae12fb0d752c17141f355158470e Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <kohei.yosh...@gmail.com>
+Date: Tue, 2 Nov 2021 22:07:51 -0400
+Subject: [PATCH] std::get<T>(...) may be flaky with some version of clang.
+
+As workaround, use boost::variant and boost::get.
+
+c.f. 
https://stackoverflow.com/questions/52521388/stdvariantget-does-not-compile-with-apple-llvm-10-0
+---
+ include/orcus/config.hpp                    |  4 ++--
+ include/orcus/css_selector.hpp              |  5 +++--
+ include/orcus/json_parser_thread.hpp        |  4 ++--
+ include/orcus/sax_token_parser_thread.hpp   |  5 +++--
+ include/orcus/spreadsheet/pivot.hpp         |  7 ++++---
+ include/orcus/threaded_json_parser.hpp      |  8 ++++----
+ include/orcus/threaded_sax_token_parser.hpp |  8 ++++----
+ src/liborcus/css_document_tree.cpp          |  2 +-
+ src/liborcus/css_selector.cpp               | 12 ++++++------
+ src/liborcus/orcus_csv.cpp                  |  4 ++--
+ src/orcus_csv_main.cpp                      |  2 +-
+ src/orcus_test_csv.cpp                      |  8 ++++----
+ src/orcus_test_xlsx.cpp                     |  4 ++--
+ src/parser/json_parser_thread.cpp           |  8 ++++----
+ src/python/sheet_rows.cpp                   |  3 +++
+ 15 files changed, 45 insertions(+), 39 deletions(-)
+
+diff --git a/include/orcus/config.hpp b/include/orcus/config.hpp
+index 17743e6a..fe9a7d81 100644
+--- a/include/orcus/config.hpp
++++ b/include/orcus/config.hpp
+@@ -12,7 +12,7 @@
+ #include "orcus/types.hpp"
+ 
+ #include <string>
+-#include <variant>
++#include <boost/variant.hpp>
+ 
+ namespace orcus {
+ 
+@@ -37,7 +37,7 @@ struct ORCUS_DLLPUBLIC config
+     };
+ 
+     // TODO: add config for other formats as needed.
+-    using data_type = std::variant<csv_config>;
++    using data_type = boost::variant<csv_config>;
+ 
+     /**
+      * Enable or disable runtime debug output to stdout or stderr.
+diff --git a/include/orcus/css_selector.hpp b/include/orcus/css_selector.hpp
+index 1e41d544..dafeddf5 100644
+--- a/include/orcus/css_selector.hpp
++++ b/include/orcus/css_selector.hpp
+@@ -12,11 +12,12 @@
+ #include "css_types.hpp"
+ 
+ #include <ostream>
+-#include <variant>
+ #include <vector>
+ #include <unordered_set>
+ #include <unordered_map>
+ 
++#include <boost/variant.hpp>
++
+ namespace orcus {
+ 
+ struct ORCUS_DLLPUBLIC css_simple_selector_t
+@@ -73,7 +74,7 @@ struct ORCUS_DLLPUBLIC css_selector_t
+  */
+ struct ORCUS_DLLPUBLIC css_property_value_t
+ {
+-    using value_type = std::variant<std::string_view, css::rgba_color_t, 
css::hsla_color_t>;
++    using value_type = boost::variant<std::string_view, css::rgba_color_t, 
css::hsla_color_t>;
+ 
+     css::property_value_t type;
+     value_type value;
+diff --git a/include/orcus/json_parser_thread.hpp 
b/include/orcus/json_parser_thread.hpp
+index 8328ef11..565008da 100644
+--- a/include/orcus/json_parser_thread.hpp
++++ b/include/orcus/json_parser_thread.hpp
+@@ -14,7 +14,7 @@
+ #include <memory>
+ #include <vector>
+ #include <ostream>
+-#include <variant>
++#include <boost/variant.hpp>
+ 
+ namespace orcus {
+ 
+@@ -47,7 +47,7 @@ enum class parse_token_t
+ 
+ struct ORCUS_PSR_DLLPUBLIC parse_token
+ {
+-    using value_type = std::variant<std::string_view, parse_error_value_t, 
double>;
++    using value_type = boost::variant<std::string_view, parse_error_value_t, 
double>;
+ 
+     parse_token_t type;
+     value_type value;
+diff --git a/include/orcus/sax_token_parser_thread.hpp 
b/include/orcus/sax_token_parser_thread.hpp
+index b3645735..e0842013 100644
+--- a/include/orcus/sax_token_parser_thread.hpp
++++ b/include/orcus/sax_token_parser_thread.hpp
+@@ -12,10 +12,11 @@
+ #include "types.hpp"
+ 
+ #include <memory>
+-#include <variant>
+ #include <vector>
+ #include <ostream>
+ 
++#include <boost/variant.hpp>
++
+ namespace orcus {
+ 
+ class tokens;
+@@ -36,7 +37,7 @@ enum class parse_token_t
+ 
+ struct ORCUS_PSR_DLLPUBLIC parse_token
+ {
+-    using value_type = std::variant<std::string_view, parse_error_value_t, 
const xml_token_element_t*>;
++    using value_type = boost::variant<std::string_view, parse_error_value_t, 
const xml_token_element_t*>;
+ 
+     parse_token_t type;
+     value_type value;
+diff --git a/include/orcus/spreadsheet/pivot.hpp 
b/include/orcus/spreadsheet/pivot.hpp
+index dee25596..fa091160 100644
+--- a/include/orcus/spreadsheet/pivot.hpp
++++ b/include/orcus/spreadsheet/pivot.hpp
+@@ -15,9 +15,10 @@
+ #include <memory>
+ #include <vector>
+ #include <limits>
+-#include <variant>
+ #include <optional>
+ 
++#include <boost/variant.hpp>
++
+ namespace ixion {
+ 
+ struct abs_range_t;
+@@ -36,7 +37,7 @@ using pivot_cache_indices_t = std::vector<size_t>;
+ 
+ struct ORCUS_SPM_DLLPUBLIC pivot_cache_record_value_t
+ {
+-    using value_type = std::variant<bool, double, std::size_t, 
std::string_view, date_time_t>;
++    using value_type = boost::variant<bool, double, std::size_t, 
std::string_view, date_time_t>;
+ 
+     enum class record_type
+     {
+@@ -66,7 +67,7 @@ using pivot_cache_record_t = 
std::vector<pivot_cache_record_value_t>;
+ 
+ struct ORCUS_SPM_DLLPUBLIC pivot_cache_item_t
+ {
+-    using value_type = std::variant<bool, double, std::string_view, 
date_time_t, error_value_t>;
++    using value_type = boost::variant<bool, double, std::string_view, 
date_time_t, error_value_t>;
+ 
+     enum class item_type
+     {
+diff --git a/include/orcus/threaded_json_parser.hpp 
b/include/orcus/threaded_json_parser.hpp
+index 51cdaced..3bf6e591 100644
+--- a/include/orcus/threaded_json_parser.hpp
++++ b/include/orcus/threaded_json_parser.hpp
+@@ -151,23 +151,23 @@ void 
threaded_json_parser<_Handler>::process_tokens(json::parse_tokens_t& tokens
+                     m_handler.null();
+                     break;
+                 case json::parse_token_t::number:
+-                    m_handler.number(std::get<double>(t.value));
++                    m_handler.number(boost::get<double>(t.value));
+                     break;
+                 case json::parse_token_t::object_key:
+                 {
+-                    auto s = std::get<std::string_view>(t.value);
++                    auto s = boost::get<std::string_view>(t.value);
+                     m_handler.object_key(s.data(), s.size(), false);
+                     break;
+                 }
+                 case json::parse_token_t::string:
+                 {
+-                    auto s = std::get<std::string_view>(t.value);
++                    auto s = boost::get<std::string_view>(t.value);
+                     m_handler.string(s.data(), s.size(), false);
+                     break;
+                 }
+                 case json::parse_token_t::parse_error:
+                 {
+-                    auto v = std::get<parse_error_value_t>(t.value);
++                    auto v = boost::get<parse_error_value_t>(t.value);
+                     throw json::parse_error(std::string{v.str}, v.offset);
+                 }
+                 case json::parse_token_t::unknown:
+diff --git a/include/orcus/threaded_sax_token_parser.hpp 
b/include/orcus/threaded_sax_token_parser.hpp
+index 59ea967a..1b389be2 100644
+--- a/include/orcus/threaded_sax_token_parser.hpp
++++ b/include/orcus/threaded_sax_token_parser.hpp
+@@ -131,25 +131,25 @@ void 
threaded_sax_token_parser<_Handler>::process_tokens(const sax::parse_tokens
+         {
+             case sax::parse_token_t::start_element:
+             {
+-                const auto* elem = std::get<const 
xml_token_element_t*>(t.value);
++                const auto* elem = boost::get<const 
xml_token_element_t*>(t.value);
+                 m_handler.start_element(*elem);
+                 break;
+             }
+             case sax::parse_token_t::end_element:
+             {
+-                const auto* elem = std::get<const 
xml_token_element_t*>(t.value);
++                const auto* elem = boost::get<const 
xml_token_element_t*>(t.value);
+                 m_handler.end_element(*elem);
+                 break;
+             }
+             case sax::parse_token_t::characters:
+             {
+-                auto s = std::get<std::string_view>(t.value);
++                auto s = boost::get<std::string_view>(t.value);
+                 m_handler.characters(s, false);
+                 break;
+             }
+             case sax::parse_token_t::parse_error:
+             {
+-                auto v = std::get<parse_error_value_t>(t.value);
++                auto v = boost::get<parse_error_value_t>(t.value);
+                 throw sax::malformed_xml_error(std::string{v.str}, v.offset);
+             }
+             default:
+diff --git a/src/liborcus/css_document_tree.cpp 
b/src/liborcus/css_document_tree.cpp
+index 46bf7e91..4b44edff 100644
+--- a/src/liborcus/css_document_tree.cpp
++++ b/src/liborcus/css_document_tree.cpp
+@@ -317,7 +317,7 @@ public:
+             {
+                 // String value needs interning.
+                 css_property_value_t interned = v;
+-                auto s = std::get<std::string_view>(v.value);
++                auto s = boost::get<std::string_view>(v.value);
+                 interned.value = m_sp.intern(s).first;
+                 m_dest.push_back(interned);
+                 break;
+diff --git a/src/liborcus/css_selector.cpp b/src/liborcus/css_selector.cpp
+index b7b63f37..de522062 100644
+--- a/src/liborcus/css_selector.cpp
++++ b/src/liborcus/css_selector.cpp
+@@ -155,7 +155,7 @@ std::ostream& operator<< (std::ostream& os, const 
css_property_value_t& v)
+     {
+         case css::property_value_t::hsl:
+         {
+-            auto c = std::get<css::hsla_color_t>(v.value);
++            auto c = boost::get<css::hsla_color_t>(v.value);
+             os << "hsl("
+                 << (int)c.hue << sep
+                 << (int)c.saturation << sep
+@@ -165,7 +165,7 @@ std::ostream& operator<< (std::ostream& os, const 
css_property_value_t& v)
+         }
+         case css::property_value_t::hsla:
+         {
+-            auto c = std::get<css::hsla_color_t>(v.value);
++            auto c = boost::get<css::hsla_color_t>(v.value);
+             os << "hsla("
+                 << (int)c.hue << sep
+                 << (int)c.saturation << sep
+@@ -176,7 +176,7 @@ std::ostream& operator<< (std::ostream& os, const 
css_property_value_t& v)
+         }
+         case css::property_value_t::rgb:
+         {
+-            auto c = std::get<css::rgba_color_t>(v.value);
++            auto c = boost::get<css::rgba_color_t>(v.value);
+             os << "rgb("
+                 << (int)c.red << sep
+                 << (int)c.green << sep
+@@ -186,7 +186,7 @@ std::ostream& operator<< (std::ostream& os, const 
css_property_value_t& v)
+         }
+         case css::property_value_t::rgba:
+         {
+-            auto c = std::get<css::rgba_color_t>(v.value);
++            auto c = boost::get<css::rgba_color_t>(v.value);
+             os << "rgba("
+                 << (int)c.red << sep
+                 << (int)c.green << sep
+@@ -196,10 +196,10 @@ std::ostream& operator<< (std::ostream& os, const 
css_property_value_t& v)
+             break;
+         }
+         case css::property_value_t::string:
+-            os << std::get<std::string_view>(v.value);
++            os << boost::get<std::string_view>(v.value);
+             break;
+         case css::property_value_t::url:
+-            os << "url(" << std::get<std::string_view>(v.value) << ")";
++            os << "url(" << boost::get<std::string_view>(v.value) << ")";
+             break;
+         case css::property_value_t::none:
+         default:
+diff --git a/src/liborcus/orcus_csv.cpp b/src/liborcus/orcus_csv.cpp
+index 5c71bcf5..637308ab 100644
+--- a/src/liborcus/orcus_csv.cpp
++++ b/src/liborcus/orcus_csv.cpp
+@@ -63,7 +63,7 @@ public:
+         // 0.
+         if (m_row >= mp_sheet->get_sheet_size().rows)
+         {
+-            auto csv = std::get<config::csv_config>(m_app_config.data);
++            auto csv = boost::get<config::csv_config>(m_app_config.data);
+ 
+             if (!csv.split_to_multiple_sheets)
+                 throw max_row_size_reached();
+@@ -93,7 +93,7 @@ public:
+ 
+     void cell(const char* p, size_t n, bool transient)
+     {
+-        auto csv = std::get<config::csv_config>(m_app_config.data);
++        auto csv = boost::get<config::csv_config>(m_app_config.data);
+ 
+         if (m_sheet == 0 && size_t(m_row) < csv.header_row_size)
+         {
+diff --git a/src/orcus_csv_main.cpp b/src/orcus_csv_main.cpp
+index 4f6d7173..446f2684 100644
+--- a/src/orcus_csv_main.cpp
++++ b/src/orcus_csv_main.cpp
+@@ -45,7 +45,7 @@ public:
+ 
+     virtual void map_to_config(config& opt, const po::variables_map& vm) 
override
+     {
+-        auto csv = std::get<config::csv_config>(opt.data);
++        auto csv = boost::get<config::csv_config>(opt.data);
+ 
+         if (vm.count("row-header"))
+             csv.header_row_size = vm["row-header"].as<size_t>();
+diff --git a/src/orcus_test_csv.cpp b/src/orcus_test_csv.cpp
+index 310ace9d..0b9ba994 100644
+--- a/src/orcus_test_csv.cpp
++++ b/src/orcus_test_csv.cpp
+@@ -95,8 +95,8 @@ void test_csv_import_split_sheet()
+     std::cout << "checking " << path << "..." << std::endl;
+ 
+     config conf(format_t::csv);
+-    std::get<config::csv_config>(conf.data).header_row_size = 0;
+-    std::get<config::csv_config>(conf.data).split_to_multiple_sheets = true;
++    boost::get<config::csv_config>(conf.data).header_row_size = 0;
++    boost::get<config::csv_config>(conf.data).split_to_multiple_sheets = true;
+ 
+     // Set the row size to 11 to make sure the split occurs.
+     spreadsheet::range_size_t ss{11, 4};
+@@ -126,7 +126,7 @@ void test_csv_import_split_sheet()
+     path = dir;
+     path.append("input.csv");
+     doc.clear();
+-    std::get<config::csv_config>(conf.data).header_row_size = 1;
++    boost::get<config::csv_config>(conf.data).header_row_size = 1;
+     {
+         spreadsheet::import_factory factory(doc);
+         orcus_csv app(&factory);
+@@ -149,7 +149,7 @@ void test_csv_import_split_sheet()
+ 
+     // Re-import it again, but this time disable the splitting.  The data 
should
+     // get trucated on the first sheet.
+-    std::get<config::csv_config>(conf.data).split_to_multiple_sheets = false;
++    boost::get<config::csv_config>(conf.data).split_to_multiple_sheets = 
false;
+ 
+     path = dir;
+     path.append("input.csv");
+diff --git a/src/orcus_test_xlsx.cpp b/src/orcus_test_xlsx.cpp
+index 807c61e4..632fb1e7 100644
+--- a/src/orcus_test_xlsx.cpp
++++ b/src/orcus_test_xlsx.cpp
+@@ -1154,8 +1154,8 @@ void test_xlsx_pivot_group_by_numbers()
+     for (const pivot_cache_item_t& item : fld->items)
+     {
+         assert(item.type == pivot_cache_item_t::item_type::numeric);
+-        assert(*fld->min_value <= std::get<double>(item.value));
+-        assert(std::get<double>(item.value) <= *fld->max_value);
++        assert(*fld->min_value <= boost::get<double>(item.value));
++        assert(boost::get<double>(item.value) <= *fld->max_value);
+     }
+ 
+     // This field is also gruop field with 7 numeric intervals of width 2.
+diff --git a/src/parser/json_parser_thread.cpp 
b/src/parser/json_parser_thread.cpp
+index 36bbe6e6..65fb6255 100644
+--- a/src/parser/json_parser_thread.cpp
++++ b/src/parser/json_parser_thread.cpp
+@@ -237,19 +237,19 @@ std::ostream& operator<< (std::ostream& os, const 
parse_tokens_t& tokens)
+                     os << "- null" << endl;
+                     break;
+                 case parse_token_t::number:
+-                    os << "- number (v=" << std::get<double>(t.value) << ")" 
<< endl;
++                    os << "- number (v=" << boost::get<double>(t.value) << 
")" << endl;
+                     break;
+                 case parse_token_t::object_key:
+-                    os << "- object_key (v=" << 
std::get<std::string_view>(t.value) << ")" << endl;
++                    os << "- object_key (v=" << 
boost::get<std::string_view>(t.value) << ")" << endl;
+                     break;
+                 case parse_token_t::parse_error:
+                 {
+-                    auto v = std::get<parse_error_value_t>(t.value);
++                    auto v = boost::get<parse_error_value_t>(t.value);
+                     os << "- parse_error (v=" << v.str << ", offset=" << 
v.offset << ")" << endl;
+                     break;
+                 }
+                 case parse_token_t::string:
+-                    os << "- string (" << std::get<std::string_view>(t.value) 
<< ")" << endl;
++                    os << "- string (" << 
boost::get<std::string_view>(t.value) << ")" << endl;
+                     break;
+                 case parse_token_t::unknown:
+                     os << "- unknown" << endl;
+diff --git a/src/python/sheet_rows.cpp b/src/python/sheet_rows.cpp
+index be495894..0d21ba71 100644
+--- a/src/python/sheet_rows.cpp
++++ b/src/python/sheet_rows.cpp
+@@ -135,7 +135,10 @@ PyObject* sheet_rows_iternext(PyObject* self)
+                 break;
+             }
+             case ixion::celltype_t::unknown:
++            {
++                PyErr_SetString(PyExc_RuntimeError, "Unknown cell type.");
+                 break;
++            }
+         }
+ 
+         if (!obj)
+-- 
+2.25.1
+
diff --git a/external/liborcus/unused-variables.patch.1 
b/external/liborcus/unused-variables.patch.1
new file mode 100644
index 000000000000..77b88fae288c
--- /dev/null
+++ b/external/liborcus/unused-variables.patch.1
@@ -0,0 +1,24 @@
+From 5fccafa297ce2439ee850e13ccbeea3edb1750af Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <kohei.yosh...@gmail.com>
+Date: Tue, 2 Nov 2021 20:42:45 -0400
+Subject: [PATCH] Unused variables.
+
+---
+ include/orcus/sax_parser.hpp | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/include/orcus/sax_parser.hpp b/include/orcus/sax_parser.hpp
+index 24b1e8ea..15e8d917 100644
+--- a/include/orcus/sax_parser.hpp
++++ b/include/orcus/sax_parser.hpp
+@@ -539,7 +539,6 @@ template<typename _Handler, typename _Config>
+ void sax_parser<_Handler,_Config>::attribute()
+ {
+     sax::parser_attribute attr;
+-    std::string_view attr_ns_name, attr_name, attr_value;
+     attribute_name(attr.ns, attr.name);
+ 
+ #if ORCUS_DEBUG_SAX_PARSER
+-- 
+2.25.1
+
diff --git a/external/mdds/UnpackedTarball_mdds.mk 
b/external/mdds/UnpackedTarball_mdds.mk
index 3c664336430b..cf5bd48a1eb6 100644
--- a/external/mdds/UnpackedTarball_mdds.mk
+++ b/external/mdds/UnpackedTarball_mdds.mk
@@ -13,11 +13,9 @@ $(eval $(call 
gb_UnpackedTarball_set_tarball,mdds,$(MDDS_TARBALL)))
 
 $(eval $(call gb_UnpackedTarball_set_patchlevel,mdds,0))
 
-# * external/mdds/Wunused-but-set-variable.patch upstream at
-#   <https://gitlab.com/mdds/mdds/-/merge_requests/29> 
"-Werror,-Wunused-but-set-variable (Clang 13
-#   trunk)":
 $(eval $(call gb_UnpackedTarball_add_patches,mdds,\
-    external/mdds/Wunused-but-set-variable.patch \
+       external/mdds/remove-unused-parameters.patch.1 \
+       external/mdds/remove-more-unused-parameters.patch.1 \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/external/mdds/Wunused-but-set-variable.patch 
b/external/mdds/Wunused-but-set-variable.patch
deleted file mode 100644
index ba28cb18eded..000000000000
--- a/external/mdds/Wunused-but-set-variable.patch
+++ /dev/null
@@ -1,46 +0,0 @@
---- include/mdds/multi_type_vector_def.inl
-+++ include/mdds/multi_type_vector_def.inl
-@@ -843,18 +843,12 @@
- typename multi_type_vector<_CellBlockFunc, _EventFunc>::iterator
- multi_type_vector<_CellBlockFunc, _EventFunc>::push_back_empty()
- {
--    size_type last_block_size = 0;
--    if (!m_blocks.empty())
--        last_block_size = m_blocks.back().m_size;
--
-     size_type block_index = m_blocks.size();
--    size_type start_pos = m_cur_size;
- 
-     if (!append_empty(1))
-     {
-         // Last empty block has been extended.
-         --block_index;
--        start_pos -= last_block_size;
-     }
- 
-     // Get the iterator of the last block.
-@@ -3923,8 +3917,6 @@
-     size_type offset = start_row - start_row_in_block1;
-     size_type end_row_in_block2 = start_row_in_block2 + blk2->m_size - 1;
- 
--    size_type start_row_itr = start_row_in_block1;
--
-     // Initially set to erase blocks between block 1 and block 2 
non-inclusive at either end.
-     typename blocks_type::iterator it_erase_begin = m_blocks.begin() + 
block_index1 + 1;
-     typename blocks_type::iterator it_erase_end = m_blocks.begin() + 
block_index2;
-@@ -3948,7 +3940,6 @@
-                 data_blk.mp_data = blk0->mp_data;
-                 blk0->mp_data = nullptr;
- 
--                start_row_itr -= blk0->m_size;
-                 data_blk.m_size += blk0->m_size;
-                 data_blk.m_position = blk0->m_position;
- 
-@@ -3967,7 +3958,6 @@
-             element_block_func::resize_block(*blk1->mp_data, offset);
-         }
-         blk1->m_size = offset;
--        start_row_itr += offset;
-     }
- 
-     if (blk0_copied)
diff --git a/external/mdds/remove-more-unused-parameters.patch.1 
b/external/mdds/remove-more-unused-parameters.patch.1
new file mode 100644
index 000000000000..c0c29471c9ed
--- /dev/null
+++ b/external/mdds/remove-more-unused-parameters.patch.1
@@ -0,0 +1,42 @@
+From cc24c84d35274aead5afe574c87ecd6368aa5e2a Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <kohei.yosh...@gmail.com>
+Date: Tue, 2 Nov 2021 18:24:30 -0400
+Subject: [PATCH] More unused parameters.
+
+I personally cannot reproduce the warnings. But The android x86 build
+of LibreOffice generates the following build warnings:
+
+In file included from 
/home/tdf/lode/jenkins/workspace/android_x86/svl/source/misc/gridprinter.cxx:16:
+In file included from 
/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/multi_type_matrix.hpp:37:
+In file included from 
/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/multi_type_vector.hpp:31:
+In file included from 
/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/main.hpp:35:
+/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/./block_util.hpp:49:27:
 error: unused parameter 'block_store' [-Werror,-Wunused-parameter]
+    void operator()(Blks& block_store, int64_t start_block_index, int64_t 
delta) const
+                          ^
+/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/./block_util.hpp:49:48:
 error: unused parameter 'start_block_index' [-Werror,-Wunused-parameter]
+    void operator()(Blks& block_store, int64_t start_block_index, int64_t 
delta) const
+                                               ^
+/home/tdf/lode/jenkins/workspace/android_x86/workdir/UnpackedTarball/mdds/include/mdds/./multi_type_vector/soa/./block_util.hpp:49:75:
 error: unused parameter 'delta' [-Werror,-Wunused-parameter]
+    void operator()(Blks& block_store, int64_t start_block_index, int64_t 
delta) const
+                                                                          ^
+3 errors generated.
+---
+ include/mdds/multi_type_vector/soa/block_util.hpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/mdds/multi_type_vector/soa/block_util.hpp 
b/include/mdds/multi_type_vector/soa/block_util.hpp
+index d10ee67..73ba27c 100644
+--- a/include/mdds/multi_type_vector/soa/block_util.hpp
++++ b/include/mdds/multi_type_vector/soa/block_util.hpp
+@@ -46,7 +46,7 @@ namespace detail {
+ template<typename Blks, lu_factor_t F>
+ struct adjust_block_positions
+ {
+-    void operator()(Blks& block_store, int64_t start_block_index, int64_t 
delta) const
++    void operator()(Blks& /*block_store*/, int64_t /*start_block_index*/, 
int64_t /*delta*/) const
+     {

... etc. - the rest is truncated

Reply via email to