It’s always better *with* the patches... Stephen
From 4b854c788af23f01c01afbd35a3befb060536297 Mon Sep 17 00:00:00 2001
From: Stephen Kitt <steve@sk2.org>
Date: Tue, 9 Apr 2019 09:01:55 +0200
Subject: [PATCH 1/2] Apply upstream dllimport fix for static data members
Closes: #923214
---
debian/changelog | 7 +++++++
debian/patches/gcc9-pr88568-2.patch | 40 +++++++++++++++++++++++++++++++++++++
debian/patches/series2 | 3 +--
3 files changed, 48 insertions(+), 2 deletions(-)
create mode 100644 debian/patches/gcc9-pr88568-2.patch
diff --git a/debian/changelog b/debian/changelog
index d9b3631..e540504 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+gcc-mingw-w64 (21.2) UNRELEASED; urgency=medium
+
+ * Apply upstream dllimport fix for static data members.
+ Closes: #923214.
+
+ -- Stephen Kitt <skitt@debian.org> Thu, 21 Mar 2019 10:45:08 +0100
+
gcc-mingw-w64 (21.1) unstable; urgency=medium
* Avoid attempting to strip plugins using the target strip; should fix
diff --git a/debian/patches/gcc9-pr88568-2.patch b/debian/patches/gcc9-pr88568-2.patch
new file mode 100644
index 0000000..3ad3568
--- /dev/null
+++ b/debian/patches/gcc9-pr88568-2.patch
@@ -0,0 +1,40 @@
+2019-03-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/88568
+ * attribs.c (handle_dll_attribute): Don't clear TREE_STATIC for
+ dllimport on VAR_DECLs with RECORD_TYPE or UNION_TYPE DECL_CONTEXT.
+
+ * g++.dg/other/pr88568.C: New test.
+
+--- a/src/gcc/attribs.c 2019-01-10 11:44:07.122511397 +0100
++++ b/src/gcc/attribs.c 2019-03-05 13:59:51.745924578 +0100
+@@ -1691,8 +1691,11 @@ handle_dll_attribute (tree * pnode, tree
+ a function global scope, unless declared static. */
+ if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
+ TREE_PUBLIC (node) = 1;
+- /* Clear TREE_STATIC because DECL_EXTERNAL is set. */
+- TREE_STATIC (node) = 0;
++ /* Clear TREE_STATIC because DECL_EXTERNAL is set, unless
++ it is a C++ static data member. */
++ if (DECL_CONTEXT (node) == NULL_TREE
++ || !RECORD_OR_UNION_TYPE_P (DECL_CONTEXT (node)))
++ TREE_STATIC (node) = 0;
+ }
+
+ if (*no_add_attrs == false)
+--- a/src/gcc/testsuite/g++.dg/other/pr88568.C 2019-03-05 14:03:20.132509560 +0100
++++ b/src/gcc/testsuite/g++.dg/other/pr88568.C 2019-03-05 14:01:39.674155860 +0100
+@@ -0,0 +1,13 @@
++// PR c/88568
++// { dg-do compile }
++// { dg-require-dll "" }
++
++struct S {
++ __attribute__((dllimport)) static const char foo[];
++};
++
++int
++foo (int x)
++{
++ return S::foo[x];
++}
diff --git a/debian/patches/series2 b/debian/patches/series2
index 6f5002f..4f7963a 100644
--- a/debian/patches/series2
+++ b/debian/patches/series2
@@ -6,5 +6,4 @@ win-std-filesystem.patch
hide-path-iostream-operators.patch
filesystem_error-no-throw-copyable.patch
overload-distance-and-advance.patch
-#update-path-compare-logic.patch
-#fix-filesystem-path-lexically_normal.patch
+gcc9-pr88568-2.patch
--
2.11.0
From e2b9e4ff772453fb81634b9715a83c83deb07d4a Mon Sep 17 00:00:00 2001
From: Stephen Kitt <steve@sk2.org>
Date: Wed, 10 Apr 2019 18:01:26 +0200
Subject: [PATCH 2/2] Explicitly enable std::filesystem
... with the appropriate upstream patch.
Closes: #925172
---
debian/changelog | 2 +
debian/g++-mingw-w64-i686.install.in | 2 +-
debian/g++-mingw-w64-x86-64.install.in | 2 +-
debian/patches/series2 | 1 +
.../set-shared_ptr-lock-policy-at-build-time.patch | 336 +++++++++++++++++++++
debian/rules | 8 +-
6 files changed, 346 insertions(+), 5 deletions(-)
create mode 100644 debian/patches/set-shared_ptr-lock-policy-at-build-time.patch
diff --git a/debian/changelog b/debian/changelog
index e540504..baee837 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@ gcc-mingw-w64 (21.2) UNRELEASED; urgency=medium
* Apply upstream dllimport fix for static data members.
Closes: #923214.
+ * Explicitly enable std::filesystem, with the appropriate upstream
+ patch. Closes: #925172.
-- Stephen Kitt <skitt@debian.org> Thu, 21 Mar 2019 10:45:08 +0100
diff --git a/debian/g++-mingw-w64-i686.install.in b/debian/g++-mingw-w64-i686.install.in
index e2aea2e..f79b2aa 100644
--- a/debian/g++-mingw-w64-i686.install.in
+++ b/debian/g++-mingw-w64-i686.install.in
@@ -7,5 +7,5 @@ usr/lib/gcc/i686-w64-mingw32/@@VERSION@@*/libstdc++-6.dll
usr/lib/gcc/i686-w64-mingw32/@@VERSION@@*/libstdc++.a
usr/lib/gcc/i686-w64-mingw32/@@VERSION@@*/libstdc++.dll.a
usr/lib/gcc/i686-w64-mingw32/@@VERSION@@*/libstdc++.dll.a-gdb.py
-#usr/lib/gcc/i686-w64-mingw32/@@VERSION@@*/libstdc++fs.a
+usr/lib/gcc/i686-w64-mingw32/@@VERSION@@*/libstdc++fs.a
usr/lib/gcc/i686-w64-mingw32/@@VERSION@@*/libsupc++.a
diff --git a/debian/g++-mingw-w64-x86-64.install.in b/debian/g++-mingw-w64-x86-64.install.in
index 76b0ea4..544290e 100644
--- a/debian/g++-mingw-w64-x86-64.install.in
+++ b/debian/g++-mingw-w64-x86-64.install.in
@@ -7,5 +7,5 @@ usr/lib/gcc/x86_64-w64-mingw32/@@VERSION@@*/libstdc++-6.dll
usr/lib/gcc/x86_64-w64-mingw32/@@VERSION@@*/libstdc++.a
usr/lib/gcc/x86_64-w64-mingw32/@@VERSION@@*/libstdc++.dll.a
usr/lib/gcc/x86_64-w64-mingw32/@@VERSION@@*/libstdc++.dll.a-gdb.py
-#usr/lib/gcc/x86_64-w64-mingw32/@@VERSION@@*/libstdc++fs.a
+usr/lib/gcc/x86_64-w64-mingw32/@@VERSION@@*/libstdc++fs.a
usr/lib/gcc/x86_64-w64-mingw32/@@VERSION@@*/libsupc++.a
diff --git a/debian/patches/series2 b/debian/patches/series2
index 4f7963a..53bd6d3 100644
--- a/debian/patches/series2
+++ b/debian/patches/series2
@@ -4,6 +4,7 @@ wc-file-streams.patch
refactor-path-construction.patch
win-std-filesystem.patch
hide-path-iostream-operators.patch
+set-shared_ptr-lock-policy-at-build-time.patch
filesystem_error-no-throw-copyable.patch
overload-distance-and-advance.patch
gcc9-pr88568-2.patch
diff --git a/debian/patches/set-shared_ptr-lock-policy-at-build-time.patch b/debian/patches/set-shared_ptr-lock-policy-at-build-time.patch
new file mode 100644
index 0000000..085f257
--- /dev/null
+++ b/debian/patches/set-shared_ptr-lock-policy-at-build-time.patch
@@ -0,0 +1,336 @@
+commit c8fb3443911413cc88f316305fc6b7bf4861ccaa
+Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Tue Nov 27 23:25:56 2018 +0000
+
+ PR libstdc++/67843 set shared_ptr lock policy at build-time
+
+ This resolves a longstanding issue where the lock policy for shared_ptr
+ reference counting depends on compilation options when the header is
+ included, so that different -march options can cause ABI changes. For
+ example, objects compiled with -march=armv7 will use atomics to
+ synchronize reference counts, and objects compiled with -march=armv5t
+ will use a mutex. That means the shared_ptr control block will have a
+ different layout in different objects, causing ODR violations and
+ undefined behaviour. This was the root cause of PR libstdc++/42734 as
+ well as PR libstdc++/67843.
+
+ The solution is to decide on the lock policy at build time, when
+ libstdc++ is configured. The configure script checks for the
+ availability of the necessary atomic built-ins for the target and fixes
+ that choice permanently. Different -march flags used to compile user
+ code will not cause changes to the lock policy. This results in an ABI
+ change for certain compilations, but only where there was already an ABI
+ incompatibility between the libstdc++.so library and objects built with
+ an incompatible -march option. In general, this means a more stable ABI
+ that isn't silently altered when -march flags make addition atomic ops
+ available.
+
+ To force a target to use "atomic" or "mutex" the new configure option
+ --with-libstdcxx-lock-policy can be used.
+
+ In order to turn ODR violations into linker errors, the uses of
+ shared_ptr in filesystem directory iterators have been replaced
+ with __shared_ptr, and explicit instantiations are declared. This
+ ensures that object files using those types cannot link to libstdc++
+ libs unless they use the same lock policy.
+
+ PR libstdc++/67843
+ * acinclude.m4 (GLIBCXX_ENABLE_LOCK_POLICY): Add new macro
+ that defines _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+ * configure.ac: Use GLIBCXX_ENABLE_LOCK_POLICY.
+ * doc/xml/manual/configure.xml: Document new configure option.
+ * include/bits/fs_dir.h (directory_iterator): Use __shared_ptr
+ instead of shared_ptr.
+ (recursive_directory_iterator): Likewise.
+ (__shared_ptr<_Dir>): Add explicit instantiation declaration.
+ (__shared_ptr<recursive_directory_iterator::_Dir_stack>): Likewise.
+ * include/bits/shared_ptr_base.h (__allocate_shared, __make_shared):
+ Add default template argument for _Lock_policy template parameter.
+ * include/ext/concurrence.h (__default_lock_policy): Check macro
+ _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY instead of checking if the current
+ target supports the builtins for compare-and-swap.
+ * src/filesystem/std-dir.cc (__shared_ptr<_Dir>): Add explicit
+ instantiation definition.
+ (__shared_ptr<recursive_directory_iterator::_Dir_stack>): Likewise.
+ (directory_iterator, recursive_directory_iterator): Use __make_shared
+ instead of make_shared.
+
+ git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266533 138bc75d-0d04-0410-961f-82ee72b054a4
+
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/acinclude.m4
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/acinclude.m4
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/acinclude.m4
+@@ -3579,6 +3579,72 @@ EOF
+
+ ])
+
++dnl
++dnl Set default lock policy for synchronizing shared_ptr reference counting.
++dnl
++dnl --with-libstdcxx-lock-policy=auto
++dnl Use atomic operations for shared_ptr reference counting only if
++dnl the default target supports atomic compare-and-swap.
++dnl --with-libstdcxx-lock-policy=atomic
++dnl Use atomic operations for shared_ptr reference counting.
++dnl --with-libstdcxx-lock-policy=mutex
++dnl Use a mutex to synchronize shared_ptr reference counting.
++dnl
++dnl This controls the value of __gnu_cxx::__default_lock_policy, which
++dnl determines how shared_ptr reference counts are synchronized.
++dnl The option "atomic" means that atomic operations should be used,
++dnl "mutex" means that a mutex will be used. The default option, "auto",
++dnl will check if the target supports the compiler-generated builtins
++dnl for atomic compare-and-swap operations for 2-byte and 4-byte integers,
++dnl and will use "atomic" if supported, "mutex" otherwise.
++dnl This option is ignored if the thread model used by GCC is "single",
++dnl as no synchronization is used at all in that case.
++dnl This option affects the library ABI (except in the "single" thread model).
++dnl
++dnl Defines _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY to 1 if atomics should be used.
++dnl
++AC_DEFUN([GLIBCXX_ENABLE_LOCK_POLICY], [
++
++ AC_ARG_WITH([libstdcxx-lock-policy],
++ AC_HELP_STRING([--with-libstdcxx-lock-policy={atomic,mutex,auto}],
++ [synchronization policy for shared_ptr reference counting [default=auto]]),
++ [libstdcxx_atomic_lock_policy=$withval],
++ [libstdcxx_atomic_lock_policy=auto])
++
++ case "$libstdcxx_atomic_lock_policy" in
++ atomic|mutex|auto) ;;
++ *) AC_MSG_ERROR([Invalid argument for --with-libstdcxx-lock-policy]) ;;
++ esac
++ AC_MSG_CHECKING([for lock policy for shared_ptr reference counts])
++
++ if test x"$libstdcxx_atomic_lock_policy" = x"auto"; then
++ AC_LANG_SAVE
++ AC_LANG_CPLUSPLUS
++ ac_save_CXXFLAGS="$CXXFLAGS"
++
++ dnl Why do we care about 2-byte CAS on targets with 4-byte _Atomic_word?!
++ AC_TRY_COMPILE([
++ #if ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2
++ # error "No 2-byte compare-and-swap"
++ #elif ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
++ # error "No 4-byte compare-and-swap"
++ #endif
++ ],,
++ [libstdcxx_atomic_lock_policy=atomic],
++ [libstdcxx_atomic_lock_policy=mutex])
++ AC_LANG_RESTORE
++ CXXFLAGS="$ac_save_CXXFLAGS"
++ fi
++
++ if test x"$libstdcxx_atomic_lock_policy" = x"atomic"; then
++ AC_MSG_RESULT(atomic)
++ AC_DEFINE(HAVE_ATOMIC_LOCK_POLICY,1,
++ [Defined if shared_ptr reference counting should use atomic operations.])
++ else
++ AC_MSG_RESULT(mutex)
++ fi
++
++])
+
+ dnl
+ dnl Allow visibility attributes to be used on namespaces, objects, etc.
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/config.h.in
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/config.h.in
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/config.h.in
+@@ -30,6 +30,9 @@
+ /* Define to 1 if you have the `atanl' function. */
+ #undef HAVE_ATANL
+
++/* Defined if shared_ptr reference counting should use atomic operations. */
++#undef HAVE_ATOMIC_LOCK_POLICY
++
+ /* Define to 1 if you have the `at_quick_exit' function. */
+ #undef HAVE_AT_QUICK_EXIT
+
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/configure
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/configure
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/configure
+@@ -872,6 +872,7 @@ enable_libtool_lock
+ enable_hosted_libstdcxx
+ enable_libstdcxx_verbose
+ enable_libstdcxx_pch
++with_libstdcxx_lock_policy
+ enable_cstdio
+ enable_clocale
+ enable_nls
+@@ -1615,6 +1616,9 @@ Optional Packages:
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++ --with-libstdcxx-lock-policy={atomic,mutex,auto}
++ synchronization policy for shared_ptr reference
++ counting [default=auto]
+ --with-python-dir the location to install Python modules. This path is
+ relative starting from the prefix.
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/configure.ac
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/configure.ac
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/configure.ac
+@@ -150,6 +150,7 @@ GLIBCXX_ENABLE_VERBOSE
+ GLIBCXX_ENABLE_PCH($is_hosted)
+ GLIBCXX_ENABLE_THREADS
+ GLIBCXX_ENABLE_ATOMIC_BUILTINS
++GLIBCXX_ENABLE_LOCK_POLICY
+ GLIBCXX_ENABLE_DECIMAL_FLOAT
+ GLIBCXX_ENABLE_INT128_FLOAT128
+ if test "$enable_float128" = yes; then
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/doc/xml/manual/configure.xml
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/doc/xml/manual/configure.xml
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/doc/xml/manual/configure.xml
+@@ -399,6 +399,28 @@
+ </para>
+ </listitem></varlistentry>
+
++ <varlistentry><term><code>--with-libstdcxx-lock-policy=OPTION</code></term>
++ <listitem><para>Sets the lock policy that controls how
++ <classname>shared_ptr</classname> reference counting is
++ synchronized.
++ The choice OPTION=atomic enables use of atomics for updates to
++ <classname>shared_ptr</classname> reference counts.
++ The choice OPTION=mutex enables use of a mutex to synchronize updates
++ to <classname>shared_ptr</classname> reference counts.
++ If the compiler's thread model is "single" then this option has no
++ effect, as no synchronization is used for the reference counts.
++ The default is OPTION=auto, which checks for the availability of
++ compiler built-ins for 2-byte and 4-byte atomic compare-and-swap,
++ and uses OPTION=atomic if they're available, OPTION=mutex otherwise.
++ This option can change the library ABI.
++ If the library is configured to use atomics and user programs are
++ compiled using a target that doesn't natively support the atomic
++ operations (e.g. the library is configured for armv7 and then code
++ is compiled with <option>-march=armv5t</option>) then the program
++ might rely on support in libgcc to provide the atomics.
++ </para>
++ </listitem></varlistentry>
++
+ <varlistentry><term><code>--enable-vtable-verify</code>[default]</term>
+ <listitem>
+ <para>Use <code>-fvtable-verify=std</code> to compile the C++
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/include/bits/fs_dir.h
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/include/bits/fs_dir.h
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/include/bits/fs_dir.h
+@@ -403,7 +403,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
+
+ friend class recursive_directory_iterator;
+
+- std::shared_ptr<_Dir> _M_dir;
++ std::__shared_ptr<_Dir> _M_dir;
+ };
+
+ inline directory_iterator
+@@ -494,7 +494,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
+ const recursive_directory_iterator& __rhs);
+
+ struct _Dir_stack;
+- std::shared_ptr<_Dir_stack> _M_dirs;
++ std::__shared_ptr<_Dir_stack> _M_dirs;
+ directory_options _M_options = {};
+ bool _M_pending = false;
+ };
+@@ -525,6 +525,14 @@ _GLIBCXX_END_NAMESPACE_CXX11
+ // @} group filesystem
+ } // namespace filesystem
+
++ // Use explicit instantiations of these types. Any inconsistency in the
++ // value of __default_lock_policy between code including this header and
++ // the library will cause a linker error.
++ extern template class
++ __shared_ptr<filesystem::_Dir>;
++ extern template class
++ __shared_ptr<filesystem::recursive_directory_iterator::_Dir_stack>;
++
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace std
+
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/include/bits/shared_ptr_base.h
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/include/bits/shared_ptr_base.h
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/include/bits/shared_ptr_base.h
+@@ -1831,7 +1831,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ mutable __weak_ptr<_Tp, _Lp> _M_weak_this;
+ };
+
+- template<typename _Tp, _Lock_policy _Lp, typename _Alloc, typename... _Args>
++ template<typename _Tp, _Lock_policy _Lp = __default_lock_policy,
++ typename _Alloc, typename... _Args>
+ inline __shared_ptr<_Tp, _Lp>
+ __allocate_shared(const _Alloc& __a, _Args&&... __args)
+ {
+@@ -1839,7 +1840,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ std::forward<_Args>(__args)...);
+ }
+
+- template<typename _Tp, _Lock_policy _Lp, typename... _Args>
++ template<typename _Tp, _Lock_policy _Lp = __default_lock_policy,
++ typename... _Args>
+ inline __shared_ptr<_Tp, _Lp>
+ __make_shared(_Args&&... __args)
+ {
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/include/ext/concurrence.h
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/include/ext/concurrence.h
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/include/ext/concurrence.h
+@@ -51,16 +51,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ // Compile time constant that indicates prefered locking policy in
+ // the current configuration.
+ static const _Lock_policy __default_lock_policy =
+-#ifdef __GTHREADS
+-#if (defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) \
+- && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4))
++#ifndef __GTHREADS
++ _S_single;
++#elif defined _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY
+ _S_atomic;
+ #else
+ _S_mutex;
+ #endif
+-#else
+- _S_single;
+-#endif
+
+ // NB: As this is used in libsupc++, need to only depend on
+ // exception. No stdexception classes, no use of std::string.
+Index: gcc-mingw-w64-21.2/src/libstdc++-v3/src/filesystem/std-dir.cc
+===================================================================
+--- gcc-mingw-w64-21.2.orig/src/libstdc++-v3/src/filesystem/std-dir.cc
++++ gcc-mingw-w64-21.2/src/libstdc++-v3/src/filesystem/std-dir.cc
+@@ -39,6 +39,9 @@
+ namespace fs = std::filesystem;
+ namespace posix = std::filesystem::__gnu_posix;
+
++template class std::__shared_ptr<fs::_Dir>;
++template class std::__shared_ptr<fs::recursive_directory_iterator::_Dir_stack>;
++
+ struct fs::_Dir : _Dir_base
+ {
+ _Dir(const fs::path& p, bool skip_permission_denied, error_code& ec)
+@@ -125,7 +128,7 @@ directory_iterator(const path& p, direct
+
+ if (dir.dirp)
+ {
+- auto sp = std::make_shared<fs::_Dir>(std::move(dir));
++ auto sp = std::__make_shared<fs::_Dir>(std::move(dir));
+ if (sp->advance(skip_permission_denied, ec))
+ _M_dir.swap(sp);
+ }
+@@ -185,7 +188,7 @@ recursive_directory_iterator(const path&
+ {
+ if (ecptr)
+ ecptr->clear();
+- auto sp = std::make_shared<_Dir_stack>();
++ auto sp = std::__make_shared<_Dir_stack>();
+ sp->push(_Dir{ dirp, p });
+ if (ecptr ? sp->top().advance(*ecptr) : sp->top().advance())
+ _M_dirs.swap(sp);
diff --git a/debian/rules b/debian/rules
index 4eab4c3..0b55196 100755
--- a/debian/rules
+++ b/debian/rules
@@ -217,9 +217,9 @@ CONFFLAGS += \
# Enable libatomic
CONFFLAGS += \
--enable-libatomic
-# Enable experimental::filesystem
-#CONFFLAGS += \
-# --enable-libstdcxx-filesystem-ts=yes
+# Enable experimental::filesystem and std::filesystem
+CONFFLAGS += \
+ --enable-libstdcxx-filesystem-ts=yes
spelling = grep -rl "$(1)" $(upstream_dir) | xargs -r sed -i "s/$(1)/$(2)/g"
@@ -249,6 +249,8 @@ mingw-w64-patch-stamp: $(patch_stamp)
$(call spelling,wihout,without)
# Force /bin/sh in mkheaders
sed -i sX@SHELL@X/bin/shX $(upstream_dir)/fixincludes/mkheaders.in
+# Re-auto-conf libstdc++ (for the ::filesystem patches)
+ cd src/libstdc++-v3 && rm -f configure && AUTOM4TE=/usr/bin/autom4te2.64 autoconf2.64
# Fix the date and time of patched files
find . -type f -a -newermt '@$(SOURCE_DATE_EPOCH)' -print0 | \
xargs -0r touch --no-dereference --date='@$(SOURCE_DATE_EPOCH)'
--
2.11.0
Attachment:
pgpMg3_NttN0y.pgp
Description: OpenPGP digital signature