diff options
Diffstat (limited to 'dev-cpp/sparsehash')
| -rw-r--r-- | dev-cpp/sparsehash/Manifest | 1 | ||||
| -rw-r--r-- | dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch | 71 | ||||
| -rw-r--r-- | dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch | 316 | ||||
| -rw-r--r-- | dev-cpp/sparsehash/metadata.xml | 9 | ||||
| -rw-r--r-- | dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild | 25 |
5 files changed, 422 insertions, 0 deletions
diff --git a/dev-cpp/sparsehash/Manifest b/dev-cpp/sparsehash/Manifest new file mode 100644 index 000000000000..599137f008da --- /dev/null +++ b/dev-cpp/sparsehash/Manifest @@ -0,0 +1 @@ +DIST sparsehash-2.0.4.tar.gz 323154 BLAKE2B 8e0da89a6ae684271293f048092d6c79d14818f7ab9d4fa449414b3354f9e7769d9b0cc724227c47a1be7c7357cdac5cf6f3873047a08c8f085cc457858a8826 SHA512 40c007bc5814dd5f2bdacd5ec884bc5424f7126f182d4c7b34371f88b674456fc193b947fdd283dbd0c7eb044d8f06baf8caec6c93e73b1b587282b9026ea877 diff --git a/dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch b/dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch new file mode 100644 index 000000000000..237719c3b9f3 --- /dev/null +++ b/dev-cpp/sparsehash/files/sparsehash-2.0.3-fix-buildsystem.patch @@ -0,0 +1,71 @@ +* Do not override $(docdir) as part of the GNU conventions +* Do not install 'COPYING' and 'INSTALL' +* Install html files using html_ prefix and not doc_ prefix +* Do not try to link against tcmalloc, the complexity of juggling + the options around isn't worth it +Bug: https://bugs.gentoo.org/show_bug.cgi?id=585968 + +--- a/configure.ac ++++ b/configure.ac +@@ -9,7 +9,7 @@ + # (for sanity checking) + AC_CONFIG_SRCDIR(README) + AM_INIT_AUTOMAKE([dist-zip]) +-AM_CONFIG_HEADER(src/config.h) ++AC_CONFIG_HEADERS([src/config.h]) + + # Checks for programs. + AC_PROG_CXX +@@ -28,23 +28,7 @@ + # These are 'only' needed for unittests + AC_CHECK_HEADERS(sys/resource.h unistd.h sys/time.h sys/utsname.h) + +-# If you have google-perftools installed, we can do a bit more testing. +-# We not only want to set HAVE_MALLOC_EXTENSION_H, we also want to set +-# a variable to let the Makefile to know to link in tcmalloc. + AC_LANG([C++]) +-AC_CHECK_HEADERS(google/malloc_extension.h, +- tcmalloc_libs=-ltcmalloc, +- tcmalloc_libs=) +-# On some systems, when linking in tcmalloc you also need to link in +-# pthread. That's a bug somewhere, but we'll work around it for now. +-tcmalloc_flags="" +-if test -n "$tcmalloc_libs"; then +- ACX_PTHREAD +- tcmalloc_flags="\$(PTHREAD_CFLAGS)" +- tcmalloc_libs="$tcmalloc_libs \$(PTHREAD_LIBS)" +-fi +-AC_SUBST(tcmalloc_flags) +-AC_SUBST(tcmalloc_libs) + + # Figure out where hash_map lives and also hash_fun.h (or stl_hash_fun.h). + # This also tells us what namespace hash code lives in. +--- a/Makefile.am ++++ b/Makefile.am +@@ -11,12 +11,11 @@ + AM_CXXFLAGS = -Wall -W -Wwrite-strings -Woverloaded-virtual -Wshadow + endif + +-docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) + ## This is for HTML and other documentation you want to install. + ## Add your documentation files (in doc/) in addition to these boilerplate + ## Also add a TODO file if you have one +-dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README_windows.txt \ +- TODO \ ++dist_doc_DATA = AUTHORS ChangeLog NEWS README README_windows.txt TODO ++dist_html_DATA = \ + doc/dense_hash_map.html \ + doc/dense_hash_set.html \ + doc/sparse_hash_map.html \ +@@ -182,11 +181,6 @@ + $(sparsehashinclude_HEADERS) + nodist_time_hash_map_SOURCES = $(nodist_internalinclude_HEADERS) + +-# If tcmalloc is installed, use it with time_hash_map; it gives us +-# heap-usage statistics for the hash_map routines, which is very nice +-time_hash_map_CXXFLAGS = @tcmalloc_flags@ $(AM_CXXFLAGS) +-time_hash_map_LDFLAGS = @tcmalloc_flags@ +-time_hash_map_LDADD = @tcmalloc_libs@ + + ## ^^^^ END OF RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS + diff --git a/dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch b/dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch new file mode 100644 index 000000000000..776443d68c5e --- /dev/null +++ b/dev-cpp/sparsehash/files/sparsehash-2.0.4-c++20.patch @@ -0,0 +1,316 @@ +https://github.com/igorsugak/sparsehash/commit/6940fcaba9766735e48064b930690d67fc2f84ea +https://github.com/sparsehash/sparsehash/pull/165 +https://bugs.gentoo.org/967004 +C++20 removed many deprecated std::allocator members, causing sparsehash +to fail when it is built with -std=c++20. This implements most of +the uses of the removed members in terms of std::allocator_traits. + +There are no corresponding reference and const_reference members +in std::allocator_traits, in which case used the actual +value_type&/const value_type& instead. +From 6940fcaba9766735e48064b930690d67fc2f84ea Mon Sep 17 00:00:00 2001 +From: sugak <sugak@fb.com> +Date: Mon, 29 Nov 2021 18:01:19 -0800 +Subject: [PATCH] fix build with -std=c++20 + +--- + src/sparsehash/internal/densehashtable.h | 46 ++++++++++++--------- + src/sparsehash/internal/sparsehashtable.h | 50 +++++++++++++---------- + src/sparsehash/sparsetable | 37 +++++++++-------- + 3 files changed, 74 insertions(+), 59 deletions(-) + +diff --git a/src/sparsehash/internal/densehashtable.h b/src/sparsehash/internal/densehashtable.h +index cdf4ff6..79cecab 100644 +--- a/src/sparsehash/internal/densehashtable.h ++++ b/src/sparsehash/internal/densehashtable.h +@@ -149,7 +149,8 @@ struct dense_hashtable_const_iterator; + template <class V, class K, class HF, class ExK, class SetK, class EqK, class A> + struct dense_hashtable_iterator { + private: +- typedef typename A::template rebind<V>::other value_alloc_type; ++ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; + + public: + typedef dense_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator; +@@ -157,10 +158,10 @@ struct dense_hashtable_iterator { + + typedef std::forward_iterator_tag iterator_category; // very little defined! + typedef V value_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::reference reference; +- typedef typename value_alloc_type::pointer pointer; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef value_type& reference; ++ typedef typename value_alloc_traits::pointer pointer; + + // "Real" constructor and default constructor + dense_hashtable_iterator(const dense_hashtable<V,K,HF,ExK,SetK,EqK,A> *h, +@@ -202,7 +203,8 @@ struct dense_hashtable_iterator { + template <class V, class K, class HF, class ExK, class SetK, class EqK, class A> + struct dense_hashtable_const_iterator { + private: +- typedef typename A::template rebind<V>::other value_alloc_type; ++ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; + + public: + typedef dense_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator; +@@ -210,10 +212,10 @@ struct dense_hashtable_const_iterator { + + typedef std::forward_iterator_tag iterator_category; // very little defined! + typedef V value_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::const_reference reference; +- typedef typename value_alloc_type::const_pointer pointer; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef const value_type& reference; ++ typedef typename value_alloc_traits::const_pointer pointer; + + // "Real" constructor and default constructor + dense_hashtable_const_iterator( +@@ -259,7 +261,8 @@ template <class Value, class Key, class HashFcn, + class ExtractKey, class SetKey, class EqualKey, class Alloc> + class dense_hashtable { + private: +- typedef typename Alloc::template rebind<Value>::other value_alloc_type; ++ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<Value> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; + + public: + typedef Key key_type; +@@ -268,12 +271,12 @@ class dense_hashtable { + typedef EqualKey key_equal; + typedef Alloc allocator_type; + +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::reference reference; +- typedef typename value_alloc_type::const_reference const_reference; +- typedef typename value_alloc_type::pointer pointer; +- typedef typename value_alloc_type::const_pointer const_pointer; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef value_type& reference; ++ typedef const value_type& const_reference; ++ typedef typename value_alloc_traits::pointer pointer; ++ typedef typename value_alloc_traits::const_pointer const_pointer; + typedef dense_hashtable_iterator<Value, Key, HashFcn, + ExtractKey, SetKey, EqualKey, Alloc> + iterator; +@@ -518,7 +521,9 @@ class dense_hashtable { + // FUNCTIONS CONCERNING SIZE + public: + size_type size() const { return num_elements - num_deleted; } +- size_type max_size() const { return val_info.max_size(); } ++ size_type max_size() const { ++ return std::allocator_traits<ValInfo>::max_size(val_info); ++ } + bool empty() const { return size() == 0; } + size_type bucket_count() const { return num_buckets; } + size_type max_bucket_count() const { return max_size(); } +@@ -1170,8 +1175,9 @@ class dense_hashtable { + template <class A> + class alloc_impl : public A { + public: +- typedef typename A::pointer pointer; +- typedef typename A::size_type size_type; ++ typedef std::allocator_traits<A> alloc_traits; ++ typedef typename alloc_traits::pointer pointer; ++ typedef typename alloc_traits::size_type size_type; + + // Convert a normal allocator to one that has realloc_or_die() + alloc_impl(const A& a) : A(a) { } +diff --git a/src/sparsehash/internal/sparsehashtable.h b/src/sparsehash/internal/sparsehashtable.h +index f54ea51..1c71d6d 100644 +--- a/src/sparsehash/internal/sparsehashtable.h ++++ b/src/sparsehash/internal/sparsehashtable.h +@@ -160,7 +160,8 @@ struct sparse_hashtable_const_iterator; + template <class V, class K, class HF, class ExK, class SetK, class EqK, class A> + struct sparse_hashtable_iterator { + private: +- typedef typename A::template rebind<V>::other value_alloc_type; ++ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; + + public: + typedef sparse_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator; +@@ -170,10 +171,10 @@ struct sparse_hashtable_iterator { + + typedef std::forward_iterator_tag iterator_category; // very little defined! + typedef V value_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::reference reference; +- typedef typename value_alloc_type::pointer pointer; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef value_type& reference; ++ typedef typename value_alloc_traits::pointer pointer; + + // "Real" constructor and default constructor + sparse_hashtable_iterator(const sparse_hashtable<V,K,HF,ExK,SetK,EqK,A> *h, +@@ -212,7 +213,9 @@ struct sparse_hashtable_iterator { + template <class V, class K, class HF, class ExK, class SetK, class EqK, class A> + struct sparse_hashtable_const_iterator { + private: +- typedef typename A::template rebind<V>::other value_alloc_type; ++ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type; ++ typedef typename std::allocator_traits<value_alloc_type> value_alloc_traits; ++ + + public: + typedef sparse_hashtable_iterator<V,K,HF,ExK,SetK,EqK,A> iterator; +@@ -222,10 +225,10 @@ struct sparse_hashtable_const_iterator { + + typedef std::forward_iterator_tag iterator_category; // very little defined! + typedef V value_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::const_reference reference; +- typedef typename value_alloc_type::const_pointer pointer; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef const value_type& reference; ++ typedef typename value_alloc_traits::const_pointer pointer; + + // "Real" constructor and default constructor + sparse_hashtable_const_iterator(const sparse_hashtable<V,K,HF,ExK,SetK,EqK,A> *h, +@@ -267,7 +270,9 @@ struct sparse_hashtable_const_iterator { + template <class V, class K, class HF, class ExK, class SetK, class EqK, class A> + struct sparse_hashtable_destructive_iterator { + private: +- typedef typename A::template rebind<V>::other value_alloc_type; ++ typedef typename std::allocator_traits<A>::template rebind_alloc<V> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; ++ + + public: + typedef sparse_hashtable_destructive_iterator<V,K,HF,ExK,SetK,EqK,A> iterator; +@@ -276,10 +281,10 @@ struct sparse_hashtable_destructive_iterator { + + typedef std::forward_iterator_tag iterator_category; // very little defined! + typedef V value_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::reference reference; +- typedef typename value_alloc_type::pointer pointer; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef value_type& reference; ++ typedef typename value_alloc_traits::pointer pointer; + + // "Real" constructor and default constructor + sparse_hashtable_destructive_iterator(const +@@ -320,7 +325,8 @@ template <class Value, class Key, class HashFcn, + class ExtractKey, class SetKey, class EqualKey, class Alloc> + class sparse_hashtable { + private: +- typedef typename Alloc::template rebind<Value>::other value_alloc_type; ++ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<Value> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; + + public: + typedef Key key_type; +@@ -329,12 +335,12 @@ class sparse_hashtable { + typedef EqualKey key_equal; + typedef Alloc allocator_type; + +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::reference reference; +- typedef typename value_alloc_type::const_reference const_reference; +- typedef typename value_alloc_type::pointer pointer; +- typedef typename value_alloc_type::const_pointer const_pointer; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef value_type& reference; ++ typedef const value_type& const_reference; ++ typedef typename value_alloc_traits::pointer pointer; ++ typedef typename value_alloc_traits::const_pointer const_pointer; + typedef sparse_hashtable_iterator<Value, Key, HashFcn, ExtractKey, + SetKey, EqualKey, Alloc> + iterator; +diff --git a/src/sparsehash/sparsetable b/src/sparsehash/sparsetable +index 6259ebd..60c71dc 100644 +--- a/src/sparsehash/sparsetable ++++ b/src/sparsehash/sparsetable +@@ -802,16 +802,17 @@ class destructive_two_d_iterator { + template <class T, u_int16_t GROUP_SIZE, class Alloc> + class sparsegroup { + private: +- typedef typename Alloc::template rebind<T>::other value_alloc_type; ++ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<T> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; + + public: + // Basic types + typedef T value_type; + typedef Alloc allocator_type; +- typedef typename value_alloc_type::reference reference; +- typedef typename value_alloc_type::const_reference const_reference; +- typedef typename value_alloc_type::pointer pointer; +- typedef typename value_alloc_type::const_pointer const_pointer; ++ typedef value_type& reference; ++ typedef const value_type& const_reference; ++ typedef typename value_alloc_traits::pointer pointer; ++ typedef typename value_alloc_traits::const_pointer const_pointer; + + typedef table_iterator<sparsegroup<T, GROUP_SIZE, Alloc> > iterator; + typedef const_table_iterator<sparsegroup<T, GROUP_SIZE, Alloc> > +@@ -1289,8 +1290,9 @@ class sparsegroup { + template <class A> + class alloc_impl : public A { + public: +- typedef typename A::pointer pointer; +- typedef typename A::size_type size_type; ++ typedef std::allocator_traits<A> alloc_traits; ++ typedef typename alloc_traits::pointer pointer; ++ typedef typename alloc_traits::size_type size_type; + + // Convert a normal allocator to one that has realloc_or_die() + alloc_impl(const A& a) : A(a) { } +@@ -1362,20 +1364,21 @@ template <class T, u_int16_t GROUP_SIZE = DEFAULT_SPARSEGROUP_SIZE, + class Alloc = libc_allocator_with_realloc<T> > + class sparsetable { + private: +- typedef typename Alloc::template rebind<T>::other value_alloc_type; +- typedef typename Alloc::template rebind< +- sparsegroup<T, GROUP_SIZE, value_alloc_type> >::other vector_alloc; ++ typedef typename std::allocator_traits<Alloc>::template rebind_alloc<T> value_alloc_type; ++ typedef std::allocator_traits<value_alloc_type> value_alloc_traits; ++ typedef typename std::allocator_traits<Alloc>::template rebind_alloc< ++ sparsegroup<T, GROUP_SIZE, value_alloc_type> > vector_alloc; + + public: + // Basic types + typedef T value_type; // stolen from stl_vector.h + typedef Alloc allocator_type; +- typedef typename value_alloc_type::size_type size_type; +- typedef typename value_alloc_type::difference_type difference_type; +- typedef typename value_alloc_type::reference reference; +- typedef typename value_alloc_type::const_reference const_reference; +- typedef typename value_alloc_type::pointer pointer; +- typedef typename value_alloc_type::const_pointer const_pointer; ++ typedef typename value_alloc_traits::size_type size_type; ++ typedef typename value_alloc_traits::difference_type difference_type; ++ typedef value_type& reference; ++ typedef const value_type& const_reference; ++ typedef typename value_alloc_traits::pointer pointer; ++ typedef typename value_alloc_traits::const_pointer const_pointer; + typedef table_iterator<sparsetable<T, GROUP_SIZE, Alloc> > iterator; + typedef const_table_iterator<sparsetable<T, GROUP_SIZE, Alloc> > + const_iterator; +@@ -1446,7 +1449,7 @@ class sparsetable { + return destructive_iterator(groups.begin(), groups.end(), groups.end()); + } + +- typedef sparsegroup<value_type, GROUP_SIZE, allocator_type> group_type; ++ typedef sparsegroup<value_type, GROUP_SIZE, value_alloc_type> group_type; + typedef std::vector<group_type, vector_alloc > group_vector_type; + + typedef typename group_vector_type::reference GroupsReference; diff --git a/dev-cpp/sparsehash/metadata.xml b/dev-cpp/sparsehash/metadata.xml new file mode 100644 index 000000000000..3948687cb7fd --- /dev/null +++ b/dev-cpp/sparsehash/metadata.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>jsmolic@gentoo.org</email> + <name>Jakov Smolić</name> + </maintainer> + <origin>baldeagleos-repo</origin> +</pkgmetadata> diff --git a/dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild b/dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild new file mode 100644 index 000000000000..8266844f7b1b --- /dev/null +++ b/dev-cpp/sparsehash/sparsehash-2.0.4-r2.ebuild @@ -0,0 +1,25 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools + +DESCRIPTION="An extremely memory-efficient hash_map implementation" +HOMEPAGE="https://github.com/sparsehash/sparsehash" +SRC_URI="https://github.com/sparsehash/sparsehash/archive/${P}.tar.gz" +S="${WORKDIR}/${PN}-${P}" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="amd64 ~arm64 ~ppc64 x86" + +PATCHES=( + "${FILESDIR}/${PN}-2.0.3-fix-buildsystem.patch" + "${FILESDIR}/${P}-c++20.patch" +) + +src_prepare() { + default + eautoreconf +} |
