From 3c19df3b0bb6925e5dedb19b1de028dea8a98d26 Mon Sep 17 00:00:00 2001 From: Jeroen Roovers Date: Tue, 7 Jul 2020 23:20:43 +0200 Subject: net-libs/wvstreams: Add llvm patch Adapted from upstream commit 14f88faeccd9eaef8a9d4bd0e95b87745b8a54bb Package-Manager: Portage-2.3.103, Repoman-2.3.23 Bug: https://bugs.gentoo.org/731200 Signed-off-by: Jeroen Roovers --- .../wvstreams/files/wvstreams-4.6.1_p14-llvm.patch | 412 +++++++++++++++++++++ net-libs/wvstreams/wvstreams-4.6.1_p14-r1.ebuild | 1 + 2 files changed, 413 insertions(+) create mode 100644 net-libs/wvstreams/files/wvstreams-4.6.1_p14-llvm.patch (limited to 'net-libs/wvstreams') diff --git a/net-libs/wvstreams/files/wvstreams-4.6.1_p14-llvm.patch b/net-libs/wvstreams/files/wvstreams-4.6.1_p14-llvm.patch new file mode 100644 index 000000000000..156d198a440c --- /dev/null +++ b/net-libs/wvstreams/files/wvstreams-4.6.1_p14-llvm.patch @@ -0,0 +1,412 @@ +--- a/include/uniconf.h ++++ b/include/uniconf.h +@@ -434,7 +434,7 @@ + */ + class UniConf::Iter : public UniConf::IterBase + { +- UniConfGen::Iter *it; ++ IUniConfGen::Iter *it; + + public: + /** Creates an iterator over the direct children of a branch. */ +@@ -465,7 +465,7 @@ + */ + class UniConf::RecursiveIter : public UniConf::IterBase + { +- UniConfGen::Iter *it; ++ IUniConfGen::Iter *it; + + public: + /** Creates a recursive iterator over a branch. */ +--- a/include/uniconfgen.h ++++ b/include/uniconfgen.h +@@ -153,8 +153,50 @@ + */ + virtual bool haschildren(const UniConfKey &key) = 0; + +- /** The abstract iterator type (see below) */ +- class Iter; ++ /** ++ * An abstract iterator over keys and values in a generator. ++ * ++ * Unlike other WvStreams iterators, this one declares virtual methods so ++ * that UniConfGen implementations can supply the right behaviour ++ * through a common interface that does not depend on static typing. ++ * ++ * The precise traversal sequence is defined by the iterator implementation. ++ * ++ * The iterator need not support concurrent modifications of the underlying ++ * data structures. ++ * ++ * TODO: Consider changing this rule depending on observed usage patterns. ++ */ ++ class Iter ++ { ++ public: ++ /** Destroys the iterator. */ ++ virtual ~Iter() { } ++ ++ /** ++ * Rewinds the iterator. ++ * Must be called prior to the first invocation of next(). ++ */ ++ virtual void rewind() = 0; ++ ++ /** ++ * Seeks to the next element in the sequence. ++ * Returns true if that element exists. ++ * Must be called prior to the first invocation of key(). ++ */ ++ virtual bool next() = 0; ++ ++ /** Returns the current key. */ ++ virtual UniConfKey key() const = 0; ++ ++ /** ++ * Returns the value of the current key. You could just do a get(), ++ * but maybe your generator has a more efficient way. ++ */ ++ virtual WvString value() const = 0; ++ }; ++ ++ + + /** A concrete null iterator type (see below) */ + class NullIter; +@@ -214,7 +256,7 @@ + public: + /** Destroys the UniConfGen and may discard uncommitted data. */ + virtual ~UniConfGen(); +- ++ + /***** Notification API *****/ + + /** +@@ -300,70 +342,28 @@ + protected: + // A naive implementation of setv() that uses only set(). + void setv_naive(const UniConfPairList &pairs); +-}; +- +-DeclareWvList(IUniConfGen); +-DeclareWvList2(UniConfGenList, IUniConfGen); +- + +-/** +- * An abstract iterator over keys and values in a generator. +- * +- * Unlike other WvStreams iterators, this one declares virtual methods so +- * that UniConfGen implementations can supply the right behaviour +- * through a common interface that does not depend on static typing. +- * +- * The precise traversal sequence is defined by the iterator implementation. +- * +- * The iterator need not support concurrent modifications of the underlying +- * data structures. +- * +- * TODO: Consider changing this rule depending on observed usage patterns. +- */ +-class UniConfGen::Iter +-{ + public: +- /** Destroys the iterator. */ +- virtual ~Iter() { } +- +- /** +- * Rewinds the iterator. +- * Must be called prior to the first invocation of next(). +- */ +- virtual void rewind() = 0; +- + /** +- * Seeks to the next element in the sequence. +- * Returns true if that element exists. +- * Must be called prior to the first invocation of key(). +- */ +- virtual bool next() = 0; +- +- /** Returns the current key. */ +- virtual UniConfKey key() const = 0; +- +- /** +- * Returns the value of the current key. You could just do a get(), +- * but maybe your generator has a more efficient way. ++ * An iterator that's always empty. ++ * This is handy if you don't have anything good to iterate over. + */ +- virtual WvString value() const = 0; ++ class NullIter : public UniConfGen::Iter ++ { ++ public: ++ /***** Overridden members *****/ ++ ++ virtual void rewind() { } ++ virtual bool next() { return false; } ++ virtual UniConfKey key() const { return UniConfKey::EMPTY; } ++ virtual WvString value() const { return WvString(); } ++ }; + }; + ++DeclareWvList(IUniConfGen); ++DeclareWvList2(UniConfGenList, IUniConfGen); ++ + +-/** +- * An iterator that's always empty. +- * This is handy if you don't have anything good to iterate over. +- */ +-class UniConfGen::NullIter : public UniConfGen::Iter +-{ +-public: +- /***** Overridden members *****/ +- +- virtual void rewind() { } +- virtual bool next() { return false; } +- virtual UniConfKey key() const { return UniConfKey::EMPTY; } +- virtual WvString value() const { return WvString(); } +-}; + + + #endif // __UNICONFGEN_H +--- a/include/unifastregetgen.h ++++ b/include/unifastregetgen.h +@@ -42,7 +42,6 @@ + virtual bool haschildren(const UniConfKey &key); + + private: +- IUniConfGen *inner; + UniConfValueTree *tree; + + protected: +--- a/include/unifiltergen.h ++++ b/include/unifiltergen.h +@@ -68,8 +68,8 @@ + virtual bool exists(const UniConfKey &key); + virtual bool haschildren(const UniConfKey &key); + virtual bool isok(); +- virtual Iter *iterator(const UniConfKey &key); +- virtual Iter *recursiveiterator(const UniConfKey &key); ++ virtual IUniConfGen::Iter *iterator(const UniConfKey &key); ++ virtual IUniConfGen::Iter *recursiveiterator(const UniConfKey &key); + + protected: + /** +--- a/include/unihashtree.h ++++ b/include/unihashtree.h +@@ -62,10 +62,11 @@ + UniHashTreeBase *xparent; /*!< the parent of this subtree */ + Container *xchildren; /*!< the hash table of children */ + +-private: + void _setparent(UniHashTreeBase *parent); + UniHashTreeBase *_root() const; + ++private: ++ + /** Called by a child to link itself to this node. */ + void link(UniHashTreeBase *node); + +--- a/include/unimountgen.h ++++ b/include/unimountgen.h +@@ -103,8 +103,8 @@ + virtual void commit(); + virtual bool refresh(); + virtual void flush_buffers() { } +- virtual Iter *iterator(const UniConfKey &key); +- virtual Iter *recursiveiterator(const UniConfKey &key); ++ virtual IUniConfGen::Iter *iterator(const UniConfKey &key); ++ virtual IUniConfGen::Iter *recursiveiterator(const UniConfKey &key); + + private: + /** Find the active generator for a given key. */ +--- a/include/wvmoniker.h ++++ b/include/wvmoniker.h +@@ -72,7 +72,7 @@ + // from IObject, which is very important. The 'for' avoids a + // warning. + for(IObject *silly = (T *)NULL; silly; ) +- ; ++ silly = (T *)NULL; + }; + }; + +--- a/include/wvpushdir.h ++++ b/include/wvpushdir.h +@@ -27,12 +27,11 @@ + + WvPushDir(WvStringParm new_dir) + { +-#ifdef MACOS +- old_dir = static_cast(calloc(PATH_MAX, sizeof(char *))); +- getcwd(old_dir, PATH_MAX);; +-#else +- old_dir = get_current_dir_name(); +-#endif ++ old_dir = new char[2048]; ++ if (!getcwd(old_dir, 2048)) { ++ errnum = errno; ++ return; ++ } + dir_handle = opendir(old_dir); + if (chdir(new_dir) == -1) + errnum = errno; +--- a/include/wvscatterhash.h ++++ b/include/wvscatterhash.h +@@ -183,7 +183,7 @@ + Iter(WvScatterHash &_table) : IterBase(_table) { } + Iter(const Iter &other) : IterBase(other) { } + +- unsigned char *getstatus() { return &xstatus[index-1]; } ++ unsigned char *getstatus() { return &this->xstatus[index-1]; } + + T *ptr() const + { return (T *)(get()); } +--- a/include/wvserialize.h ++++ b/include/wvserialize.h +@@ -60,6 +60,7 @@ + return htons(i); + } + ++#ifndef ntohll + /** + * Helper functions to convert 64 bit ints to and from host byteorder + */ +@@ -80,6 +81,7 @@ + return (((uint64_t)htonl(n)) << 32) | htonl(n >> 32); + #endif + } ++#endif + + /** + * A helper function that serializes different types of integers. Since +--- a/include/wvtask.h ++++ b/include/wvtask.h +@@ -24,6 +24,7 @@ + #include "wvstreamsdebugger.h" + #include "wvstringlist.h" + #include "setjmp.h" ++#define _XOPEN_SOURCE + #include + + #define WVTASK_MAGIC 0x123678 +--- a/uniconf/unicachegen.cc ++++ b/uniconf/unicachegen.cc +@@ -69,7 +69,7 @@ + + void UniCacheGen::loadtree(const UniConfKey &key) + { +- UniConfGen::Iter *i = inner->recursiveiterator(key); ++ IUniConfGen::Iter *i = inner->recursiveiterator(key); + if (!i) return; + + //assert(false); +--- a/uniconf/uniconfgen.cc ++++ b/uniconf/uniconfgen.cc +@@ -104,7 +104,7 @@ + + hold_delta(); + +- Iter *it = iterator(key); ++ IUniConfGen::Iter *it = iterator(key); + if (it) + { + it->rewind(); +@@ -257,7 +257,7 @@ + }; + + +-UniConfGen::Iter *UniConfGen::recursiveiterator(const UniConfKey &key) ++IUniConfGen::Iter *UniConfGen::recursiveiterator(const UniConfKey &key) + { + return new _UniConfGenRecursiveIter(this, key); + } +--- a/uniconf/unifiltergen.cc ++++ b/uniconf/unifiltergen.cc +@@ -134,7 +134,7 @@ + } + + +-UniConfGen::Iter *UniFilterGen::iterator(const UniConfKey &key) ++IUniConfGen::Iter *UniFilterGen::iterator(const UniConfKey &key) + { + UniConfKey mapped_key; + if (xinner && keymap(key, mapped_key)) +@@ -144,7 +144,7 @@ + } + + +-UniConfGen::Iter *UniFilterGen::recursiveiterator(const UniConfKey &key) ++IUniConfGen::Iter *UniFilterGen::recursiveiterator(const UniConfKey &key) + { + UniConfKey mapped_key; + if (xinner && keymap(key, mapped_key)) +--- a/uniconf/unifstreegen.cc ++++ b/uniconf/unifstreegen.cc +@@ -62,7 +62,7 @@ + log("Key '%s' not found.\n", key); + } + +- virtual Iter *recursiveiterator(const UniConfKey &key) ++ virtual IUniConfGen::Iter *recursiveiterator(const UniConfKey &key) + { + // don't try to optimize this like UniMountGen does, because we're + // going to mount things *as* we iterate through them, not sooner. +--- a/uniconf/unimountgen.cc ++++ b/uniconf/unimountgen.cc +@@ -305,7 +305,7 @@ + return strcmp(*l, *r); + } + +-UniMountGen::Iter *UniMountGen::iterator(const UniConfKey &key) ++IUniConfGen::Iter *UniMountGen::iterator(const UniConfKey &key) + { + UniGenMount *found = findmount(key); + if (found) +@@ -345,7 +345,7 @@ + // FIXME: this function will be rather slow if you try to iterate over multiple + // generators and the latency level is high (as is the case with e.g.: the tcp generator). + // the fast path will only kick in if you iterate over a single generator. +-UniMountGen::Iter *UniMountGen::recursiveiterator(const UniConfKey &key) ++IUniConfGen::Iter *UniMountGen::recursiveiterator(const UniConfKey &key) + { + UniGenMount *found = findmountunder(key); + if (found) +--- a/utils/t/wvpushdir.t.cc ++++ b/utils/t/wvpushdir.t.cc +@@ -15,14 +15,9 @@ + + WVPASS(newpushdir.isok()); + +-#ifdef MACOS +- char *pwd = static_cast(calloc(PATH_MAX,sizeof(char *))); +- getcwd(pwd,PATH_MAX); +-#else +- char *pwd = get_current_dir_name(); +-#endif ++ char pwd[1024] = ""; ++ getcwd(pwd, sizeof(pwd)); + WVPASSEQ(pwd, dir); +- free(pwd); + + unlink(dir); + } +--- a/utils/wvpam.cc ++++ b/utils/wvpam.cc +@@ -5,6 +5,7 @@ + * A WvStream that authenticates with PAM before allowing any reading or + * writing. See wvpam.h. + */ ++#include + #include "wvlog.h" + #include "wvpam.h" + #include "wvautoconf.h" +--- a/xplc/modulemgr.cc ++++ b/xplc/modulemgr.cc +@@ -23,6 +23,7 @@ + #include + #include "modulemgr.h" + #include ++#include + + #include "config.h" + diff --git a/net-libs/wvstreams/wvstreams-4.6.1_p14-r1.ebuild b/net-libs/wvstreams/wvstreams-4.6.1_p14-r1.ebuild index 1042923f5228..06f36322819b 100644 --- a/net-libs/wvstreams/wvstreams-4.6.1_p14-r1.ebuild +++ b/net-libs/wvstreams/wvstreams-4.6.1_p14-r1.ebuild @@ -44,6 +44,7 @@ PATCHES=( "${FILESDIR}"/${PN}-4.6.1-parallel-make.patch "${FILESDIR}"/${PN}-4.6.1-_DEFAULT_SOURCE.patch "${FILESDIR}"/${PN}-4.6.1_p14-xplc-module.patch + "${FILESDIR}"/${PN}-4.6.1_p14-llvm.patch ) S=${WORKDIR}/${P/_p*} -- cgit v1.2.3-65-gdbad