The package rpms/kyotocabinet.git has added or updated architecture specific content in
its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/kyotocabinet.git/commit/?id=eb93d...
https://src.fedoraproject.org/cgit/rpms/kyotocabinet.git/commit/?id=5b2a2....
Change:
-%ifarch s390x
+%ifarch s390x
Thanks.
Full change:
============
commit ce02aa84d030c61b923645c175af907c0b47d529
Author: Robert Scheck <robert(a)fedoraproject.org>
Date: Mon Mar 25 21:17:10 2019 +0100
Update to 1.2.77
diff --git a/kyotocabinet-1.2.76-gcc6.patch b/kyotocabinet-1.2.76-gcc6.patch
deleted file mode 100644
index d565cff..0000000
--- a/kyotocabinet-1.2.76-gcc6.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Patch from Andreas Sthrk <andy(a)hammerhartes.de> to work around build
-failures with GCC >= 6 like:
-
-In file included from kcdbext.cc:16:0:
-kcdbext.h: In member function 'char* kyotocabinet::IndexDB::get(const char*, size_t,
size_t*)':
-kcdbext.h:1281:14: error: cannot convert 'bool' to 'char*' in return
- return false;
- ^~~~~
-In file included from kclangc.cc:17:0:
-kcdbext.h: In member function 'char* kyotocabinet::IndexDB::get(const char*, size_t,
size_t*)':
-kcdbext.h:1281:14: error: cannot convert 'bool' to 'char*' in return
- return false;
- ^~~~~
-
-Note that using '\0' rather nullptr (like the patch from openSUSE is
-doing) just leads to new build failures with GCC >= 7 like:
-
-In file included from kcdbext.cc:16:0:
-kcdbext.h: In member function 'char* kyotocabinet::IndexDB::get(const char*, size_t,
size_t*)':
-kcdbext.h:1281:14: error: invalid conversion from 'char' to 'char*'
[-fpermissive]
- return '\0';
- ^~~~
-In file included from kclangc.cc:17:0:
-kcdbext.h: In member function 'char* kyotocabinet::IndexDB::get(const char*, size_t,
size_t*)':
-kcdbext.h:1281:14: error: invalid conversion from 'char' to 'char*'
[-fpermissive]
- return '\0';
- ^~~~
-
-See also:
-
- -
https://bugzilla.redhat.com/show_bug.cgi?id=1307706
- -
https://build.opensuse.org/package/view_file/devel:libraries:c_c++/kyotoc...
- -
https://bugs.debian.org/811627
-
---- kyotocabinet-1.2.76/kcdbext.h 2016-05-25 11:32:53.591866016 +0200
-+++ kyotocabinet-1.2.76/kcdbext.h 2012-05-24 18:27:59.000000000 +0200
-@@ -1278,7 +1278,7 @@
- if (omode_ == 0) {
- set_error(_KCCODELINE_, BasicDB::Error::INVALID, "not opened");
- *sp = 0;
-- return false;
-+ return nullptr;
- }
- if (!cache_) return db_.get(kbuf, ksiz, sp);
- size_t dvsiz = 0;
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 6bc82f7..368dfb4 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -1,13 +1,12 @@
Summary: A straightforward implementation of DBM
Name: kyotocabinet
-Version: 1.2.76
-Release: 21%{?dist}
+Version: 1.2.77
+Release: 1%{?dist}
License: GPLv3
-URL:
http://fallabs.com/%{name}/
-Source:
http://fallabs.com/%{name}/pkg/%{name}-%{version}.tar.gz
+URL:
https://fallabs.com/%{name}/
+Source:
https://fallabs.com/%{name}/pkg/%{name}-%{version}.tar.gz
Patch0: kyotocabinet-1.2.76-cflags.patch
Patch1: kyotocabinet-1.2.76-8-byte-atomics.patch
-Patch2: kyotocabinet-1.2.76-gcc6.patch
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
BuildRequires: gcc-c++, zlib-devel, lzo-devel, xz-devel
@@ -52,7 +51,6 @@ applications that use Kyoto Cabinet.
%setup -q
%patch0 -p1 -b .cflags
%patch1 -p1 -b .8-byte-atomics
-%patch2 -p1 -b .gcc6
%build
%configure --disable-opt --enable-lzo --enable-lzma
@@ -142,6 +140,9 @@ make check
%doc COPYING doc/api/* kyotocabinet.idl
%changelog
+* Mon Mar 25 2019 Robert Scheck <robert(a)fedoraproject.org> 1.2.77
+- Update to 1.2.77
+
* Fri Mar 1 2019 Peng Wu <pwu(a)redhat.com> - 1.2.76-21
- Switch back to use -O2 for s390x
diff --git a/sources b/sources
index 115d7ca..93b5f34 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (kyotocabinet-1.2.76.tar.gz) =
278db7b327eb4c21bf0137d9aa14fb67d74d5ce7ed1cb29fc9120d157a60de165ec0cf842903eb7952e8f998045ae585b958977fa973ba0e0773381de71d9f6a
+SHA512 (kyotocabinet-1.2.77.tar.gz) =
f38794c11faa3f4b64097a2e314307e1a6b75ddc495103647ebe52786a689336754496e7083697417ea90436e7fad681f16440975abec9ae917874aa25153e0f
commit eb93de7467ec25a2495902909966bf0677608952
Author: Peng Wu <alexepico(a)gmail.com>
Date: Fri Mar 1 12:35:56 2019 +0800
Switch back to use -O2 for s390x
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 9adeb89..6bc82f7 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -1,7 +1,7 @@
Summary: A straightforward implementation of DBM
Name: kyotocabinet
Version: 1.2.76
-Release: 20%{?dist}
+Release: 21%{?dist}
License: GPLv3
URL:
http://fallabs.com/%{name}/
Source:
http://fallabs.com/%{name}/pkg/%{name}-%{version}.tar.gz
@@ -55,12 +55,6 @@ applications that use Kyoto Cabinet.
%patch2 -p1 -b .gcc6
%build
-%ifarch s390x
-RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-O2 /-O1 /g')
-%endif
-export CFLAGS=$RPM_OPT_FLAGS
-
-
%configure --disable-opt --enable-lzo --enable-lzma
make %{?_smp_mflags}
@@ -148,6 +142,9 @@ make check
%doc COPYING doc/api/* kyotocabinet.idl
%changelog
+* Fri Mar 1 2019 Peng Wu <pwu(a)redhat.com> - 1.2.76-21
+- Switch back to use -O2 for s390x
+
* Wed Feb 27 2019 Parag Nemade <pnemade AT redhat DOT com> - 1.2.76-20
- Fix s390x compilation issue by changing -O2 to -O1 (rh#1675243)
commit 5b2a28cd66f0352bbe7d78ef9dbff68b19e6fb3d
Author: Parag Nemade <pnemade(a)fedoraproject.org>
Date: Wed Feb 27 17:48:45 2019 +0530
Fix s390x compilation issue by changing -O2 to -O1 (rh#1675243)
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 3fbee86..9adeb89 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -1,7 +1,7 @@
Summary: A straightforward implementation of DBM
Name: kyotocabinet
Version: 1.2.76
-Release: 19%{?dist}
+Release: 20%{?dist}
License: GPLv3
URL:
http://fallabs.com/%{name}/
Source:
http://fallabs.com/%{name}/pkg/%{name}-%{version}.tar.gz
@@ -55,6 +55,12 @@ applications that use Kyoto Cabinet.
%patch2 -p1 -b .gcc6
%build
+%ifarch s390x
+RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-O2 /-O1 /g')
+%endif
+export CFLAGS=$RPM_OPT_FLAGS
+
+
%configure --disable-opt --enable-lzo --enable-lzma
make %{?_smp_mflags}
@@ -142,6 +148,9 @@ make check
%doc COPYING doc/api/* kyotocabinet.idl
%changelog
+* Wed Feb 27 2019 Parag Nemade <pnemade AT redhat DOT com> - 1.2.76-20
+- Fix s390x compilation issue by changing -O2 to -O1 (rh#1675243)
+
* Fri Feb 01 2019 Fedora Release Engineering <releng(a)fedoraproject.org> -
1.2.76-19
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
commit c4d683890277ca8d8e9b96a0389d28f5d698a0f8
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Feb 1 06:15:02 2019 +0000
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 3be3ae8..3fbee86 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -1,7 +1,7 @@
Summary: A straightforward implementation of DBM
Name: kyotocabinet
Version: 1.2.76
-Release: 18%{?dist}
+Release: 19%{?dist}
License: GPLv3
URL:
http://fallabs.com/%{name}/
Source:
http://fallabs.com/%{name}/pkg/%{name}-%{version}.tar.gz
@@ -142,6 +142,9 @@ make check
%doc COPYING doc/api/* kyotocabinet.idl
%changelog
+* Fri Feb 01 2019 Fedora Release Engineering <releng(a)fedoraproject.org> -
1.2.76-19
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> -
1.2.76-18
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
commit d8d7c043bd9e13915e7487a9c3d894f24d7f2325
Author: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
Date: Mon Jan 28 20:17:50 2019 +0100
Remove obsolete Group tag
References:
https://fedoraproject.org/wiki/Changes/Remove_Group_Tag
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index d0579e1..3be3ae8 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -3,7 +3,6 @@ Name: kyotocabinet
Version: 1.2.76
Release: 18%{?dist}
License: GPLv3
-Group: Applications/Databases
URL:
http://fallabs.com/%{name}/
Source:
http://fallabs.com/%{name}/pkg/%{name}-%{version}.tar.gz
Patch0: kyotocabinet-1.2.76-cflags.patch
@@ -23,7 +22,6 @@ in hash table or B+ tree.
%package libs
Summary: Libraries for applications using Kyoto Cabinet
-Group: System Environment/Libraries
Provides: %{name}-lib = %{version}-%{release}
Provides: %{name}-lib%{?_isa} = %{version}-%{release}
Obsoletes: %{name}-lib < 1.2.76-3
@@ -34,7 +32,6 @@ for any Kyoto Cabinet client program or interface.
%package devel
Summary: Development files for Kyoto Cabinet
-Group: Development/Libraries
Requires: %{name}-libs%{?_isa} = %{version}-%{release}, pkgconfig
%description devel
@@ -43,7 +40,6 @@ developing applications that use Kyoto Cabinet.
%package apidocs
Summary: API documentation for Kyoto Cabinet library
-Group: Documentation
BuildArch: noarch
Provides: %{name}-api-doc = %{version}-%{release}
Obsoletes: %{name}-api-doc < 1.2.76-3
commit fb2e87035e459bbac6600712c170767219658a4a
Author: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
Date: Tue Jan 22 18:39:29 2019 +0100
Remove obsolete ldconfig scriptlets
References:
https://fedoraproject.org/wiki/Changes/RemoveObsoleteScriptlets
Signed-off-by: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 11f1c4e..d0579e1 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -74,9 +74,7 @@ rm -rf $RPM_BUILD_ROOT%{_defaultdocdir}
%check
make check
-%post libs -p /sbin/ldconfig
-
-%postun libs -p /sbin/ldconfig
+%ldconfig_scriptlets libs
%files
%doc doc/{command.html,common.css,icon16.png}
commit fed7bff3dd5e64a6177608ff5dc3aad141f6093c
Author: Robert Scheck <robert(a)fedoraproject.org>
Date: Sun Jul 15 15:51:39 2018 +0200
Remove RHEL/CentOS 5 specific workarounds
diff --git a/kyotocabinet-1.2.76-tr1_hashtable.patch
b/kyotocabinet-1.2.76-tr1_hashtable.patch
deleted file mode 100644
index d925871..0000000
--- a/kyotocabinet-1.2.76-tr1_hashtable.patch
+++ /dev/null
@@ -1,1326 +0,0 @@
-Workaround by Robert Scheck <robert(a)fedoraproject.org> for kyotocabinet >=
1.2.76, which
-avoids the "error: declaration of 'struct std::tr1::hash<long long
int>'" compile errors
-when using GCC 4.1.x on Red Hat Enterprise Linux 5 instead of using recommented GCC
4.4.x
-(or later) by copying and patching the relevant
"/usr/include/c++/4.1.1/tr1/functional"
-file. Passing "long long" and "unsigned long long" to
tr1_hashtable_define_trivial_hash()
-is the key. For further information, also have a look to Red Hat Bugzilla, bug ID
#915123:
-https://bugzilla.redhat.com/show_bug.cgi?id=915123
-
---- kyotocabinet-1.2.76/configure 2012-05-24 13:31:45.000000000 +0200
-+++ kyotocabinet-1.2.76/configure.tr1_hashtable 2013-11-17 03:11:59.000000000 +0100
-@@ -2090,7 +2090,7 @@
-
- # Targets
- MYHEADERFILES="kccommon.h kcutil.h kcthread.h kcfile.h"
--MYHEADERFILES="$MYHEADERFILES kccompress.h kccompare.h kcmap.h kcregex.h"
-+MYHEADERFILES="$MYHEADERFILES kccompress.h kccompare.h kcmap.h kcregex.h
kcfunctional.h"
- MYHEADERFILES="$MYHEADERFILES kcdb.h kcplantdb.h kcprotodb.h kcstashdb.h
kccachedb.h"
- MYHEADERFILES="$MYHEADERFILES kchashdb.h kcdirdb.h kctextdb.h kcpolydb.h kcdbext.h
kclangc.h"
- MYLIBRARYFILES="libkyotocabinet.a"
---- kyotocabinet-1.2.76/configure.in 2012-05-24 13:31:42.000000000 +0200
-+++ kyotocabinet-1.2.76/configure.in.tr1_hashtable 2013-11-17 03:12:07.000000000 +0100
-@@ -16,7 +16,7 @@
-
- # Targets
- MYHEADERFILES="kccommon.h kcutil.h kcthread.h kcfile.h"
--MYHEADERFILES="$MYHEADERFILES kccompress.h kccompare.h kcmap.h kcregex.h"
-+MYHEADERFILES="$MYHEADERFILES kccompress.h kccompare.h kcmap.h kcregex.h
kcfunctional.h"
- MYHEADERFILES="$MYHEADERFILES kcdb.h kcplantdb.h kcprotodb.h kcstashdb.h
kccachedb.h"
- MYHEADERFILES="$MYHEADERFILES kchashdb.h kcdirdb.h kctextdb.h kcpolydb.h kcdbext.h
kclangc.h"
- MYLIBRARYFILES="libkyotocabinet.a"
---- kyotocabinet-1.2.76/kccommon.h 2012-05-24 18:27:59.000000000 +0200
-+++ kyotocabinet-1.2.76/kccommon.h.tr1_hashtable 2013-03-01 00:09:59.000000000 +0100
-@@ -44,7 +44,7 @@
- #include <typeinfo>
-
- #include <utility>
--#include <functional>
-+#include <kcfunctional.h>
- #include <memory>
- #include <iterator>
- #include <algorithm>
---- kyotocabinet-1.2.76/kcfunctional.h 1970-01-01 01:00:00.000000000 +0100
-+++ kyotocabinet-1.2.76/kcfunctional.h.tr1_hashtable 2013-03-01 00:06:28.000000000 +0100
-@@ -0,0 +1,1282 @@
-+// TR1 functional header -*- C++ -*-
-+
-+// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library. This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 2, or (at your option)
-+// any later version.
-+
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-+// USA.
-+
-+// As a special exception, you may use this file as part of a free software
-+// library without restriction. Specifically, if other files instantiate
-+// templates or use macros or inline functions from this file, or you compile
-+// this file and link it with other files to produce an executable, this
-+// file does not by itself cause the resulting executable to be covered by
-+// the GNU General Public License. This exception does not however
-+// invalidate any other reasons why the executable file might be covered by
-+// the GNU General Public License.
-+
-+/** @file
-+ * This is a TR1 C++ Library header.
-+ */
-+
-+#ifndef _TR1_FUNCTIONAL
-+#define _TR1_FUNCTIONAL 1
-+
-+#pragma GCC system_header
-+
-+#include "../functional"
-+#include <typeinfo>
-+#include <tr1/type_traits>
-+#include <bits/cpp_type_traits.h>
-+#include <string> // for std::tr1::hash
-+#include <cstdlib> // for std::abort
-+#include <cmath> // for std::frexp
-+#include <tr1/tuple>
-+
-+namespace std
-+{
-+namespace tr1
-+{
-+ template<typename _MemberPointer>
-+ class _Mem_fn;
-+
-+ /**
-+ * @if maint
-+ * Actual implementation of _Has_result_type, which uses SFINAE to
-+ * determine if the type _Tp has a publicly-accessible member type
-+ * result_type.
-+ * @endif
-+ */
-+ template<typename _Tp>
-+ class _Has_result_type_helper : __sfinae_types
-+ {
-+ template<typename _Up>
-+ struct _Wrap_type
-+ { };
-+
-+ template<typename _Up>
-+ static __one __test(_Wrap_type<typename _Up::result_type>*);
-+
-+ template<typename _Up>
-+ static __two __test(...);
-+
-+ public:
-+ static const bool value = sizeof(__test<_Tp>(0)) == 1;
-+ };
-+
-+ template<typename _Tp>
-+ struct _Has_result_type
-+ : integral_constant<
-+ bool,
-+ _Has_result_type_helper<typename
remove_cv<_Tp>::type>::value>
-+ { };
-+
-+ /**
-+ * @if maint
-+ * If we have found a result_type, extract it.
-+ * @endif
-+ */
-+ template<bool _Has_result_type, typename _Functor>
-+ struct _Maybe_get_result_type
-+ { };
-+
-+ template<typename _Functor>
-+ struct _Maybe_get_result_type<true, _Functor>
-+ {
-+ typedef typename _Functor::result_type result_type;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Base class for any function object that has a weak result type, as
-+ * defined in 3.3/3 of TR1.
-+ * @endif
-+ */
-+ template<typename _Functor>
-+ struct _Weak_result_type_impl
-+ : _Maybe_get_result_type<_Has_result_type<_Functor>::value, _Functor>
-+ {
-+ };
-+
-+ /**
-+ * @if maint
-+ * Strip top-level cv-qualifiers from the function object and let
-+ * _Weak_result_type_impl perform the real work.
-+ * @endif
-+ */
-+ template<typename _Functor>
-+ struct _Weak_result_type
-+ : _Weak_result_type_impl<typename remove_cv<_Functor>::type>
-+ {
-+ };
-+
-+ template<typename _Signature>
-+ class result_of;
-+
-+ /**
-+ * @if maint
-+ * Actual implementation of result_of. When _Has_result_type is
-+ * true, gets its result from _Weak_result_type. Otherwise, uses
-+ * the function object's member template result to extract the
-+ * result type.
-+ * @endif
-+ */
-+ template<bool _Has_result_type, typename _Signature>
-+ struct _Result_of_impl;
-+
-+ // Handle member data pointers using _Mem_fn's logic
-+ template<typename _Res, typename _Class, typename _T1>
-+ struct _Result_of_impl<false, _Res _Class::*(_T1)>
-+ {
-+ typedef typename _Mem_fn<_Res _Class::*>
-+ ::template _Result_type<_T1>::type type;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Determines if the type _Tp derives from unary_function.
-+ * @endif
-+ */
-+ template<typename _Tp>
-+ struct _Derives_from_unary_function : __sfinae_types
-+ {
-+ private:
-+ template<typename _T1, typename _Res>
-+ static __one __test(const volatile unary_function<_T1, _Res>*);
-+
-+ // It's tempting to change "..." to const volatile void*, but
-+ // that fails when _Tp is a function type.
-+ static __two __test(...);
-+
-+ public:
-+ static const bool value = sizeof(__test((_Tp*)0)) == 1;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Determines if the type _Tp derives from binary_function.
-+ * @endif
-+ */
-+ template<typename _Tp>
-+ struct _Derives_from_binary_function : __sfinae_types
-+ {
-+ private:
-+ template<typename _T1, typename _T2, typename _Res>
-+ static __one __test(const volatile binary_function<_T1, _T2, _Res>*);
-+
-+ // It's tempting to change "..." to const volatile void*, but
-+ // that fails when _Tp is a function type.
-+ static __two __test(...);
-+
-+ public:
-+ static const bool value = sizeof(__test((_Tp*)0)) == 1;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Turns a function type into a function pointer type
-+ * @endif
-+ */
-+ template<typename _Tp, bool _IsFunctionType = is_function<_Tp>::value>
-+ struct _Function_to_function_pointer
-+ {
-+ typedef _Tp type;
-+ };
-+
-+ template<typename _Tp>
-+ struct _Function_to_function_pointer<_Tp, true>
-+ {
-+ typedef _Tp* type;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Knowing which of unary_function and binary_function _Tp derives
-+ * from, derives from the same and ensures that reference_wrapper
-+ * will have a weak result type. See cases below.
-+ * @endif
-+ */
-+ template<bool _Unary, bool _Binary, typename _Tp>
-+ struct _Reference_wrapper_base_impl;
-+
-+ // Not a unary_function or binary_function, so try a weak result type
-+ template<typename _Tp>
-+ struct _Reference_wrapper_base_impl<false, false, _Tp>
-+ : _Weak_result_type<_Tp>
-+ { };
-+
-+ // unary_function but not binary_function
-+ template<typename _Tp>
-+ struct _Reference_wrapper_base_impl<true, false, _Tp>
-+ : unary_function<typename _Tp::argument_type,
-+ typename _Tp::result_type>
-+ { };
-+
-+ // binary_function but not unary_function
-+ template<typename _Tp>
-+ struct _Reference_wrapper_base_impl<false, true, _Tp>
-+ : binary_function<typename _Tp::first_argument_type,
-+ typename _Tp::second_argument_type,
-+ typename _Tp::result_type>
-+ { };
-+
-+ // both unary_function and binary_function. import result_type to
-+ // avoid conflicts.
-+ template<typename _Tp>
-+ struct _Reference_wrapper_base_impl<true, true, _Tp>
-+ : unary_function<typename _Tp::argument_type,
-+ typename _Tp::result_type>,
-+ binary_function<typename _Tp::first_argument_type,
-+ typename _Tp::second_argument_type,
-+ typename _Tp::result_type>
-+ {
-+ typedef typename _Tp::result_type result_type;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Derives from unary_function or binary_function when it
-+ * can. Specializations handle all of the easy cases. The primary
-+ * template determines what to do with a class type, which may
-+ * derive from both unary_function and binary_function.
-+ * @endif
-+ */
-+ template<typename _Tp>
-+ struct _Reference_wrapper_base
-+ : _Reference_wrapper_base_impl<
-+ _Derives_from_unary_function<_Tp>::value,
-+ _Derives_from_binary_function<_Tp>::value,
-+ _Tp>
-+ { };
-+
-+ // - a function type (unary)
-+ template<typename _Res, typename _T1>
-+ struct _Reference_wrapper_base<_Res(_T1)>
-+ : unary_function<_T1, _Res>
-+ { };
-+
-+ // - a function type (binary)
-+ template<typename _Res, typename _T1, typename _T2>
-+ struct _Reference_wrapper_base<_Res(_T1, _T2)>
-+ : binary_function<_T1, _T2, _Res>
-+ { };
-+
-+ // - a function pointer type (unary)
-+ template<typename _Res, typename _T1>
-+ struct _Reference_wrapper_base<_Res(*)(_T1)>
-+ : unary_function<_T1, _Res>
-+ { };
-+
-+ // - a function pointer type (binary)
-+ template<typename _Res, typename _T1, typename _T2>
-+ struct _Reference_wrapper_base<_Res(*)(_T1, _T2)>
-+ : binary_function<_T1, _T2, _Res>
-+ { };
-+
-+ // - a pointer to member function type (unary, no qualifiers)
-+ template<typename _Res, typename _T1>
-+ struct _Reference_wrapper_base<_Res (_T1::*)()>
-+ : unary_function<_T1*, _Res>
-+ { };
-+
-+ // - a pointer to member function type (binary, no qualifiers)
-+ template<typename _Res, typename _T1, typename _T2>
-+ struct _Reference_wrapper_base<_Res (_T1::*)(_T2)>
-+ : binary_function<_T1*, _T2, _Res>
-+ { };
-+
-+ // - a pointer to member function type (unary, const)
-+ template<typename _Res, typename _T1>
-+ struct _Reference_wrapper_base<_Res (_T1::*)() const>
-+ : unary_function<const _T1*, _Res>
-+ { };
-+
-+ // - a pointer to member function type (binary, const)
-+ template<typename _Res, typename _T1, typename _T2>
-+ struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const>
-+ : binary_function<const _T1*, _T2, _Res>
-+ { };
-+
-+ // - a pointer to member function type (unary, volatile)
-+ template<typename _Res, typename _T1>
-+ struct _Reference_wrapper_base<_Res (_T1::*)() volatile>
-+ : unary_function<volatile _T1*, _Res>
-+ { };
-+
-+ // - a pointer to member function type (binary, volatile)
-+ template<typename _Res, typename _T1, typename _T2>
-+ struct _Reference_wrapper_base<_Res (_T1::*)(_T2) volatile>
-+ : binary_function<volatile _T1*, _T2, _Res>
-+ { };
-+
-+ // - a pointer to member function type (unary, const volatile)
-+ template<typename _Res, typename _T1>
-+ struct _Reference_wrapper_base<_Res (_T1::*)() const volatile>
-+ : unary_function<const volatile _T1*, _Res>
-+ { };
-+
-+ // - a pointer to member function type (binary, const volatile)
-+ template<typename _Res, typename _T1, typename _T2>
-+ struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const volatile>
-+ : binary_function<const volatile _T1*, _T2, _Res>
-+ { };
-+
-+ template<typename _Tp>
-+ class reference_wrapper
-+ : public _Reference_wrapper_base<typename remove_cv<_Tp>::type>
-+ {
-+ // If _Tp is a function type, we can't form result_of<_Tp(...)>,
-+ // so turn it into a function pointer type.
-+ typedef typename _Function_to_function_pointer<_Tp>::type
-+ _M_func_type;
-+
-+ _Tp* _M_data;
-+ public:
-+ typedef _Tp type;
-+ explicit reference_wrapper(_Tp& __indata): _M_data(&__indata)
-+ { }
-+
-+ reference_wrapper(const reference_wrapper<_Tp>& __inref):
-+ _M_data(__inref._M_data)
-+ { }
-+
-+ reference_wrapper&
-+ operator=(const reference_wrapper<_Tp>& __inref)
-+ {
-+ _M_data = __inref._M_data;
-+ return *this;
-+ }
-+
-+ operator _Tp&() const
-+ { return this->get(); }
-+
-+ _Tp&
-+ get() const
-+ { return *_M_data; }
-+
-+#define _GLIBCXX_REPEAT_HEADER <tr1/ref_wrap_iterate.h>
-+#include <tr1/repeat.h>
-+#undef _GLIBCXX_REPEAT_HEADER
-+ };
-+
-+
-+ // Denotes a reference should be taken to a variable.
-+ template<typename _Tp>
-+ inline reference_wrapper<_Tp>
-+ ref(_Tp& __t)
-+ { return reference_wrapper<_Tp>(__t); }
-+
-+ // Denotes a const reference should be taken to a variable.
-+ template<typename _Tp>
-+ inline reference_wrapper<const _Tp>
-+ cref(const _Tp& __t)
-+ { return reference_wrapper<const _Tp>(__t); }
-+
-+ template<typename _Tp>
-+ inline reference_wrapper<_Tp>
-+ ref(reference_wrapper<_Tp> __t)
-+ { return ref(__t.get()); }
-+
-+ template<typename _Tp>
-+ inline reference_wrapper<const _Tp>
-+ cref(reference_wrapper<_Tp> __t)
-+ { return cref(__t.get()); }
-+
-+ template<typename _Tp, bool>
-+ struct _Mem_fn_const_or_non
-+ {
-+ typedef const _Tp& type;
-+ };
-+
-+ template<typename _Tp>
-+ struct _Mem_fn_const_or_non<_Tp, false>
-+ {
-+ typedef _Tp& type;
-+ };
-+
-+ template<typename _Res, typename _Class>
-+ class _Mem_fn<_Res _Class::*>
-+ {
-+ // This bit of genius is due to Peter Dimov, improved slightly by
-+ // Douglas Gregor.
-+ template<typename _Tp>
-+ _Res&
-+ _M_call(_Tp& __object, _Class *) const
-+ { return __object.*__pm; }
-+
-+ template<typename _Tp, typename _Up>
-+ _Res&
-+ _M_call(_Tp& __object, _Up * const *) const
-+ { return (*__object).*__pm; }
-+
-+ template<typename _Tp, typename _Up>
-+ const _Res&
-+ _M_call(_Tp& __object, const _Up * const *) const
-+ { return (*__object).*__pm; }
-+
-+ template<typename _Tp>
-+ const _Res&
-+ _M_call(_Tp& __object, const _Class *) const
-+ { return __object.*__pm; }
-+
-+ template<typename _Tp>
-+ const _Res&
-+ _M_call(_Tp& __ptr, const volatile void*) const
-+ { return (*__ptr).*__pm; }
-+
-+ template<typename _Tp> static _Tp& __get_ref();
-+
-+ template<typename _Tp>
-+ static __sfinae_types::__one __check_const(_Tp&, _Class*);
-+ template<typename _Tp, typename _Up>
-+ static __sfinae_types::__one __check_const(_Tp&, _Up * const *);
-+ template<typename _Tp, typename _Up>
-+ static __sfinae_types::__two __check_const(_Tp&, const _Up * const *);
-+ template<typename _Tp>
-+ static __sfinae_types::__two __check_const(_Tp&, const _Class*);
-+ template<typename _Tp>
-+ static __sfinae_types::__two __check_const(_Tp&, const volatile void*);
-+
-+ public:
-+ template<typename _Tp>
-+ struct _Result_type
-+ : _Mem_fn_const_or_non<
-+ _Res,
-+ (sizeof(__sfinae_types::__two)
-+ == sizeof(__check_const<_Tp>(__get_ref<_Tp>(), (_Tp*)0)))>
-+ { };
-+
-+ template<typename _Signature>
-+ struct result;
-+
-+ template<typename _CVMem, typename _Tp>
-+ struct result<_CVMem(_Tp)>
-+ : public _Result_type<_Tp> { };
-+
-+ template<typename _CVMem, typename _Tp>
-+ struct result<_CVMem(_Tp&)>
-+ : public _Result_type<_Tp> { };
-+
-+ explicit _Mem_fn(_Res _Class::*__pm) : __pm(__pm) { }
-+
-+ // Handle objects
-+ _Res& operator()(_Class& __object) const
-+ { return __object.*__pm; }
-+
-+ const _Res& operator()(const _Class& __object) const
-+ { return __object.*__pm; }
-+
-+ // Handle pointers
-+ _Res& operator()(_Class* __object) const
-+ { return __object->*__pm; }
-+
-+ const _Res&
-+ operator()(const _Class* __object) const
-+ { return __object->*__pm; }
-+
-+ // Handle smart pointers and derived
-+ template<typename _Tp>
-+ typename _Result_type<_Tp>::type
-+ operator()(_Tp& __unknown) const
-+ { return _M_call(__unknown, &__unknown); }
-+
-+ private:
-+ _Res _Class::*__pm;
-+ };
-+
-+ /**
-+ * @brief Returns a function object that forwards to the member
-+ * pointer @a pm.
-+ */
-+ template<typename _Tp, typename _Class>
-+ inline _Mem_fn<_Tp _Class::*>
-+ mem_fn(_Tp _Class::* __pm)
-+ {
-+ return _Mem_fn<_Tp _Class::*>(__pm);
-+ }
-+
-+ /**
-+ * @brief Determines if the given type _Tp is a function object
-+ * should be treated as a subexpression when evaluating calls to
-+ * function objects returned by bind(). [TR1 3.6.1]
-+ */
-+ template<typename _Tp>
-+ struct is_bind_expression
-+ {
-+ static const bool value = false;
-+ };
-+
-+ /**
-+ * @brief Determines if the given type _Tp is a placeholder in a
-+ * bind() expression and, if so, which placeholder it is. [TR1 3.6.2]
-+ */
-+ template<typename _Tp>
-+ struct is_placeholder
-+ {
-+ static const int value = 0;
-+ };
-+
-+ /**
-+ * @if maint
-+ * The type of placeholder objects defined by libstdc++.
-+ * @endif
-+ */
-+ template<int _Num> struct _Placeholder { };
-+
-+ /**
-+ * @if maint
-+ * Partial specialization of is_placeholder that provides the placeholder
-+ * number for the placeholder objects defined by libstdc++.
-+ * @endif
-+ */
-+ template<int _Num>
-+ struct is_placeholder<_Placeholder<_Num> >
-+ {
-+ static const int value = _Num;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Maps an argument to bind() into an actual argument to the bound
-+ * function object [TR1 3.6.3/5]. Only the first parameter should
-+ * be specified: the rest are used to determine among the various
-+ * implementations. Note that, although this class is a function
-+ * object, isn't not entirely normal because it takes only two
-+ * parameters regardless of the number of parameters passed to the
-+ * bind expression. The first parameter is the bound argument and
-+ * the second parameter is a tuple containing references to the
-+ * rest of the arguments.
-+ * @endif
-+ */
-+ template<typename _Arg,
-+ bool _IsBindExp = is_bind_expression<_Arg>::value,
-+ bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)>
-+ class _Mu;
-+
-+ /**
-+ * @if maint
-+ * If the argument is reference_wrapper<_Tp>, returns the
-+ * underlying reference. [TR1 3.6.3/5 bullet 1]
-+ * @endif
-+ */
-+ template<typename _Tp>
-+ class _Mu<reference_wrapper<_Tp>, false, false>
-+ {
-+ public:
-+ typedef _Tp& result_type;
-+
-+ /* Note: This won't actually work for const volatile
-+ * reference_wrappers, because reference_wrapper::get() is const
-+ * but not volatile-qualified. This might be a defect in the TR.
-+ */
-+ template<typename _CVRef, typename _Tuple>
-+ result_type
-+ operator()(_CVRef& __arg, const _Tuple&) const volatile
-+ { return __arg.get(); }
-+ };
-+
-+ /**
-+ * @if maint
-+ * If the argument is a bind expression, we invoke the underlying
-+ * function object with the same cv-qualifiers as we are given and
-+ * pass along all of our arguments (unwrapped). [TR1 3.6.3/5 bullet 2]
-+ * @endif
-+ */
-+ template<typename _Arg>
-+ class _Mu<_Arg, true, false>
-+ {
-+ public:
-+ template<typename _Signature> class result;
-+
-+#define _GLIBCXX_REPEAT_HEADER <tr1/mu_iterate.h>
-+# include <tr1/repeat.h>
-+#undef _GLIBCXX_REPEAT_HEADER
-+ };
-+
-+ /**
-+ * @if maint
-+ * If the argument is a placeholder for the Nth argument, returns
-+ * a reference to the Nth argument to the bind function object.
-+ * [TR1 3.6.3/5 bullet 3]
-+ * @endif
-+ */
-+ template<typename _Arg>
-+ class _Mu<_Arg, false, true>
-+ {
-+ public:
-+ template<typename _Signature> class result;
-+
-+ template<typename _CVMu, typename _CVArg, typename _Tuple>
-+ class result<_CVMu(_CVArg, _Tuple)>
-+ {
-+ // Add a reference, if it hasn't already been done for us.
-+ // This allows us to be a little bit sloppy in constructing
-+ // the tuple that we pass to result_of<...>.
-+ typedef typename tuple_element<(is_placeholder<_Arg>::value - 1),
-+ _Tuple>::type __base_type;
-+
-+ public:
-+ typedef typename add_reference<__base_type>::type type;
-+ };
-+
-+ template<typename _Tuple>
-+ typename result<_Mu(_Arg, _Tuple)>::type
-+ operator()(const volatile _Arg&, const _Tuple& __tuple) const volatile
-+ {
-+ return ::std::tr1::get<(is_placeholder<_Arg>::value - 1)>(__tuple);
-+ }
-+ };
-+
-+ /**
-+ * @if maint
-+ * If the argument is just a value, returns a reference to that
-+ * value. The cv-qualifiers on the reference are the same as the
-+ * cv-qualifiers on the _Mu object. [TR1 3.6.3/5 bullet 4]
-+ * @endif
-+ */
-+ template<typename _Arg>
-+ class _Mu<_Arg, false, false>
-+ {
-+ public:
-+ template<typename _Signature> struct result;
-+
-+ template<typename _CVMu, typename _CVArg, typename _Tuple>
-+ struct result<_CVMu(_CVArg, _Tuple)>
-+ {
-+ typedef typename add_reference<_CVArg>::type type;
-+ };
-+
-+ // Pick up the cv-qualifiers of the argument
-+ template<typename _CVArg, typename _Tuple>
-+ _CVArg& operator()(_CVArg& __arg, const _Tuple&) const volatile
-+ { return __arg; }
-+ };
-+
-+ /**
-+ * @if maint
-+ * Maps member pointers into instances of _Mem_fn but leaves all
-+ * other function objects untouched. Used by tr1::bind(). The
-+ * primary template handles the non--member-pointer case.
-+ * @endif
-+ */
-+ template<typename _Tp>
-+ struct _Maybe_wrap_member_pointer
-+ {
-+ typedef _Tp type;
-+ static const _Tp& __do_wrap(const _Tp& __x) { return __x; }
-+ };
-+
-+ /**
-+ * @if maint
-+ * Maps member pointers into instances of _Mem_fn but leaves all
-+ * other function objects untouched. Used by tr1::bind(). This
-+ * partial specialization handles the member pointer case.
-+ * @endif
-+ */
-+ template<typename _Tp, typename _Class>
-+ struct _Maybe_wrap_member_pointer<_Tp _Class::*>
-+ {
-+ typedef _Mem_fn<_Tp _Class::*> type;
-+ static type __do_wrap(_Tp _Class::* __pm) { return type(__pm); }
-+ };
-+
-+ /**
-+ * @if maint
-+ * Type of the function object returned from bind().
-+ * @endif
-+ */
-+ template<typename _Signature>
-+ struct _Bind;
-+
-+ /**
-+ * @if maint
-+ * Type of the function object returned from bind<R>().
-+ * @endif
-+ */
-+ template<typename _Result, typename _Signature>
-+ struct _Bind_result;
-+
-+ /**
-+ * @if maint
-+ * Class template _Bind is always a bind expression.
-+ * @endif
-+ */
-+ template<typename _Signature>
-+ struct is_bind_expression<_Bind<_Signature> >
-+ {
-+ static const bool value = true;
-+ };
-+
-+ /**
-+ * @if maint
-+ * Class template _Bind_result is always a bind expression.
-+ * @endif
-+ */
-+ template<typename _Result, typename _Signature>
-+ struct is_bind_expression<_Bind_result<_Result, _Signature> >
-+ {
-+ static const bool value = true;
-+ };
-+
-+ /**
-+ * @brief Exception class thrown when class template function's
-+ * operator() is called with an empty target.
-+ *
-+ */
-+ class bad_function_call : public std::exception { };
-+
-+ /**
-+ * @if maint
-+ * The integral constant expression 0 can be converted into a
-+ * pointer to this type. It is used by the function template to
-+ * accept NULL pointers.
-+ * @endif
-+ */
-+ struct _M_clear_type;
-+
-+ /**
-+ * @if maint
-+ * Trait identifying "location-invariant" types, meaning that the
-+ * address of the object (or any of its members) will not escape.
-+ * Also implies a trivial copy constructor and assignment operator.
-+ * @endif
-+ */
-+ template<typename _Tp>
-+ struct __is_location_invariant
-+ : integral_constant<bool,
-+ (is_pointer<_Tp>::value
-+ || is_member_pointer<_Tp>::value)>
-+ {
-+ };
-+
-+ class _Undefined_class;
-+
-+ union _Nocopy_types
-+ {
-+ void* _M_object;
-+ const void* _M_const_object;
-+ void (*_M_function_pointer)();
-+ void (_Undefined_class::*_M_member_pointer)();
-+ };
-+
-+ union _Any_data {
-+ void* _M_access() { return &_M_pod_data[0]; }
-+ const void* _M_access() const { return &_M_pod_data[0]; }
-+
-+ template<typename _Tp> _Tp& _M_access()
-+ { return *static_cast<_Tp*>(_M_access()); }
-+
-+ template<typename _Tp> const _Tp& _M_access() const
-+ { return *static_cast<const _Tp*>(_M_access()); }
-+
-+ _Nocopy_types _M_unused;
-+ char _M_pod_data[sizeof(_Nocopy_types)];
-+ };
-+
-+ enum _Manager_operation
-+ {
-+ __get_type_info,
-+ __get_functor_ptr,
-+ __clone_functor,
-+ __destroy_functor
-+ };
-+
-+ /* Simple type wrapper that helps avoid annoying const problems
-+ when casting between void pointers and pointers-to-pointers. */
-+ template<typename _Tp>
-+ struct _Simple_type_wrapper
-+ {
-+ _Simple_type_wrapper(_Tp __value) : __value(__value) { }
-+
-+ _Tp __value;
-+ };
-+
-+ template<typename _Tp>
-+ struct __is_location_invariant<_Simple_type_wrapper<_Tp> >
-+ : __is_location_invariant<_Tp>
-+ {
-+ };
-+
-+ // Converts a reference to a function object into a callable
-+ // function object.
-+ template<typename _Functor>
-+ inline _Functor& __callable_functor(_Functor& __f) { return __f; }
-+
-+ template<typename _Member, typename _Class>
-+ inline _Mem_fn<_Member _Class::*>
-+ __callable_functor(_Member _Class::* &__p)
-+ { return mem_fn(__p); }
-+
-+ template<typename _Member, typename _Class>
-+ inline _Mem_fn<_Member _Class::*>
-+ __callable_functor(_Member _Class::* const &__p)
-+ { return mem_fn(__p); }
-+
-+ template<typename _Signature, typename _Functor>
-+ class _Function_handler;
-+
-+ template<typename _Signature>
-+ class function;
-+
-+
-+ /**
-+ * @if maint
-+ * Base class of all polymorphic function object wrappers.
-+ * @endif
-+ */
-+ class _Function_base
-+ {
-+ public:
-+ static const std::size_t _M_max_size = sizeof(_Nocopy_types);
-+ static const std::size_t _M_max_align = __alignof__(_Nocopy_types);
-+
-+ template<typename _Functor>
-+ class _Base_manager
-+ {
-+ protected:
-+ static const bool __stored_locally =
-+ (__is_location_invariant<_Functor>::value
-+ && sizeof(_Functor) <= _M_max_size
-+ && __alignof__(_Functor) <= _M_max_align
-+ && (_M_max_align % __alignof__(_Functor) == 0));
-+ typedef integral_constant<bool, __stored_locally> _Local_storage;
-+
-+ // Retrieve a pointer to the function object
-+ static _Functor* _M_get_pointer(const _Any_data& __source)
-+ {
-+ const _Functor* __ptr =
-+ __stored_locally? &__source._M_access<_Functor>()
-+ /* have stored a pointer */ : __source._M_access<_Functor*>();
-+ return const_cast<_Functor*>(__ptr);
-+ }
-+
-+ // Clone a location-invariant function object that fits within
-+ // an _Any_data structure.
-+ static void
-+ _M_clone(_Any_data& __dest, const _Any_data& __source, true_type)
-+ {
-+ new (__dest._M_access()) _Functor(__source._M_access<_Functor>());
-+ }
-+
-+ // Clone a function object that is not location-invariant or
-+ // that cannot fit into an _Any_data structure.
-+ static void
-+ _M_clone(_Any_data& __dest, const _Any_data& __source, false_type)
-+ {
-+ __dest._M_access<_Functor*>() =
-+ new _Functor(*__source._M_access<_Functor*>());
-+ }
-+
-+ // Destroying a location-invariant object may still require
-+ // destruction.
-+ static void
-+ _M_destroy(_Any_data& __victim, true_type)
-+ {
-+ __victim._M_access<_Functor>().~_Functor();
-+ }
-+
-+ // Destroying an object located on the heap.
-+ static void
-+ _M_destroy(_Any_data& __victim, false_type)
-+ {
-+ delete __victim._M_access<_Functor*>();
-+ }
-+
-+ public:
-+ static bool
-+ _M_manager(_Any_data& __dest, const _Any_data& __source,
-+ _Manager_operation __op)
-+ {
-+ switch (__op) {
-+ case __get_type_info:
-+ __dest._M_access<const type_info*>() = &typeid(_Functor);
-+ break;
-+
-+ case __get_functor_ptr:
-+ __dest._M_access<_Functor*>() = _M_get_pointer(__source);
-+ break;
-+
-+ case __clone_functor:
-+ _M_clone(__dest, __source, _Local_storage());
-+ break;
-+
-+ case __destroy_functor:
-+ _M_destroy(__dest, _Local_storage());
-+ break;
-+ }
-+ return false;
-+ }
-+
-+ static void
-+ _M_init_functor(_Any_data& __functor, const _Functor& __f)
-+ {
-+ _M_init_functor(__functor, __f, _Local_storage());
-+ }
-+
-+ template<typename _Signature>
-+ static bool
-+ _M_not_empty_function(const function<_Signature>& __f)
-+ {
-+ return __f;
-+ }
-+
-+ template<typename _Tp>
-+ static bool
-+ _M_not_empty_function(const _Tp*& __fp)
-+ {
-+ return __fp;
-+ }
-+
-+ template<typename _Class, typename _Tp>
-+ static bool
-+ _M_not_empty_function(_Tp _Class::* const& __mp)
-+ {
-+ return __mp;
-+ }
-+
-+ template<typename _Tp>
-+ static bool
-+ _M_not_empty_function(const _Tp&)
-+ {
-+ return true;
-+ }
-+
-+ private:
-+ static void
-+ _M_init_functor(_Any_data& __functor, const _Functor& __f, true_type)
-+ {
-+ new (__functor._M_access()) _Functor(__f);
-+ }
-+
-+ static void
-+ _M_init_functor(_Any_data& __functor, const _Functor& __f, false_type)
-+ {
-+ __functor._M_access<_Functor*>() = new _Functor(__f);
-+ }
-+ };
-+
-+ template<typename _Functor>
-+ class _Ref_manager : public _Base_manager<_Functor*>
-+ {
-+ typedef _Function_base::_Base_manager<_Functor*> _Base;
-+
-+ public:
-+ static bool
-+ _M_manager(_Any_data& __dest, const _Any_data& __source,
-+ _Manager_operation __op)
-+ {
-+ switch (__op) {
-+ case __get_type_info:
-+ __dest._M_access<const type_info*>() = &typeid(_Functor);
-+ break;
-+
-+ case __get_functor_ptr:
-+ __dest._M_access<_Functor*>() = *_Base::_M_get_pointer(__source);
-+ return is_const<_Functor>::value;
-+ break;
-+
-+ default:
-+ _Base::_M_manager(__dest, __source, __op);
-+ }
-+ return false;
-+ }
-+
-+ static void
-+ _M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f)
-+ {
-+ // TBD: Use address_of function instead
-+ _Base::_M_init_functor(__functor, &__f.get());
-+ }
-+ };
-+
-+ _Function_base() : _M_manager(0) { }
-+
-+ ~_Function_base()
-+ {
-+ if (_M_manager)
-+ {
-+ _M_manager(_M_functor, _M_functor, __destroy_functor);
-+ }
-+ }
-+
-+
-+ bool _M_empty() const { return !_M_manager; }
-+
-+ typedef bool (*_Manager_type)(_Any_data&, const _Any_data&,
-+ _Manager_operation);
-+
-+ _Any_data _M_functor;
-+ _Manager_type _M_manager;
-+ };
-+
-+ // [3.7.2.7] null pointer comparisons
-+
-+ /**
-+ * @brief Compares a polymorphic function object wrapper against 0
-+ * (the NULL pointer).
-+ * @returns @c true if the wrapper has no target, @c false otherwise
-+ *
-+ * This function will not throw an exception.
-+ */
-+ template<typename _Signature>
-+ inline bool
-+ operator==(const function<_Signature>& __f, _M_clear_type*)
-+ {
-+ return !__f;
-+ }
-+
-+ /**
-+ * @overload
-+ */
-+ template<typename _Signature>
-+ inline bool
-+ operator==(_M_clear_type*, const function<_Signature>& __f)
-+ {
-+ return !__f;
-+ }
-+
-+ /**
-+ * @brief Compares a polymorphic function object wrapper against 0
-+ * (the NULL pointer).
-+ * @returns @c false if the wrapper has no target, @c true otherwise
-+ *
-+ * This function will not throw an exception.
-+ */
-+ template<typename _Signature>
-+ inline bool
-+ operator!=(const function<_Signature>& __f, _M_clear_type*)
-+ {
-+ return __f;
-+ }
-+
-+ /**
-+ * @overload
-+ */
-+ template<typename _Signature>
-+ inline bool
-+ operator!=(_M_clear_type*, const function<_Signature>& __f)
-+ {
-+ return __f;
-+ }
-+
-+ // [3.7.2.8] specialized algorithms
-+
-+ /**
-+ * @brief Swap the targets of two polymorphic function object wrappers.
-+ *
-+ * This function will not throw an exception.
-+ */
-+ template<typename _Signature>
-+ inline void
-+ swap(function<_Signature>& __x, function<_Signature>& __y)
-+ {
-+ __x.swap(__y);
-+ }
-+
-+#define _GLIBCXX_JOIN(X,Y) _GLIBCXX_JOIN2( X , Y )
-+#define _GLIBCXX_JOIN2(X,Y) _GLIBCXX_JOIN3(X,Y)
-+#define _GLIBCXX_JOIN3(X,Y) X##Y
-+#define _GLIBCXX_REPEAT_HEADER <tr1/functional_iterate.h>
-+#include <tr1/repeat.h>
-+#undef _GLIBCXX_REPEAT_HEADER
-+#undef _GLIBCXX_JOIN3
-+#undef _GLIBCXX_JOIN2
-+#undef _GLIBCXX_JOIN
-+
-+ // Definition of default hash function std::tr1::hash<>. The types for
-+ // which std::tr1::hash<T> is defined is in clause 6.3.3. of the PDTR.
-+ template<typename T>
-+ struct hash;
-+
-+#define tr1_hashtable_define_trivial_hash(T) \
-+ template<> \
-+ struct hash<T> \
-+ : public std::unary_function<T, std::size_t> \
-+ { \
-+ std::size_t \
-+ operator()(T val) const \
-+ { return static_cast<std::size_t>(val); } \
-+ }
-+
-+ tr1_hashtable_define_trivial_hash(bool);
-+ tr1_hashtable_define_trivial_hash(char);
-+ tr1_hashtable_define_trivial_hash(signed char);
-+ tr1_hashtable_define_trivial_hash(unsigned char);
-+ tr1_hashtable_define_trivial_hash(wchar_t);
-+ tr1_hashtable_define_trivial_hash(short);
-+ tr1_hashtable_define_trivial_hash(int);
-+ tr1_hashtable_define_trivial_hash(long);
-+ tr1_hashtable_define_trivial_hash(unsigned short);
-+ tr1_hashtable_define_trivial_hash(unsigned int);
-+ tr1_hashtable_define_trivial_hash(unsigned long);
-+ tr1_hashtable_define_trivial_hash(long long);
-+ tr1_hashtable_define_trivial_hash(unsigned long long);
-+
-+#undef tr1_hashtable_define_trivial_hash
-+
-+ template<typename T>
-+ struct hash<T*>
-+ : public std::unary_function<T*, std::size_t>
-+ {
-+ std::size_t
-+ operator()(T* p) const
-+ { return reinterpret_cast<std::size_t>(p); }
-+ };
-+
-+ // Fowler / Noll / Vo (FNV) Hash (type FNV-1a)
-+ // (used by the next specializations of std::tr1::hash<>)
-+
-+ // Dummy generic implementation (for sizeof(size_t) != 4, 8).
-+ template<std::size_t = sizeof(std::size_t)>
-+ struct Fnv_hash
-+ {
-+ static std::size_t
-+ hash(const char* first, std::size_t length)
-+ {
-+ std::size_t result = 0;
-+ for (; length > 0; --length)
-+ result = (result * 131) + *first++;
-+ return result;
-+ }
-+ };
-+
-+ template<>
-+ struct Fnv_hash<4>
-+ {
-+ static std::size_t
-+ hash(const char* first, std::size_t length)
-+ {
-+ std::size_t result = static_cast<std::size_t>(2166136261UL);
-+ for (; length > 0; --length)
-+ {
-+ result ^= (std::size_t)*first++;
-+ result *= 16777619UL;
-+ }
-+ return result;
-+ }
-+ };
-+
-+ template<>
-+ struct Fnv_hash<8>
-+ {
-+ static std::size_t
-+ hash(const char* first, std::size_t length)
-+ {
-+ std::size_t result = static_cast<std::size_t>(14695981039346656037ULL);
-+ for (; length > 0; --length)
-+ {
-+ result ^= (std::size_t)*first++;
-+ result *= 1099511628211ULL;
-+ }
-+ return result;
-+ }
-+ };
-+
-+ // XXX String and floating point hashes probably shouldn't be inline
-+ // member functions, since are nontrivial. Once we have the framework
-+ // for TR1 .cc files, these should go in one.
-+ template<>
-+ struct hash<std::string>
-+ : public std::unary_function<std::string, std::size_t>
-+ {
-+ std::size_t
-+ operator()(const std::string& s) const
-+ { return Fnv_hash<>::hash(s.data(), s.length()); }
-+ };
-+
-+#ifdef _GLIBCXX_USE_WCHAR_T
-+ template<>
-+ struct hash<std::wstring>
-+ : public std::unary_function<std::wstring, std::size_t>
-+ {
-+ std::size_t
-+ operator()(const std::wstring& s) const
-+ {
-+ return Fnv_hash<>::hash(reinterpret_cast<const char*>(s.data()),
-+ s.length() * sizeof(wchar_t));
-+ }
-+ };
-+#endif
-+
-+ template<>
-+ struct hash<float>
-+ : public std::unary_function<float, std::size_t>
-+ {
-+ std::size_t
-+ operator()(float fval) const
-+ {
-+ std::size_t result = 0;
-+
-+ // 0 and -0 both hash to zero.
-+ if (fval != 0.0f)
-+ result = Fnv_hash<>::hash(reinterpret_cast<const char*>(&fval),
-+ sizeof(fval));
-+ return result;
-+ }
-+ };
-+
-+ template<>
-+ struct hash<double>
-+ : public std::unary_function<double, std::size_t>
-+ {
-+ std::size_t
-+ operator()(double dval) const
-+ {
-+ std::size_t result = 0;
-+
-+ // 0 and -0 both hash to zero.
-+ if (dval != 0.0)
-+ result = Fnv_hash<>::hash(reinterpret_cast<const char*>(&dval),
-+ sizeof(dval));
-+ return result;
-+ }
-+ };
-+
-+ // For long double, careful with random padding bits (e.g., on x86,
-+ // 10 bytes -> 12 bytes) and resort to frexp.
-+ template<>
-+ struct hash<long double>
-+ : public std::unary_function<long double, std::size_t>
-+ {
-+ std::size_t
-+ operator()(long double ldval) const
-+ {
-+ std::size_t result = 0;
-+
-+ int exponent;
-+ ldval = std::frexp(ldval, &exponent);
-+ ldval = ldval < 0.0l ? -(ldval + 0.5l) : ldval;
-+
-+ const long double mult = std::numeric_limits<std::size_t>::max() + 1.0l;
-+ ldval *= mult;
-+
-+ // Try to use all the bits of the mantissa (really necessary only
-+ // on 32-bit targets, at least for 80-bit floating point formats).
-+ const std::size_t hibits = (std::size_t)ldval;
-+ ldval = (ldval - (long double)hibits) * mult;
-+
-+ const std::size_t coeff =
-+ (std::numeric_limits<std::size_t>::max()
-+ / std::numeric_limits<long double>::max_exponent);
-+
-+ result = hibits + (std::size_t)ldval + coeff * exponent;
-+
-+ return result;
-+ }
-+ };
-+}
-+}
-+
-+#endif
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 25ea0a3..11f1c4e 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -8,8 +8,7 @@ URL:
http://fallabs.com/%{name}/
Source:
http://fallabs.com/%{name}/pkg/%{name}-%{version}.tar.gz
Patch0: kyotocabinet-1.2.76-cflags.patch
Patch1: kyotocabinet-1.2.76-8-byte-atomics.patch
-Patch2: kyotocabinet-1.2.76-tr1_hashtable.patch
-Patch3: kyotocabinet-1.2.76-gcc6.patch
+Patch2: kyotocabinet-1.2.76-gcc6.patch
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
BuildRequires: gcc-c++, zlib-devel, lzo-devel, xz-devel
@@ -45,9 +44,7 @@ developing applications that use Kyoto Cabinet.
%package apidocs
Summary: API documentation for Kyoto Cabinet library
Group: Documentation
-%if 0%{?fedora}%{?rhel} >= 6
BuildArch: noarch
-%endif
Provides: %{name}-api-doc = %{version}-%{release}
Obsoletes: %{name}-api-doc < 1.2.76-3
@@ -59,10 +56,7 @@ applications that use Kyoto Cabinet.
%setup -q
%patch0 -p1 -b .cflags
%patch1 -p1 -b .8-byte-atomics
-%if 0%{?rhel} == 5
-%patch2 -p1 -b .tr1_hashtable
-%endif
-%patch3 -p1 -b .gcc6
+%patch2 -p1 -b .gcc6
%build
%configure --disable-opt --enable-lzo --enable-lzma
@@ -78,12 +72,6 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/libkyotocabinet.a
rm -rf $RPM_BUILD_ROOT%{_defaultdocdir}
%check
-# All kcutilmgr compression tests on RHEL 5 (ppc) just cause 99.9% CPU
-# usage but do not continue or simply fail. However all the other tests
-# including compression ones work as expected. What is the impact here?
-%if 0%{?rhel} == 5 && "%{_arch}" == "ppc"
-sed -e '/$(RUNENV) $(RUNCMD) .\/kcutilmgr comp /d' -i Makefile
-%endif
make check
%post libs -p /sbin/ldconfig
@@ -142,9 +130,6 @@ make check
%{_includedir}/kcdbext.h
%{_includedir}/kcdirdb.h
%{_includedir}/kcfile.h
-%if 0%{?rhel} == 5
-%{_includedir}/kcfunctional.h
-%endif
%{_includedir}/kchashdb.h
%{_includedir}/kclangc.h
%{_includedir}/kcmap.h
commit 13ed0b58355859bef87bfe8420197c3a59421586
Author: Robert Scheck <robert(a)fedoraproject.org>
Date: Sun Jul 15 15:17:31 2018 +0200
Replace "BuildRequires: gcc" by "BuildRequires: gcc-c++"
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index d56ac5c..25ea0a3 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -11,8 +11,7 @@ Patch1: kyotocabinet-1.2.76-8-byte-atomics.patch
Patch2: kyotocabinet-1.2.76-tr1_hashtable.patch
Patch3: kyotocabinet-1.2.76-gcc6.patch
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
-BuildRequires: gcc
-BuildRequires: zlib-devel, lzo-devel, xz-devel
+BuildRequires: gcc-c++, zlib-devel, lzo-devel, xz-devel
%description
Kyoto Cabinet is a library of routines for managing a database. The
@@ -70,7 +69,6 @@ applications that use Kyoto Cabinet.
make %{?_smp_mflags}
%install
-rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT INSTALL='install -p' install
# Don't install any static .a file
commit 31421928231c95d146f762a1af7906ba889e88ec
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 13 07:30:30 2018 +0000
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index d357448..d56ac5c 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -1,7 +1,7 @@
Summary: A straightforward implementation of DBM
Name: kyotocabinet
Version: 1.2.76
-Release: 17%{?dist}
+Release: 18%{?dist}
License: GPLv3
Group: Applications/Databases
URL:
http://fallabs.com/%{name}/
@@ -165,6 +165,9 @@ make check
%doc COPYING doc/api/* kyotocabinet.idl
%changelog
+* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> -
1.2.76-18
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
* Wed Mar 07 2018 Adam Williamson <awilliam(a)redhat.com> - 1.2.76-17
- Rebuild to fix GCC 8 mis-compilation
See
https://da.gd/YJVwk ("GCC 8 ABI change on x86_64")
commit 625de009bdcc372254020aae5287d9f38d210a3d
Author: Jason Tibbitts <tibbs(a)math.uh.edu>
Date: Tue Jul 10 01:33:41 2018 -0500
Remove needless use of %defattr
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 0b10e93..d357448 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -93,7 +93,6 @@ make check
%postun libs -p /sbin/ldconfig
%files
-%defattr(-,root,root,-)
%doc doc/{command.html,common.css,icon16.png}
%{_bindir}/kccachetest
%{_bindir}/kcdirmgr
@@ -131,14 +130,12 @@ make check
%{_mandir}/man1/kcutiltest.1*
%files libs
-%defattr(-,root,root,-)
%{!?_licensedir:%global license %%doc}
%license COPYING FOSSEXCEPTION LINKEXCEPTION
%doc ChangeLog
%{_libdir}/libkyotocabinet.so.*
%files devel
-%defattr(-,root,root,-)
%{_includedir}/kccachedb.h
%{_includedir}/kccommon.h
%{_includedir}/kccompare.h
@@ -165,7 +162,6 @@ make check
%{_libdir}/pkgconfig/kyotocabinet.pc
%files apidocs
-%defattr(-,root,root,-)
%doc COPYING doc/api/* kyotocabinet.idl
%changelog
commit b3072b6381c7117f0a5355707a119ed6f991c3b8
Author: Igor Gnatenko <ignatenko(a)redhat.com>
Date: Mon Jul 9 19:06:47 2018 +0200
add BuildRequires: gcc
Reference:
https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot
diff --git a/kyotocabinet.spec b/kyotocabinet.spec
index 353687a..0b10e93 100644
--- a/kyotocabinet.spec
+++ b/kyotocabinet.spec
@@ -11,6 +11,7 @@ Patch1: kyotocabinet-1.2.76-8-byte-atomics.patch
Patch2: kyotocabinet-1.2.76-tr1_hashtable.patch
Patch3: kyotocabinet-1.2.76-gcc6.patch
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+BuildRequires: gcc
BuildRequires: zlib-devel, lzo-devel, xz-devel
%description