Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 209239 - app-portage/eix-0.10.2 contains GNU-specific constructs
Summary: app-portage/eix-0.10.2 contains GNU-specific constructs
Status: RESOLVED FIXED
Alias: None
Product: Gentoo/Alt
Classification: Unclassified
Component: Prefix Support (show other bugs)
Hardware: All IRIX
: Normal normal (vote)
Assignee: Gentoo non-Linux Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-02-07 13:44 UTC by Stuart Shelton
Modified: 2008-03-13 13:17 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 Stuart Shelton 2008-02-07 13:44:27 UTC
make  all-recursive
make[1]: Entering directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.2/work/eix-0.10.2'
Making all in src
make[2]: Entering directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.2/work/eix-0.10.2/src'
source='update-eix.cc' object='update-eix.o' libtool=no \
        DEPDIR=.deps depmode=sgi /bin/sh ../config/depcomp \
        CC -DHAVE_CONFIG_H -I. -I..   -I/opt/portage/usr/include  -J2 -O2 -n32 -mips4 -r14000 -float_const -use_readonly_const -TARG:isa=mips4:platform=ip35:processor=r14000 -TENV:zeroinit_in_bss=ON -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -FE:eliminate_duplicate_inline_copies:template_in_elf_section -woff 1174,1183,1185,1552,3968,3970  -c -o update-eix.o update-eix.cc
cc-1035 CC: WARNING File = /usr/include/stdint.h, Line = 5
  #error directive:  This header file is to be used only for c99 mode
          compilations

  #error This header file is to be used only for c99 mode compilations
   ^

cc-1064 CC: WARNING File = ./eixTk/argsreader.h, Line = 72
  An identifier is missing in the declaration.

        const union { ///< Pointer to variable of argument.
        ^

cc-1021 CC: WARNING File = ./eixTk/argsreader.h, Line = 72
  The type qualifiers are meaningless in this declaration.

        const union { ///< Pointer to variable of argument.
        ^

cc-1265 CC: ERROR File = ./eixTk/argsreader.h, Line = 42
  "integer" is not a nonstatic data member or base class of class "Option".

                : type(t), longopt(l), shortopt(s), integer(i)
                                                    ^

cc-1265 CC: ERROR File = ./eixTk/argsreader.h, Line = 46
  "boolean" is not a nonstatic data member or base class of class "Option".

                : type(t), longopt(l), shortopt(s), boolean(b)
                                                    ^

cc-1265 CC: ERROR File = ./eixTk/argsreader.h, Line = 50
  "str" is not a nonstatic data member or base class of class "Option".

                : type(t), longopt(l), shortopt(s), str(c)
                                                    ^

cc-1020 CC: ERROR File = ./eixTk/argsreader.h, Line = 55
  The identifier "pr" is undefined.

        { pr.first = c1; pr.second = c2; }
          ^

cc-1265 CC: ERROR File = ./eixTk/argsreader.h, Line = 58
  "strlist" is not a nonstatic data member or base class of class "Option".

                : type(t), longopt(l), shortopt(s), strlist(c)
                                                    ^

cc-1265 CC: ERROR File = ./eixTk/argsreader.h, Line = 62
  "prlist" is not a nonstatic data member or base class of class "Option".

                : type(t), longopt(l), shortopt(s), prlist(c)
                                                    ^

cc-1040 CC: ERROR File = ./eixTk/exceptions.h, Line = 58
  An identifier is expected.

  #define ExBasic(...) ExBasic(__FILE__, __LINE__, __PRETTY_FUNCTION__, __VA_ARGS__)
                  ^

cc-1040 CC: ERROR File = ./eixTk/exceptions.h, Line = 60
  An identifier is expected.

  #define ASSERT(x, ...) do { \
                    ^

cc-1055 CC: ERROR File = ./cachetable.h, Line = 49
  A macro invocation has too many arguments.

                                throw(ExBasic("Unknown cache '%s' for directory '%s'!", cache_name.c_str(), directory));
                                              ^

cc-1020 CC: ERROR File = ./cachetable.h, Line = 49
  The identifier "__VA_ARGS__" is undefined.

                                throw(ExBasic("Unknown cache '%s' for directory '%s'!", cache_name.c_str(), directory));
                                      ^

cc-1040 CC: ERROR File = update-eix.cc, Line = 35
  An identifier is expected.

  #define INFO(...) printf(__VA_ARGS__)
               ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 350
  A macro invocation has too many arguments.

        INFO("Reading Portage settings ..\n");
             ^

cc-1020 CC: ERROR File = update-eix.cc, Line = 350
  The identifier "__VA_ARGS__" is undefined.

        INFO("Reading Portage settings ..\n");
        ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 387
  A macro invocation has too many arguments.

                        INFO("Excluded %s\n", portage_settings["PORTDIR"].c_str());
                             ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 401
  A macro invocation has too many arguments.

                                INFO("Excluded %s\n", portage_settings.overlays[i].c_str());
                                     ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 405
  A macro invocation has too many arguments.

        INFO("Building database (%s) ..\n", outputfile.c_str());
             ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 429
  A macro invocation has too many arguments.

        INFO("     Reading    %%");
             ^

cc-1020 CC: ERROR File = update-eix.cc, Line = 429
  The identifier "__VA_ARGS__" is undefined.

        INFO("     Reading    %%");
        ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 450
  A macro invocation has too many arguments.

                        INFO("Excluding \"%s\" %s (cache: %s)\n", overlay.label.c_str(), cache->getPathHumanReadable().c_str(), cache->getType());
                             ^

cc-1020 CC: ERROR File = update-eix.cc, Line = 450
  The identifier "__VA_ARGS__" is undefined.

                        INFO("Excluding \"%s\" %s (cache: %s)\n", overlay.label.c_str(), cache->getPathHumanReadable().c_str(), cache->getType());
                        ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 458
  A macro invocation has too many arguments.

                INFO("[%u] \"%s\" %s (cache: %s)\n", uint(key), overlay.label.c_str(), cache->getPathHumanReadable().c_str(), cache->getType());
                     ^

cc-1020 CC: ERROR File = update-eix.cc, Line = 458
  The identifier "__VA_ARGS__" is undefined.

                INFO("[%u] \"%s\" %s (cache: %s)\n", uint(key), overlay.label.c_str(), cache->getPathHumanReadable().c_str(), cache->getType());
                ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 459
  A macro invocation has too many arguments.

                INFO("     Reading ");
                     ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 468
  A macro invocation has too many arguments.

                                INFO("\b\b\b\baborted\n");
                                     ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 484
  A macro invocation has too many arguments.

                                        INFO("\b\b\b\baborted\n");
                                             ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 492
  A macro invocation has too many arguments.

        INFO("Applying masks ..\n");
             ^

cc-1020 CC: ERROR File = update-eix.cc, Line = 492
  The identifier "__VA_ARGS__" is undefined.

        INFO("Applying masks ..\n");
        ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 508
  A macro invocation has too many arguments.

        ASSERT(database_stream, "Can't open the database file %s for writing (mode = 'wb')", outputfile);
                                ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 508
  A macro invocation has too many arguments.

        ASSERT(database_stream, "Can't open the database file %s for writing (mode = 'wb')", outputfile);
        ^

cc-1055 CC: ERROR File = update-eix.cc, Line = 519
  A macro invocation has too many arguments.

        INFO("Database contains %u packages in %u categories.\n",
             ^

30 errors detected in the compilation of "update-eix.cc".
make[2]: *** [update-eix.o] Error 2
make[2]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.2/work/eix-0.10.2/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.2/work/eix-0.10.2'
make: *** [all] Error 2
 * 
 * ERROR: app-portage/eix-0.10.2 failed.
 * Call stack:
 *               ebuild.sh, line   46:  Called src_compile
 *             environment, line 2528:  Called die
 * The specific snippet of code:
 *       emake || diefunc "$FUNCNAME" "$LINENO" "$?" "emake failed";
 *  The die message:
 *   emake failed

<stdint.h> can't be used in C++ code, and it looks as if <stdarg.h> (or C++ equivalent?) is needed for VA_ARGS.
Comment 1 Martin Väth 2008-02-08 00:44:02 UTC
I changed the unnamed const union to a named non-const union; this should solve the problems in argsreader.h.

Unfortunately, cstdint is currently only in tr1; eix uses this now if available and avoids stdint.h if this does not work (but I don't know what to do if neither works and the uint{8,16,32}_t-types are not provided by some other included lib: These types are definitely needed).

Moreover, stdarg.h *was* included in exceptions.h; eix uses now cstdarg instead, but I would be surprised if this solves the "..."-problem, and avoiding VA_ARGS would be rather difficult.

Anyway: Does new svn trunk of eix compile for you?
Comment 2 Emil Beinroth 2008-02-08 11:10:29 UTC
I just removed all __VA_ARGS__ macros (revision 532).
Comment 3 Stuart Shelton 2008-02-08 21:31:51 UTC
Using revision 535, I get the following:

 eix version 0.10.4 configured successfully.
 Good luck with make :)
cd . && /bin/sh /usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.3a/work/eix-0.10.3a/config/missing --run autoheader
rm -f stamp-h1
touch config.h.in
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
make  all-recursive
make[1]: Entering directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.3a/work/eix-0.10.3a'
Making all in src
make[2]: Entering directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.3a/work/eix-0.10.3a/src'
source='update-eix.cc' object='update-eix.o' libtool=no \
        DEPDIR=.deps depmode=sgi /bin/sh ../config/depcomp \
        CC -DHAVE_CONFIG_H -I. -I..   -I/opt/portage/usr/include  -J2 -O2 -n32 -mips4 -r14000 -float_const -use_readonly_const -TARG:isa=mips4:platform=ip35:processor=r14000 -TENV:zeroinit_in_bss=ON -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -diag_error 1035 -FE:eliminate_duplicate_inline_copies:template_in_elf_section -woff 1174,1183,1185,1552,3968,3970  -c -o update-eix.o update-eix.cc
cc-1020 CC: ERROR File = ./eixTk/exceptions.h, Line = 36
  The identifier "va_list" is undefined.

                        va_list ap;
                        ^

cc-1065 CC: ERROR File = ./eixTk/exceptions.h, Line = 36
  A semicolon is expected at this point.

                        va_list ap;
                                ^

cc-1020 CC: ERROR File = ./eixTk/exceptions.h, Line = 37
  The identifier "ap" is undefined.

                        va_start(ap, fmt);
                        ^

cc-1021 CC: WARNING File = ./eixTk/ptr_list.h, Line = 45
  The type qualifiers are meaningless in this declaration.

                        const typename base_iterator::reference operator->() const
                        ^
          detected during instantiation of class
                    "eix::ptr_iterator<std::list<BasicCache *,
                    std::allocator<BasicCache *>>::iterator>" at line 30 of
                    "./cachetable.h"

cc-1021 CC: WARNING File = ./eixTk/ptr_list.h, Line = 45
  The type qualifiers are meaningless in this declaration.

                        const typename base_iterator::reference operator->() const
                        ^
          detected during instantiation of class
                    "eix::ptr_iterator<std::list<Version *,
                    std::allocator<Version *>>::iterator>" at line 151 of
                    "./portage/package.h"

cc-1021 CC: WARNING File = ./eixTk/ptr_list.h, Line = 45
  The type qualifiers are meaningless in this declaration.

                        const typename base_iterator::reference operator->() const
                        ^
          detected during instantiation of class
                    "eix::ptr_iterator<std::list<Category *,
                    std::allocator<Category *>>::iterator>" at line 493 of
                    "update-eix.cc"

cc-1021 CC: WARNING File = ./eixTk/ptr_list.h, Line = 45
  The type qualifiers are meaningless in this declaration.

                        const typename base_iterator::reference operator->() const
                        ^
          detected during instantiation of class
                    "eix::ptr_iterator<std::list<Package *,
                    std::allocator<Package *>>::iterator>" at line 497 of
                    "update-eix.cc"

3 errors detected in the compilation of "update-eix.cc".
make[2]: *** [update-eix.o] Error 2


IRIX' stdarg.h header includes the following:

/* Define the va_list type: */
__SGI_LIBC_BEGIN_NAMESPACE_STD
#ifndef _VA_LIST_
#define _VA_LIST_
typedef char *va_list;
#endif /* !_VA_LIST_ */

__SGI_LIBC_END_NAMESPACE_STD

... so I'm not sure why this isn't working...
Comment 4 Stuart Shelton 2008-02-08 21:58:47 UTC
I'm now hugely confused!  If I paste in:

#ifndef _VA_LIST_
#define _VA_LIST_
typedef char *va_list;
#endif /* !_VA_LIST_ */

... so src/eixTk/exceptions.h then it still fails in the same way.

However, if I remove the guards and just add:

typedef char *va_list;

... then it gets much further!

It now fails (sigh) with:

source='eixTk/sysutils.cc' object='eixTk/sysutils.o' libtool=no \
        DEPDIR=.deps depmode=sgi /bin/sh ../config/depcomp \
        CC -DHAVE_CONFIG_H -I. -I..   -I/opt/portage/usr/include  -O2 -n32 -mips4 -r14000 -float_const -use_readonly_const -TARG:isa=mips4:platform=ip35:processor=r14000 -TENV:zeroinit_in_bss=ON -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -diag_error 1035 -FE:eliminate_duplicate_inline_copies:template_in_elf_section -woff 1174,1183,1185,1552,3968,3970 -c -o eixTk/sysutils.o eixTk/sysutils.cc
cc-1020 CC: ERROR File = eixTk/sysutils.cc, Line = 105
  The identifier "LC_ALL" is undefined.

        string old_lcall = setlocale(LC_ALL, NULL);
                                     ^

cc-1020 CC: ERROR File = eixTk/sysutils.cc, Line = 105
  The identifier "setlocale" is undefined.

        string old_lcall = setlocale(LC_ALL, NULL);
                           ^

2 errors detected in the compilation of "eixTk/sysutils.cc".
make[2]: *** [eixTk/sysutils.o] Error 2
make[2]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.4/work/eix-0.10.4/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.4/work/eix-0.10.4'
make: *** [all] Error 2

... this was fixed by adding "#include <locale.h>" to src/eixTk/sysutils.cc.

The next errors are:

"cache/generate-cachemap.sh" > "cache/cache-map.cc"
source='cache/cache-map.cc' object='cache/cache-map.o' libtool=no \
        DEPDIR=.deps depmode=sgi /bin/sh ../config/depcomp \
        CC -DHAVE_CONFIG_H -I. -I..   -I/opt/portage/usr/include  -O2 -n32 -mips4 -r14000 -float_const -use_readonly_const -TARG:isa=mips4:platform=ip35:processor=r14000 -TENV:zeroinit_in_bss=ON -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -diag_error 1035 -FE:eliminate_duplicate_inline_copies:template_in_elf_section -woff 1174,1183,1185,1552,3968,3970 -c -o cache/cache-map.o cache/cache-map.cc
cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 15
  The indicated token is not valid in this context.

                return new $(to_classname metadata);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 15
  A type specifier is expected.

                return new $(to_classname metadata);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 18
  The indicated token is not valid in this context.

                return new $(to_classname sqlite);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 18
  A type specifier is expected.

                return new $(to_classname sqlite);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 21
  The indicated token is not valid in this context.

                return new $(to_classname cdb);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 21
  A type specifier is expected.

                return new $(to_classname cdb);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 24
  The indicated token is not valid in this context.

                return new $(to_classname none);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 24
  A type specifier is expected.

                return new $(to_classname none);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 27
  The indicated token is not valid in this context.

                return new $(to_classname ebuild);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 27
  A type specifier is expected.

                return new $(to_classname ebuild);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 30
  The indicated token is not valid in this context.

                return new $(to_classname portage-2.0);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 30
  A type specifier is expected.

                return new $(to_classname portage-2.0);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 33
  The indicated token is not valid in this context.

                return new $(to_classname portage-2.0.51);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 33
  A type specifier is expected.

                return new $(to_classname portage-2.0.51);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 36
  The indicated token is not valid in this context.

                return new $(to_classname flat);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 36
  A type specifier is expected.

                return new $(to_classname flat);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 39
  The indicated token is not valid in this context.

                return new $(to_classname portage-2.1);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 39
  A type specifier is expected.

                return new $(to_classname portage-2.1);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 42
  The indicated token is not valid in this context.

                return new $(to_classname portage-2.1.0);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 42
  A type specifier is expected.

                return new $(to_classname portage-2.1.0);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 45
  The indicated token is not valid in this context.

                return new $(to_classname backport);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 45
  A type specifier is expected.

                return new $(to_classname backport);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 48
  The indicated token is not valid in this context.

                return new $(to_classname portage-2.1.2);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 48
  A type specifier is expected.

                return new $(to_classname portage-2.1.2);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 51
  The indicated token is not valid in this context.

                return new $(to_classname portage-2.1*);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 51
  A type specifier is expected.

                return new $(to_classname portage-2.1*);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 54
  The indicated token is not valid in this context.

                return new $(to_classname none)(true);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 54
  A type specifier is expected.

                return new $(to_classname none)(true);
                           ^

cc-1007 CC: ERROR File = cache/cache-map.cc, Line = 57
  The indicated token is not valid in this context.

                return new $(to_classname ebuild)(true);
                           ^

cc-1079 CC: ERROR File = cache/cache-map.cc, Line = 57
  A type specifier is expected.

                return new $(to_classname ebuild)(true);
                           ^

30 errors detected in the compilation of "cache/cache-map.cc".
make[2]: *** [cache/cache-map.o] Error 2
make[2]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.4/work/eix-0.10.4/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.4/work/eix-0.10.4'
make: *** [all] Error 2

... and this I have no idea about!

But it feels as if we're getting closer ;)
Comment 5 Emil Beinroth 2008-02-08 23:40:52 UTC
Looks like your standard shell doesn't handle $() syntax. I've changed the script in question, please retry with current revision (536).
Comment 6 Stuart Shelton 2008-02-09 15:59:05 UTC
It might be the fault of libtool, but /bin/CC also seems to be hardcoded into the build-process somewhere.  Ideally, all tools should be the prefix-portage ones (e.g. ${EPREFIX}/bin/CC).

(This only seems to happen for the "C++ prelinker" stage - ${EPREFIX}/usr/bin/CC is used to compile the code - odd)

The good news is that eix-0.10.4 now builds on IRIX!

Unfortunately, the test-suite fails with:

>>> Test phase [check]: app-portage/eix-0.10.4
Making check in src
make[1]: Entering directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.4/work/eix-0.10.4/src'
/bin/sh ../libtool --tag=CXX   --mode=link CC  -J2 -O2 -n32 -mips4 -r14000 -float_const -use_readonly_const -TARG:isa=mips4:platform=ip35:processor=r14000 -TENV:zeroinit_in_bss=ON -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -diag_error 1035 -FE:eliminate_duplicate_inline_copies:template_in_elf_section -woff 1174,1183,1185,1552,3968,3970   -Wl,-v,-s,-x,-n32,-mips4,-rdata_shared,-allow_jump_at_eop,-rpath,/opt/portage/usr/lib:/opt/portage/lib -L/opt/portage/usr/lib -L/opt/portage/lib -Wl,--as-needed -o update-eix update-eix.o varsreader.o database/io.o database/header.o database/package_reader.o portage/conf/portagesettings.o portage/conf/cascadingprofile.o portage/basicversion.o portage/mask.o portage/package.o portage/vardbpkg.o portage/packagetree.o portage/keywords.o portage/set_stability.o eixTk/argsreader.o eixTk/filenames.o eixTk/stringutils.o eixTk/sysutils.o eixTk/utils.o eixrc/eixrc.o global.o global2.o global3.o global4.o cache/common/flat-reader.o cache/common/selectors.o cache/common/unpickle.o cache/base.o cache/cache-map.o cache/cdb/cdb.o cache/ebuild/ebuild.o cache/eixcache/eixcache.o cache/metadata/metadata.o cache/none/none.o cache/port2_0_0/port2_0_0.o cache/port2_1_0/port2_1_0.o cache/port2_1_2/port2_1_2.o cache/sqlite/sqlite.o -lbz2 
CC -J2 -O2 -n32 -mips4 -r14000 -float_const -use_readonly_const -TARG:isa=mips4:platform=ip35:processor=r14000 -TENV:zeroinit_in_bss=ON -OPT:fast_io=ON:Olimit=8192:reorg_common=ON:swp=ON -LNO:auto_dist=ON:fusion_peeling_limit=8:gather_scatter=2 -diag_error 1035 -FE:eliminate_duplicate_inline_copies:template_in_elf_section -woff 1174,1183,1185,1552,3968,3970 -Wl,-v -Wl,-s -Wl,-x -Wl,-n32 -Wl,-mips4 -Wl,-rdata_shared -Wl,-allow_jump_at_eop -Wl,-rpath -Wl,/opt/portage/usr/lib:/opt/portage/lib -Wl,--as-needed -o update-eix update-eix.o varsreader.o database/io.o database/header.o database/package_reader.o portage/conf/portagesettings.o portage/conf/cascadingprofile.o portage/basicversion.o portage/mask.o portage/package.o portage/vardbpkg.o portage/packagetree.o portage/keywords.o portage/set_stability.o eixTk/argsreader.o eixTk/filenames.o eixTk/stringutils.o eixTk/sysutils.o eixTk/utils.o eixrc/eixrc.o global.o global2.o global3.o global4.o cache/common/flat-reader.o cache/common/selectors.o cache/common/unpickle.o cache/base.o cache/cache-map.o cache/cdb/cdb.o cache/ebuild/ebuild.o cache/eixcache/eixcache.o cache/metadata/metadata.o cache/none/none.o cache/port2_0_0/port2_0_0.o cache/port2_1_0/port2_1_0.o cache/port2_1_2/port2_1_2.o cache/sqlite/sqlite.o  -L/opt/portage/usr/lib -L/opt/portage/lib -lbz2  
C++ prelinker: error: std::_List_base<Category*,std::allocator<Category*> >::clear(void) assigned to database/io.o and update-eix.o
C++ prelinker: error: bad instantiation request file -- instantiation assigned to more than one file
make[1]: *** [update-eix] Error 2
make[1]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.4/work/eix-0.10.4/src'
make: *** [check-recursive] Error 1
 * Make check failed. See above for details.

(Oh, and "-Wl,--as-needed" is also GNU-specific)

... as does 'ebuild merge':

C++ prelinker: error: std::_List_base<Category*,std::allocator<Category*> >::clear(void) assigned to database/io.o and update-eix.o
C++ prelinker: error: bad instantiation request file -- instantiation assigned to more than one file
make[1]: *** [update-eix] Error 2
make[1]: Leaving directory `/usr/opt/portage/var/tmp/portage/app-portage/eix-0.10.4/work/eix-0.10.4/src'
make: *** [install-recursive] Error 1
 * ERROR: app-portage/eix-0.10.4 failed:
 *   emake install failed
 * 
 * Call stack:
 *               ebuild.sh:  49: <call src_install>
 *             environment:2066:     emake DESTDIR="${D}" install || die "emake install failed";
 * 
Comment 7 Stuart Shelton 2008-02-09 16:00:11 UTC
(oh, and I'm still having to manually add the va_list typedef)
Comment 8 Martin Väth 2008-02-10 00:08:16 UTC
(In reply to comment #7)
> (oh, and I'm still having to manually add the va_list typedef)

This should be fixed now.

> (Oh, and "-Wl,--as-needed" is also GNU-specific)

configure tests whether the compiler knows it. Is something wrong with the test?

> It might be the fault of libtool, but /bin/CC also seems to be hardcoded
> into the build-process somewhere

No idea about that one. But if the following is not related to using the wrong linker, the following is severe:

> C++ prelinker: error: bad instantiation request file --
> instantiation assigned to more than one file

If the IRIX linker is not smart enough (or has no option to make it smart enough) to treat template instatiations automatically, I am afraid that eix (as most other C++ programs) will never work on IRIX...
Comment 9 Martin Väth 2008-02-10 07:53:24 UTC
(In reply to comment #8)
> If the IRIX linker is not smart enough (or has no option to make it smart
> enough) to treat template instatiations automatically

If I understand Sect. "Automatic Instantiation Method" of (remove linebreak):

http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=bks&
fname=/SGI_Developer/CC_PG/ch04.html

correctly, the compiler/linker should do this automatically. Maybe the error is caused by some obsolete *.ii files (since these are IRIX specific, "make clean" will probably not erase them, and if I understand correctly, they can be out of date after certain code changes).
Comment 10 Stuart Shelton 2008-02-10 11:59:59 UTC
(Apologies - I was replying to this last night, and my laptop crashed)

The as-needed test is a false-positive: the linker noisily drops the option but does compile, so configure thinks that it has been accepted.  This is purely a cosmetic problem unless the lack of an as-needed option triggers an alternative.

/bin/CC is ultimately the correct binary to invoke - but in order to inject the correct library and include paths and options, etc., for prefix usage I've created a ${EPREFIX}/usr/bin/CC (etc.) wrapper - and so this really should be the thing being used rather than anything outside of $EPREFIX.  However, I have also removed all trace of this, and compilation fails identically with non-wrapped binaries.

I'll try using fewer/more $CXXFLAGS, and see if -ptv gives anything useful to try to work out why the automatic instantiation isn't working...
Comment 11 Stuart Shelton 2008-02-10 18:21:40 UTC
It's fixed!

Adding '-ptused' to my $CXXFLAGS allowed eix to compile and install successfully :)

(I guess this could be performed in the ebuild with something like 'case ${CHOST} in *-irix*) append-flags -ptused;; esac' - but I'm not sure how CC alone should be altered, by modifying CXXFLAGS directly?)

For reference, the remaining warnings during the build - some of which are most likely spurious are:

cc-3604 CC: WARNING File = eixTk/argsreader.cc, Line = 136
  missing return statement at end of non-void function
          "ArgumentReader::lookup_longopt"

  }
  ^

cc-3604 CC: WARNING File = eixTk/argsreader.cc, Line = 152
  missing return statement at end of non-void function
          "ArgumentReader::lookup_shortopt"

  }
  ^

cc-1234 CC: WARNING File = ./output/formatstring.h, Line = 129
  Access control is not specified ("private" by default).

  class MarkedList : std::multimap<std::string, BasicVersion*>
                     ^

... and the aforementioned:

(null): WARNING 1  : Unknown option: -as-needed (ignored).

... from ld.

Thanks for all the effort in getting this working!
Comment 12 Stuart Shelton 2008-02-10 18:29:09 UTC
... although, having said all that, running it results in:

$ eix-sync -v
/opt/portage/usr/bin/eix-sync[12]: syntax error at line 678 : `((' unexpected

... which is again due to using the system 'sh' rather than the portage 'sh' or 'bash'.  I'd imagine that eix should have a run-time dependency on bash, and then the interpreter line should be '#!/bin/env bash'.
('sh' would be better but, by default, the bash ebuild doesn't provide a 'sh' symlink).

Correcting that, I get the message about using '-e' for prefix - shouldn't this config file be installed by default?

Finally, this eix was built with USE="-sqlite" (because I'm still working on getting sqlite to build), and the output from eix is:

$ eix-sync -v
 * eix-cache doesn't exist. Running update-eix!
Reading Portage settings ..
Garbage at end of version string: .1
Building database (/opt/portage/var/cache/eix) ..
[0] "gentoo_prefix" /usr/opt/portage/portage/ (cache: metadata)
     Reading 100%
Applying masks ..
Database contains 0 packages in 151 categories.
 * Removing old portage-cache in /opt/portage/var/cache/edb/dep
 * Running emerge --sync
>>> Starting svn update...
At revision 17040.

real    0m33.118s
user    0m3.439s
sys     0m2.581s
 * Copying old /opt/portage/var/cache/eix cache to /opt/portage/var/cache/eix.previous
 * Running update-eix
Reading Portage settings ..
Garbage at end of version string: .1
Building database (/opt/portage/var/cache/eix) ..
[0] "gentoo_prefix" /usr/opt/portage/portage/ (cache: metadata)
     Reading 100%
Applying masks ..
Database contains 0 packages in 151 categories.
Garbage at end of version string: .1
Diffing databases (0 - 0 packages)
$ eix -S bash
Garbage at end of version string: .1
No matches found.

So there seems to be some problem here - why does the database contain no packages?
Comment 13 Martin Väth 2008-02-10 19:31:15 UTC
(In reply to comment #12)'> $ eix-sync -v
> /opt/portage/usr/bin/eix-sync[12]: syntax error at line 678 : `(('
>
> ... which is again due to using the system 'sh' rather than the portage 'sh' > or 'bash'.  I'd imagine that eix should have a run-time dependency on bash, > and then the interpreter line should be '#!/bin/env bash'.

No. This was just intentionally changed (and I rewrote large parts of the scripts) to finally get rid of the dependency on this unlucky bash choice.
It is better to make the scripts standard conformal. However, since dash has no problems with the scripts, I cannot test why this does not work. I appreciate if you could find out:

Obviously the problem is lines 254-256 of update-eix-functions.sh (which is the only place where `((' occurs at all):

  [ "$(( 0 + 1 ))" = 1 ] && \
  expr() {
           echo "$(( ${1} ${2} ${3} ))"
  }

i.e. an explicit test whether $((...)) works as expected and - if it does - to override the external expr with an internal function; actually expr is called only once in eix-sync (first with COUNT=0):

  COUNT="`expr ${COUNT} + 1`"

I really cannot imagine what might be nonstandard with the above code.
The only idea which I have is that perhaps

  echo "$(( 1 + 0 ))"

already leads to an error message in your sh. If this is the case, does replacing line 254 of update-eix-function.sh with

  ( eval '[ "$(( 1 + 0 ))" = 1 ]' ) >/dev/null 2>&1 && \

solve the problem?

> [0] "gentoo_prefix" /usr/opt/portage/portage/ (cache: metadata)

So update-eix expects the metadata from /usr/opt/portage/portage/metadata/cache/*
Do you actually have this data there? (If just the prefix of the path is wrong, I refer to the discussion of bug 167961. However, if you do not have */metadata/cache/* at all, you must unfortunately use a different cache method. Probably CACHE_METHOD=portage-2.1 is the next method to try if prefix portage builds a corresponding /var/cache/edb/dep/usr/opt/portage/portage/* [you might have to adjust the path or prefix...]).
Comment 14 Stuart Shelton 2008-02-10 20:55:04 UTC
IRIX /bin/sh is just too old to parse anything of the form of '$(( 1 + 1 ))', whether as an argument of test or passed to echo.

(Infact I believe that /bin/sh is (near-)identical to ksh.)

I accidentally had '${EPREFIX}/usr/portage' as a symlink to '${EPREFIX}/portage', which I've now corrected.  'eix-sync' says:

Building database (/opt/portage/var/cache/eix) ..
[0] "gentoo_prefix" /usr/opt/portage/usr/portage/ (cache: metadata)
     Reading 100%
Applying masks ..
Database contains 0 packages in 151 categories.
Diffing databases (0 - 0 packages)

... and ${EPREFIX}/var/cache/edb/dep/usr/opt/portage/usr/portage does exist, but contains only sys-apps/portage/*.  ${EPREFIX}/usr/portage/metadata/ also exists, but contains only timestamp.chk

I assume that portage itself should be generating these files, and so this appears to be a portage bug?
Comment 15 Fabian Groffen gentoo-dev 2008-02-10 21:19:58 UTC
Time to kick in.

(In reply to comment #13)
> (In reply to comment #12)'> $ eix-sync -v
> > /opt/portage/usr/bin/eix-sync[12]: syntax error at line 678 : `(('
> >
> > ... which is again due to using the system 'sh' rather than the portage 'sh' > or 'bash'.  I'd imagine that eix should have a run-time dependency on bash, > and then the interpreter line should be '#!/bin/env bash'.
> 
> No. This was just intentionally changed (and I rewrote large parts of the
> scripts) to finally get rid of the dependency on this unlucky bash choice.
> It is better to make the scripts standard conformal. However, since dash has no
> problems with the scripts, I cannot test why this does not work. I appreciate
> if you could find out:

This is really sad to hear.  Please DO use /usr/bin/env to find your shell.  Your assumption that /bin/sh is dash (or any other posix shell) is not true on most systems.  If you use /bin/sh, you should write bourne shell compatible stuff, which is roughly the stuff which configure uses.  You really don't want that, so just refer to a posix shell, or if your world vision is too small, then just rely on the path to find a shell (sh) that matches your expectations.  That way Prefix just provides bash and it will all work fine.

For prefix this is a severe bug, and we will have to patch this to make it use prefix /bin/sh/bash again.
Comment 16 Martin Väth 2008-02-10 21:48:23 UTC
(In reply to comment #14)
> IRIX /bin/sh is just too old to parse anything of the form of
> '$(( 1 + 1 ))', whether as an argument of test or passed to echo.

For my shell code, it doesn't matter whether the shell does parse this or not - if it does not parse it, my code will not define the function expr, i.e. the external expr is used. I just do not understand why my code does not work
(BTW: with ksh in portage, even $((...)) works).

What happens if you call "echo "$(( 1 + 1 ))"? I would have expected that it prints then something like "$(( 1 + 1 ))" or something else but not die. (The problem is that I cannot understand why my code *dies*).
I checked in a new version, where the test is made in a subshell, maybe this works for you...

> ... and ${EPREFIX}/var/cache/edb/dep/usr/opt/portage/usr/portage does exist,
> but contains only sys-apps/portage/*.  ${EPREFIX}/usr/portage/metadata/ also
> exists, but contains only timestamp.chk
> 
> I assume that portage itself should be generating these files, and so this
> appears to be a portage bug?

From your description, it appears to me that emerge --metadata gets its information (for /var/cache/edb/dep/...) from the metadata subdirectory and your overlays. Since the metadata subdirectory does not exist in your portage tree, this is not a bug in portage. Instead, it is a "bug" (or better say: "missing feature") of your portage tree that the metadata subdirectory is empty. I do not know how this subdirectory is created for the "standard" portage tree. Maybe with emerge --regen? Unfortunately, this takes a *lot* of time.

If you cannot "load" the metadata from the tree, I am afraid that you have to use either this emerge --regen or some of the other cache methods "ebuild*" (or even "ebuild") or "none". Unfortunately, all of these are *very* slow.
"none" is the fastest of these, but still rather slow, and for packages relying on eclasses some information will be missing or wrong.
Comment 17 Martin Väth 2008-02-10 22:07:35 UTC
(In reply to comment #15)
> Your assumption that /bin/sh is dash (or any other posix shell) is not true
> on most systems.  If you use /bin/sh, you should write bourne shell
> compatible stuff, which is roughly the stuff which configure uses.

The scripts are supposed to be bourne shell compatible - that's why I made the last uses of $((...)) optional and $(...) obsolete. I really do not understand what could be bourne shell incompatible at the mentioned code.
Unfortunately, it is hard to test without the corresponding bourne shell.

> then just rely on the path to find a shell (sh) that matches your
> expectations.

"/usr/bin/env sh" is fine for me - I just do not want to hardcode "bash".
So as you say that this will work, I will check in this change.
Comment 18 Martin Väth 2008-02-13 09:27:10 UTC
If there are no more objections from this bug, I will release the new tarball
today or tomorrow.
Comment 19 Fabian Groffen gentoo-dev 2008-02-13 09:33:57 UTC
> > I assume that portage itself should be generating these files, and so this
> > appears to be a portage bug?
> 
> From your description, it appears to me that emerge --metadata gets its
> information (for /var/cache/edb/dep/...) from the metadata subdirectory and
> your overlays. Since the metadata subdirectory does not exist in your portage
> tree, this is not a bug in portage. Instead, it is a "bug" (or better say:
> "missing feature") of your portage tree that the metadata subdirectory is
> empty. I do not know how this subdirectory is created for the "standard"
> portage tree. Maybe with emerge --regen? Unfortunately, this takes a *lot* of
> time.

In prefix we cannot generate this meta-data as long as we use SVN for our tree.  Since SVN doesn't (re)store creation/modification time, there is no way in which Portage can see if the metadata cache is more recent than the ebuilds.  Once once we get an rsync tree, we can run cachegen.py and also add more stuff like GLSAs and alike.  Untill then we're stuck with Portage's own metadata caching, which isn't necessarily for the full tree.
 
> If you cannot "load" the metadata from the tree, I am afraid that you have to
> use either this emerge --regen or some of the other cache methods "ebuild*" (or
> even "ebuild") or "none". Unfortunately, all of these are *very* slow.
> "none" is the fastest of these, but still rather slow, and for packages relying
> on eclasses some information will be missing or wrong.

Unfortunately this is the case.
Comment 20 Stuart Shelton 2008-02-13 13:07:56 UTC
I've used 'emerge --regen' and even after this eix finds no metadata.  Is this to be expected, a portage bug, a eix bug, or just a result of using prefix portage via SVN (and would the developers' HTTPS option help)?

(Immediately after 'emerge --regen', ${EPREFIX}/usr/portage/metadata/cache is empty but ${EPREFIX}/var/cache/edb/dep/${EPREFIX}/usr/portage/ has entries for 2670 packages in 92 categories.  Still 'update-eix' returns:

Reading Portage settings ..
Garbage at end of version string: .1
Building database (/opt/portage/var/cache/eix) ..
[0] "gentoo_prefix" /usr/opt/portage/usr/portage/ (cache: metadata)
     Reading 100%
Applying masks ..
Database contains 0 packages in 151 categories.

)
Comment 21 Stuart Shelton 2008-02-13 13:11:39 UTC
Additional quick note: 'emerge --metadata' also makes no difference.  However, my Mac is happily running prefix-portage via SVN, and on this eix works without any problems - so I'm again tending towards thinking that this must be a bug somewhere in portage or eix.

(Having said this, the different caching methods of portage are a mystery to me, so I could well be barking up completely the wrong tree...)
Comment 22 Fabian Groffen gentoo-dev 2008-02-13 13:20:04 UTC
To to be sure, did you run update-eix?  On a system where I never used eix before I got:

(pegasus:portage/app-portage/eix) fabian% eix -I eix
Garbage at end of version string: .1
Can't open the database file /ufs/fabian/scratch/programs/gentoo/var/cache/eix for reading (mode = 'rb')
Did you forget to create it with 'update-eix'?
(pegasus:portage/app-portage/eix) fabian% update-eix
Reading Portage settings ..
Garbage at end of version string: .1
Building database (/ufs/fabian/scratch/programs/gentoo/var/cache/eix) ..
[0] "gentoo_prefix" /net/pegasus.ins.cwi.nl/export/scratch0/fabian/programs/gentoo-prefix/grobian/prefix-tree/ (cache: none)
     Reading   0%Garbage at end of version string: .01
Garbage at end of version string: .01                                        13%Garbage at end of version string: .2
Garbage at end of version string: .2                                         21%Garbage at end of version string: .1
Garbage at end of version string: .2                                         21%Garbage at end of version string: .2                                         22%Garbage at end of version string: .01
Garbage at end of version string: .1                                         30%Garbage at end of version string: .1                                         45%Garbage at end of version string: .1                                         80%Garbage at end of version string: .1
Garbage at end of version string: .1                                         83%Garbage at end of version string: .1
Garbage at end of version string: .1
Garbage at end of version string: .4
Garbage at end of version string: .2
Garbage at end of version string: .1                                         86%Garbage at end of version string: .2
Garbage at end of version string: .1                                         94%Garbage at end of version string: .1
Garbage at end of version string: .1                                        100%
[1] "gnustep-prefix" /net/pegasus.ins.cwi.nl/export/scratch0/fabian/programs/gentoo-prefix/grobian/prefix-tree/local/gnustep/prefix-overlay (cache: none)
     Reading 100%
Applying masks ..
Database contains 1700 packages in 151 categories.
(pegasus:portage/app-portage/eix) fabian% eix -I eix
Garbage at end of version string: .1
Garbage at end of version string: .2
[I] app-portage/eix
     Available versions:  (~)0.9.9 (~)0.9.10 (~)0.10.3 {sqlite}
     Installed versions:  0.10.3(10:51:25 03/01/08)(-sqlite)
     Homepage:            http://eix.sourceforge.net
     Description:         Small utility for searching ebuilds with indexing for fast results

(pegasus:portage/app-portage/eix) fabian% 


The warnings stuff is because eix doesn't deal with inter-revisions, but it seems to function to a certain extent after update-eix for me.
Comment 23 Emil Beinroth 2008-02-13 13:32:25 UTC
Please try to run update-eix with the portage-2.1 cache method enabled.
# PORTDIR_CACHE_METHOD=portage-2.1 update-eix
Comment 24 Fabian Groffen gentoo-dev 2008-02-13 13:35:44 UTC
Interestingly that method sees only 700 packages less (!!!):

(pegasus:portage/app-portage/eix) fabian% env PORTDIR_CACHE_METHOD=portage-2.1 update-eix
Reading Portage settings ..
Garbage at end of version string: .1
Building database (/ufs/fabian/scratch/programs/gentoo/var/cache/eix) ..
[0] "" /net/pegasus.ins.cwi.nl/export/scratch0/fabian/programs/gentoo-prefix/grobian/prefix-tree/ in /ufs/fabian/scratch/programs/gentoo (cache: portage-2.1)
     Reading   0%Garbage at end of version string: .01
Garbage at end of version string: .01                                         1%Garbage at end of version string: .2                                         10%Garbage at end of version string: .1
Garbage at end of version string: .2                                         13%Garbage at end of version string: .01
Garbage at end of version string: .1
Garbage at end of version string: .2
Garbage at end of version string: .1
Garbage at end of version string: .2                                         13%Garbage at end of version string: .1                                         21%Garbage at end of version string: .1
Garbage at end of version string: .1
Garbage at end of version string: .2                                         21%Garbage at end of version string: .2
Garbage at end of version string: .1
Garbage at end of version string: .2
Garbage at end of version string: .01                                        22%Garbage at end of version string: .1                                         30%Garbage at end of version string: .1                                         31%Garbage at end of version string: .1                                         45%Garbage at end of version string: .1                                         80%Garbage at end of version string: .1
Garbage at end of version string: .1                                         83%Garbage at end of version string: .1
Garbage at end of version string: .1
Garbage at end of version string: .1
Garbage at end of version string: .2
Garbage at end of version string: .3
Garbage at end of version string: .4
Garbage at end of version string: .2
Garbage at end of version string: .1                                         86%Garbage at end of version string: .2
Garbage at end of version string: .1
Garbage at end of version string: .1                                         94%Garbage at end of version string: .1
Garbage at end of version string: .1                                        100%
[1] "gnustep-prefix" /net/pegasus.ins.cwi.nl/export/scratch0/fabian/programs/gentoo-prefix/grobian/prefix-tree/local/gnustep/prefix-overlay (cache: none)
     Reading 100%
Applying masks ..
Database contains 1003 packages in 151 categories.
Comment 25 Stuart Shelton 2008-02-13 17:19:05 UTC
$ PORTDIR_CACHE_METHOD=portage-2.1 update-eix
Reading Portage settings ..
Garbage at end of version string: .1
Building database (/opt/portage/var/cache/eix) ..
[0] "" /usr/opt/portage/usr/portage/ in /opt/portage (cache: portage-2.1)
     Reading   0%Garbage at end of version string: .01
Garbage at end of version string: .01                                                                                                                                                           13%Garbage at end of version string: .2
Garbage at end of version string: .2                                                                                                                                                            21%Garbage at end of version string: .1
Garbage at end of version string: .2                                                                                                                                                            21%Garbage at end of version string: .2                                                                                                                                                            22%Garbage at end of version string: .01
Garbage at end of version string: .1                                                                                                                                                            30%Garbage at end of version string: .1                                                                                                                                                            45%Garbage at end of version string: .1                                                                                                                                                            80%Garbage at end of version string: .1
Garbage at end of version string: .1                                                                                                                                                            83%Garbage at end of version string: .1
Garbage at end of version string: .1
Garbage at end of version string: .4
Garbage at end of version string: .2
Garbage at end of version string: .1                                                                                                                                                            86%Garbage at end of version string: .2
Garbage at end of version string: .1                                                                                                                                                            94%Garbage at end of version string: .1
Garbage at end of version string: .1                                                                                                                                                           100%
Applying masks ..
Database contains 1638 packages in 151 categories.

... so this works!

Is there a config option for ${EPREFIX}/etc/eix*.conf that will make this the default?

Is there any other way other than an alias (or environment variable) that will keep this working - and is it a good idea to permanently force this?
Comment 26 Stuart Shelton 2008-02-13 18:12:04 UTC
... however, this doesn't work with 'eix-sync' :(

$ PORTDIR_CACHE_METHOD="portage-2.1" eix-sync -v
 * Removing old portage-cache in /opt/portage/var/cache/edb/dep
 * Running emerge --sync
>>> Starting svn update...
U    app-portage/eix/eix-0.10.3.ebuild
G    app-portage/eix/Manifest
Updated to revision 17130.

real    0m58.396s
user    0m4.039s
sys     0m5.370s
 * Copying old /opt/portage/var/cache/eix cache to /opt/portage/var/cache/eix.previous
 * Running update-eix
Reading Portage settings ..
Garbage at end of version string: .1
Building database (/opt/portage/var/cache/eix) ..
[0] "" /usr/opt/portage/usr/portage/ in /opt/portage (cache: portage-2.1)
     Reading 100%
Applying masks ..
Database contains 1 packages in 151 categories.
Garbage at end of version string: .1
Diffing databases (1638 - 1 packages)
      << app-admin/apache-tools (~*2.2.6 ~*2.2.8): Useful Apache tools - htdigest, htpasswd, ab, htdbm
...
      << xfce-extra/xfwm4-themes (~*4.4.2): Window manager themes


... and this is the result when PORTDIR_CACHE_METHOD (is this actually a portage variable which can live in ${EPREFIX}/etc/make.conf, or something unique to eix?) is exported or merely passed on the command-line.

If I then run update-eix in the same way, I get only:
Reading Portage settings ..
Garbage at end of version string: .1
Building database (/opt/portage/var/cache/eix) ..
[0] "" /usr/opt/portage/usr/portage/ in /opt/portage (cache: portage-2.1)
     Reading 100%
Applying masks ..
Database contains 1 packages in 151 categories.

... and the same after an 'emerge --metadata'.

Infact, the only time this works is after a (very slow) 'emerge --regen' - can anyone else confirm?
Comment 27 Fabian Groffen gentoo-dev 2008-02-13 18:34:52 UTC
(In reply to comment #26)
> ... however, this doesn't work with 'eix-sync' :(

>  * Copying old /opt/portage/var/cache/eix cache to
> /opt/portage/var/cache/eix.previous

These paths look ok

>  * Running update-eix
> Reading Portage settings ..
> Garbage at end of version string: .1
> Building database (/opt/portage/var/cache/eix) ..
> [0] "" /usr/opt/portage/usr/portage/ in /opt/portage (cache: portage-2.1)
>      Reading 100%

But this doesn't.  Why /usr/opt?  So you have a symlink opt -> usr/opt or something?  Also, it doesn't find the repo_name file aparently, because it uses an empty string...
Comment 28 Martin Väth 2008-02-13 19:23:18 UTC
(In reply to comment #26)
>  * Removing old portage-cache in /opt/portage/var/cache/edb/dep

So here is the old cache removed.
And it is never recreated properly, because emerge --sync does not fetch
any metadata.

> Infact, the only time this works is after a (very slow) 'emerge --regen'

Yes, this was to be expected: Since nothing fetches the full metadata,
it has either to be created by portage or by update-eix (with one of
the slow cache methods). There is no way around: Somebody has to do the work.
Maybe emerge --regen will run faster if /opt/portage/var/cache/edb/dep
is not cleaned (use option -R for eix-sync).

PORTDIR_CACHE_METHOD is a special variable only for eix.
You can set its default in ${EPREFIX}/etc/eixrc



Comment 29 Stuart Shelton 2008-02-14 00:36:12 UTC
Yeah - because the root partition is only 128Mb, /opt is a symlink to /usr/opt.  prefix stuff seems to like the absolute directory rather than the symlink - which is a shame because it's a little less obvious, but in the scheme of things, no great shakes.

Sorry if I'm being really slow or dense here - but what I still don't understand, as I've mentioned before, is how my Mac can be syncing from the same prefix SVN repository under the same conditions using the same software - and yet eix just works.  There's no need to run 'emerge --regen', the caches are populated form the word go.

How is it, if there's no bug involved, that exactly the same software syncing from the same place but on a different architecture suddenly has no metadata, and has to slowly rebuild it on every sync?

/me is confused...

Comment 30 Emil Beinroth 2008-02-14 08:32:57 UTC
What cache method is used by your update-eix on the mac?
[0] "something" /this/that in /this/that (cache: IMPORTANT PART)
Comment 31 Fabian Groffen gentoo-dev 2008-02-14 08:40:54 UTC
Should be none as the ebuild sets the default to none via a configure argument, but indeed, please check.  On Linux it is/was.
Comment 32 Stuart Shelton 2008-02-14 13:16:35 UTC
Yeah, on the Mac it says:

[0] /opt/gentoo/usr/portage/ (cache: none)

... then finds 1638 packages in 151 categories (which tallies with IRIX after 'emerge --regen')
Comment 33 Stuart Shelton 2008-02-14 13:26:13 UTC
... and in fact, if PORTDIR_CACHE_METHOD is set to "none" on IRIX, then it also works correctly.

Once this is changed, I think we're finally done here :)
Comment 34 Martin Väth 2008-02-14 18:48:42 UTC
As mentioned earlier in this thread, cache method "none" is neither
particularly fast, nor does it get all data.
For instance, SLOTs or other data with is set only from the eclass
(and not in the ebuild) are not found by this method.
Comment 35 Fabian Groffen gentoo-dev 2008-02-24 11:45:24 UTC
0.10.5 was released/synced, does that fix this bug?
Comment 36 Stuart Shelton 2008-02-24 21:42:35 UTC
IRIX still requires '-ptused' to be added to $CXXFLAGS in order to link successfully...

(and could probably do with '-woff 1209,1460,3604' too, in order to remove complaints about constant expressions, functions being redefined as inline, and missing return statements at the end of non-void functions)

Finally, as a feature-request, is it possibly to change the package name format rules, to allow packages with trailing numerical suffix, as used in prefix-portage, such as "sys-devel/libperl-5.8.8-r01.1"?

(At the moment, eix outputs many 'Garbage at end of version string: .1' mesages)
Comment 37 Martin Väth 2008-02-24 23:27:00 UTC
(In reply to comment #36)
> IRIX still requires '-ptused' to be added to $CXXFLAGS in order to link
> successfully...
> 
> (and could probably do with '-woff 1209,1460,3604'

I guess the prefix ebuild is the proper place for it - it does not seem
reasonable to develop corresponding autotools tests unless you know
a "standard" way.

> rules, to allow packages with trailing numerical suffix, as used in
> prefix-portage, such as "sys-devel/libperl-5.8.8-r01.1"?

AFAIK there was a GLEP or bug report asking for extension of the -r
format. However, to my knowledge there was never an agreement on the format.
Suggestions were from -r1-r1 to only 5.8.8-rx.y or even arbitrary recursion
like 5.8.8a_pre1-r1.2.3b_alpha_p5-r1.2x_rc1-r2
I am not sure whether it is a good idea to support an inofficial and probably
preliminary format until it is clear which one...
(such changes are rather cumbersome and will require a new eix database
format; I would like to minimize changes of this format, since
any change breaks things like update-eix-remote).
Comment 38 Fabian Groffen gentoo-dev 2008-02-25 08:57:41 UTC
(In reply to comment #37)
> (In reply to comment #36)
> > IRIX still requires '-ptused' to be added to $CXXFLAGS in order to link
> > successfully...
> > 
> > (and could probably do with '-woff 1209,1460,3604'
> 
> I guess the prefix ebuild is the proper place for it - it does not seem
> reasonable to develop corresponding autotools tests unless you know
> a "standard" way.

Indeed, we can add this to the CXXFLAGS in the ebuild, quite easily I guess.

> > rules, to allow packages with trailing numerical suffix, as used in
> > prefix-portage, such as "sys-devel/libperl-5.8.8-r01.1"?
> 
> AFAIK there was a GLEP or bug report asking for extension of the -r
> format. However, to my knowledge there was never an agreement on the format.
> Suggestions were from -r1-r1 to only 5.8.8-rx.y or even arbitrary recursion
> like 5.8.8a_pre1-r1.2.3b_alpha_p5-r1.2x_rc1-r2
> I am not sure whether it is a good idea to support an inofficial and probably
> preliminary format until it is clear which one...
> (such changes are rather cumbersome and will require a new eix database
> format; I would like to minimize changes of this format, since
> any change breaks things like update-eix-remote).

I agree here that Prefix's inter-revisions are a pure workaround.  Technically they are not necessary for the main tree.  I think the discussion you refer to here above is a different one, as inter-revisions are nothing more than revisions between revisions with a certain semantic towards the synchronisation process.  See also "Ebuild inter-revisions" under
http://www.gentoo.org/proj/en/gentoo-alt/prefix/techdocs.xml#doc_chap2

I admit that the warnings are annoying, and the best solution IMO would be to have a patch in Prefix that adds support for these revisions in some way, which will never make it upstream, and which will never be applied in mainline Gentoo.  Prefix people could have a different database format for that reason without any problems, if necessary.  Anyway, I'm not familiar with the code, neither have I had time and reason to dive into it to see if this can be done, but if anyone submits such a patch I'm happy to apply it in Prefix.
Comment 39 Martin Väth 2008-02-25 18:17:38 UTC
(In reply to comment #37)
> See also "Ebuild inter-revisions"

That's different. So it is a "supported" format and thus will go into eix.
It is now in svn trunk.
I hope that I understood correctly that the leading "0" for these subrevisions
is non-optional, i.e. 1-r1.1 is not a correct number and will still throw a
"trailing garbage .1" message, because it should be named 1-r01.1 instead.
This is important, because it involves how revisions are sorted
(which was the tricky part of the patch). Usually,
 -r02 < -r1 < -r2
but
 -r02.0 > -r2 > r002.99
Comment 40 Fabian Groffen gentoo-dev 2008-02-25 18:49:07 UTC
(In reply to comment #39)
> (In reply to comment #37)
> > See also "Ebuild inter-revisions"
> 
> That's different. So it is a "supported" format and thus will go into eix.
> It is now in svn trunk.

Ohw, wow thanks!

> I hope that I understood correctly that the leading "0" for these subrevisions
> is non-optional, i.e. 1-r1.1 is not a correct number and will still throw a
> "trailing garbage .1" message, because it should be named 1-r01.1 instead.

Correct.  I did this intentionally.  Prefix Portage doesn't "understand" 1-r1.1 the way I implemented it.  It expects an inter-revision if -r is followed by a 0.  That means that -r02 doesn't exist/is valid for me.  I can't see how this is useful either, but that's a side issue.

> This is important, because it involves how revisions are sorted
> (which was the tricky part of the patch). Usually,
>  -r02 < -r1 < -r2
> but
>  -r02.0 > -r2 > r002.99

-r002.99 is invalid as far as I am concerned.  It probably /is/ accepted by Prefix Portage, but it will treat it as if it were -r02.99 (hence just -r2).
The Portage sources also seem to treat -r02 as -r2, so this behaviour is in line.
Comment 41 Martin Väth 2008-03-06 23:46:21 UTC
Not sure where to post this information...

The just released eix-0.12.0 will hopefully solve two of the issues here,
but this requires two changes in the prefix-ebuild:

1. The ./configure-option --disable-as-needed will skip the false positive
   test for the --as-needed flag.

2. The new cache method "parse|ebuild*" is hopefully much faster than ebuild*
   but should give similarly good results. Use ./configure-option
   "--with-portdir-cache-method=parse|ebuild*" to make it the default for the
   tree (if it is sufficiently fast in your opinion).
   If you think that the speed is inacceptable omit the "|ebuild*" part.

Anyway, I suggest you wait with changes until eix-0.12.0 is in the x86
portage tree, since I guess that this ebuild will probably also have
further changes.
Comment 42 Fabian Groffen gentoo-dev 2008-03-12 20:49:18 UTC
(In reply to comment #41)
> Not sure where to post this information...
> 
> The just released eix-0.12.0 will hopefully solve two of the issues here,
> but this requires two changes in the prefix-ebuild:
> 
> 1. The ./configure-option --disable-as-needed will skip the false positive
>    test for the --as-needed flag.

I added --disable-as-needed, as the choice whether or not --as-needed should be used is up to the user, not to a configure script.  I'll file a bug about this to the eix maintainer to add this in the upstream ebuild too.  (reached consensus on #-dev)

> 2. The new cache method "parse|ebuild*" is hopefully much faster than ebuild*
>    but should give similarly good results. Use ./configure-option
>    "--with-portdir-cache-method=parse|ebuild*" to make it the default for the
>    tree (if it is sufficiently fast in your opinion).
>    If you think that the speed is inacceptable omit the "|ebuild*" part.

Ok, the install message says that parse|ebuild* is the default now.  If so, I can drop the entire configure argument, can I?
Comment 43 Fabian Groffen gentoo-dev 2008-03-13 12:13:32 UTC
All issues appear to have been fixed for IRIX now, see bug #213248

Thanks for all contributions!
Comment 44 Martin Väth 2008-03-13 13:17:58 UTC
(In reply to comment #42)
> Ok, the install message says that parse|ebuild* is the default now.

It is the default for overlay-directories, not for the portage main-directory.
To make it also the default for the latter the ./configure argument is
needed.