Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 838358 - app-portage/eix-0.36.1 fails to build, error: redefinition of ‘void split_string...
Summary: app-portage/eix-0.36.1 fails to build, error: redefinition of ‘void split_str...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal
Assignee: Mikle Kolyada (RETIRED)
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 835940
  Show dependency tree
 
Reported: 2022-04-14 17:50 UTC by Andreas K. Hüttel
Modified: 2022-04-15 05:18 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andreas K. Hüttel archtester gentoo-dev 2022-04-14 17:50:54 UTC
x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I..    -DSYSCONFDIR=\"/etc\" -DLOCALEDIR=\"/usr/share/locale\"   -march=native -O2 -pipe -ggdb -frecord-gcc-switches -c -o versionsort.o versionsort.cc
In file included from ./portage/extendedversion.h:21,
                 from ./cache/base.h:24,
                 from cache/cachetable.h:19,
                 from eix-update.cc:21:
./eixTk/stringutils.h:221:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’
  221 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:217:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’ previously defined here
  217 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:233:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool)’
  233 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:229:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool)’ previously defined here
  229 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:245:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&)’
  245 | inline static void split_string(WordUnorderedSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:241:20: note: ‘void split_string(WordUnorderedSet*, const string&)’ previously defined here
  241 | inline static void split_string(WordSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
In file included from database/header.h:22,
                 from eix-diff.cc:19:
./eixTk/stringutils.h:221:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’
  221 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:217:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’ previously defined here
  217 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:233:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool)’
  233 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:229:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool)’ previously defined here
  229 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:245:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&)’
  245 | inline static void split_string(WordUnorderedSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:241:20: note: ‘void split_string(WordUnorderedSet*, const string&)’ previously defined here
  241 | inline static void split_string(WordSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
In file included from ./database/header.h:22,
                 from various/cli.cc:16:
./eixTk/stringutils.h:221:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’
  221 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:217:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’ previously defined here
  217 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:233:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool)’
  233 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:229:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool)’ previously defined here
  229 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:245:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&)’
  245 | inline static void split_string(WordUnorderedSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:241:20: note: ‘void split_string(WordUnorderedSet*, const string&)’ previously defined here
  241 | inline static void split_string(WordSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
In file included from masked-packages.cc:27:
eixTk/stringutils.h:221:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’
  221 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:217:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’ previously defined here
  217 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:233:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool)’
  233 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:229:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool)’ previously defined here
  229 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:245:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&)’
  245 | inline static void split_string(WordUnorderedSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:241:20: note: ‘void split_string(WordUnorderedSet*, const string&)’ previously defined here
  241 | inline static void split_string(WordSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
In file included from database/header.h:22,
                 from eix.cc:21:
./eixTk/stringutils.h:221:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’
  221 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:217:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’ previously defined here
  217 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:233:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool)’
  233 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:229:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool)’ previously defined here
  229 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:245:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&)’
  245 | inline static void split_string(WordUnorderedSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:241:20: note: ‘void split_string(WordUnorderedSet*, const string&)’ previously defined here
  241 | inline static void split_string(WordSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I..    -DSYSCONFDIR=\"/etc\" -DLOCALEDIR=\"/usr/share/locale\"   -march=native -O2 -pipe -ggdb -frecord-gcc-switches -c -o eix-header.o eix-header.cc
x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I..    -DSYSCONFDIR=\"/etc\" -DLOCALEDIR=\"/usr/share/locale\"   -march=native -O2 -pipe -ggdb -frecord-gcc-switches -c -o eix-drop-permissions.o eix-drop-permissions.cc
In file included from versionsort.cc:25:
eixTk/stringutils.h:221:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’
  221 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:217:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’ previously defined here
  217 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:233:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool)’
  233 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:229:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool)’ previously defined here
  229 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:245:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&)’
  245 | inline static void split_string(WordUnorderedSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
eixTk/stringutils.h:241:20: note: ‘void split_string(WordUnorderedSet*, const string&)’ previously defined here
  241 | inline static void split_string(WordSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
make[2]: *** [Makefile:1689: masked-packages.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [Makefile:1689: versionsort.o] Error 1
make[2]: *** [Makefile:1689: various/cli.o] Error 1
In file included from database/header.h:22,
                 from eix-header.cc:19:
./eixTk/stringutils.h:221:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’
  221 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:217:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool, const char*)’ previously defined here
  217 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape, const char *at) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:233:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&, bool)’
  233 | inline static void split_string(WordUnorderedSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:229:20: note: ‘void split_string(WordUnorderedSet*, const string&, bool)’ previously defined here
  229 | inline static void split_string(WordSet *vec, const std::string& str, bool handle_escape) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:245:20: error: redefinition of ‘void split_string(WordUnorderedSet*, const string&)’
  245 | inline static void split_string(WordUnorderedSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
./eixTk/stringutils.h:241:20: note: ‘void split_string(WordUnorderedSet*, const string&)’ previously defined here
  241 | inline static void split_string(WordSet *vec, const std::string& str) {
      |                    ^~~~~~~~~~~~
make[2]: *** [Makefile:1689: eix-update.o] Error 1
make[2]: *** [Makefile:1689: eix-diff.o] Error 1
make[2]: *** [Makefile:1689: eix-header.o] Error 1
make[2]: *** [Makefile:1689: eix.o] Error 1
make[2]: Leaving directory '/var/tmp/portage/app-portage/eix-0.36.1/work/eix-0.36.1/src'
make[1]: *** [Makefile:529: all-recursive] Error 1
make[1]: Leaving directory '/var/tmp/portage/app-portage/eix-0.36.1/work/eix-0.36.1'
make: *** [Makefile:449: all] Error 2
 * ERROR: app-portage/eix-0.36.1::gentoo failed (compile phase):
 *   emake failed
 * 
 * If you need support, post the output of `emerge --info '=app-portage/eix-0.36.1::gentoo'`,
 * the complete build log and the output of `emerge -pqv '=app-portage/eix-0.36.1::gentoo'`.
 * The complete build log is located at '/var/tmp/portage/app-portage/eix-0.36.1/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/app-portage/eix-0.36.1/temp/environment'.
 * Working directory: '/var/tmp/portage/app-portage/eix-0.36.1/work/eix-0.36.1'
 * S: '/var/tmp/portage/app-portage/eix-0.36.1/work/eix-0.36.1'
Comment 1 Martin Väth 2022-04-14 19:30:59 UTC
Thanks for reporting. This is due to the ebuild removing all *FLAG mangling by default and thus compiling eix with an ancient C++ dialect which does not have std::unordered_set (std::ordered_set is used as a substitute which breaks here because it causes a duplicate signature).

Anyway, eix is meant to compile also with such old dialects (though running less efficiently as one can see with this example, and usually not well tested), so this is a valid eix bug which will be fixed in 0.36.2.
Comment 2 Larry the Git Cow gentoo-dev 2022-04-15 04:39:52 UTC
The bug has been closed via the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ae6415caaae850c73c9d53515a7156dfeabe4b52

commit ae6415caaae850c73c9d53515a7156dfeabe4b52
Author:     Sam James <sam@gentoo.org>
AuthorDate: 2022-04-15 04:39:40 +0000
Commit:     Sam James <sam@gentoo.org>
CommitDate: 2022-04-15 04:39:45 +0000

    app-portage/eix: add 0.36.2
    
    Closes: https://bugs.gentoo.org/838358
    Signed-off-by: Sam James <sam@gentoo.org>

 app-portage/eix/Manifest          |   1 +
 app-portage/eix/eix-0.36.2.ebuild | 103 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 104 insertions(+)
Comment 3 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2022-04-15 04:42:39 UTC
(In reply to Martin Väth from comment #1)
> Thanks for reporting. This is due to the ebuild removing all *FLAG mangling
> by default and thus compiling eix with an ancient C++ dialect which does not
> have std::unordered_set (std::ordered_set is used as a substitute which
> breaks here because it causes a duplicate signature).
> 

I'm not convinced gnu++17 (default w/ GCC 11) is ancient. Anyway, I don't actually see why we should be adding --disable-new_dialect in the ebuild. The rest I understand mostly, but not that one.
Comment 4 Martin Väth 2022-04-15 05:18:28 UTC
(In reply to Sam James from comment #3)
> 
> I'm not convinced gnu++17 (default w/ GCC 11) is ancient.

No, gnu++17 is not ancient. Even c++1[1yz4] or gnu++1[1yz4] would be new enough to have std::unordered_set, and the problem would not occur if the dialect would be at least this. I assume that the compiler used in the report is older.