Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

abyss-2.1.0: cannot enable sparsehash due to gcc-5.4.0 with gomp #225

Open
mmokrejs opened this issue May 7, 2018 · 10 comments
Open

abyss-2.1.0: cannot enable sparsehash due to gcc-5.4.0 with gomp #225

mmokrejs opened this issue May 7, 2018 · 10 comments

Comments

@mmokrejs
Copy link
Contributor

mmokrejs commented May 7, 2018

Hi,
I am trying older gcc versions and I received:

checking for tr1/functional... yes
checking boost/functional/hash.hpp usability... yes
checking boost/functional/hash.hpp presence... yes
checking for boost/functional/hash.hpp... yes
checking boost/property_map/property_map.hpp usability... yes
checking boost/property_map/property_map.hpp presence... yes
checking for boost/property_map/property_map.hpp... yes
checking google/sparse_hash_map usability... no
checking google/sparse_hash_map presence... yes
configure: WARNING: google/sparse_hash_map: present but cannot be compiled
configure: WARNING: google/sparse_hash_map:     check for missing prerequisite headers?
configure: WARNING: google/sparse_hash_map: see the Autoconf documentation
configure: WARNING: google/sparse_hash_map:     section "Present But Cannot Be Compiled"
configure: WARNING: google/sparse_hash_map: proceeding with the compiler's result
configure: WARNING:     ## ----------------------------------- ##
configure: WARNING:     ## Report this to abyss-users@bcgsc.ca ##
configure: WARNING:     ## ----------------------------------- ##
checking for google/sparse_hash_map... no
checking unordered_map usability... no
checking unordered_map presence... no
checking for unordered_map... no
checking tr1/unordered_map usability... yes
checking tr1/unordered_map presence... yes
checking for tr1/unordered_map... yes
checking unordered_set usability... no
checking unordered_set presence... no
checking for unordered_set... no
checking tr1/unordered_set usability... yes
checking tr1/unordered_set presence... yes
checking for tr1/unordered_set... yes
checking boost/unordered_set.hpp usability... yes
checking boost/unordered_set.hpp presence... yes
checking for boost/unordered_set.hpp... yes
checking sqlite3.h usability... yes
checking sqlite3.h presence... yes
checking for sqlite3.h... yes
checking for main in -lsqlite3... yes
checking for x86_64-pc-linux-gnu-g++ option to support OpenMP... -fopenmp
configure: error: ABySS should be compiled with Google sparsehash to
	reduce memory usage. It may be downloaded here:
	https://code.google.com/p/sparsehash/

	If you do not wish to use sparsehash, specify --without-sparsehash.

Looking into config.log I see:

configure:8241: checking for x86_64-pc-linux-gnu-g++ option to support OpenMP
configure:8256: x86_64-pc-linux-gnu-g++ -o conftest -O2 -pipe -O2 -pipe -march=native -ftree-vectorize -I/apps/gentoo/var/tmp/portage/sci-biology/abyss-2.1.0/work/abyss
-2.1.0      -isystem/apps/gentoo/var/tmp/portage/sci-biology/abyss-2.1.0/work/abyss-2.1.0/boost_1_56_0    -Wl,--as-needed conftest.cpp -ldl -lm  >&5
conftest.cpp:78:2: error: 'choke' does not name a type
  choke me
  ^
In file included from conftest.cpp:80:0:
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:39:3: error: 'omp_lock_t' does not name a type
 } omp_lock_t;
   ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:86:28: error: variable or field 'omp_init_lock' declared void
 extern void omp_init_lock (omp_lock_t *) __GOMP_NOTHROW;
                            ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:86:28: error: 'omp_lock_t' was not declared in this scope
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:86:40: error: expected primary-expression before ')' token
 extern void omp_init_lock (omp_lock_t *) __GOMP_NOTHROW;
                                        ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:87:31: error: variable or field 'omp_destroy_lock' declared void
 extern void omp_destroy_lock (omp_lock_t *) __GOMP_NOTHROW;
                               ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:87:31: error: 'omp_lock_t' was not declared in this scope
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:87:43: error: expected primary-expression before ')' token
 extern void omp_destroy_lock (omp_lock_t *) __GOMP_NOTHROW;
                                           ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:88:27: error: variable or field 'omp_set_lock' declared void
 extern void omp_set_lock (omp_lock_t *) __GOMP_NOTHROW;
                           ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:88:27: error: 'omp_lock_t' was not declared in this scope
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:88:39: error: expected primary-expression before ')' token
 extern void omp_set_lock (omp_lock_t *) __GOMP_NOTHROW;
                                       ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:89:29: error: variable or field 'omp_unset_lock' declared void
 extern void omp_unset_lock (omp_lock_t *) __GOMP_NOTHROW;
                             ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:89:29: error: 'omp_lock_t' was not declared in this scope
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:89:41: error: expected primary-expression before ')' token
 extern void omp_unset_lock (omp_lock_t *) __GOMP_NOTHROW;
                                         ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:90:27: error: 'omp_lock_t' was not declared in this scope
 extern int omp_test_lock (omp_lock_t *) __GOMP_NOTHROW;
                           ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:90:39: error: expected primary-expression before ')' token
 extern int omp_test_lock (omp_lock_t *) __GOMP_NOTHROW;
                                       ^
/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h:90:41: error: expected ',' or ';' before 'throw'
 extern int omp_test_lock (omp_lock_t *) __GOMP_NOTHROW;
                                         ^
configure:8256: $? = 1

build.log.txt
config.log.txt

@mmokrejs mmokrejs changed the title abyss-2.1.0: cannot enabel sparsehash due to gcc-5.4.0 with gomp abyss-2.1.0: cannot enable sparsehash due to gcc-5.4.0 with gomp May 7, 2018
@benvvalk benvvalk self-assigned this May 7, 2018
@benvvalk
Copy link
Contributor

benvvalk commented May 7, 2018

Hmm, I'm not sure what the issue is. It does indeed look like sparsehash fails to compile with that particular gcc.

I am wondering if sparsehash has changed its minimum requirements, or if you are somehow using a development/experimental version of sparsehash. Could you post any info you can find about the version of sparsehash on your system?

Below I have posted what I believe the relevant area of config.log:

configure:8137: x86_64-pc-linux-gnu-g++ -c -O2 -pipe -O2 -pipe -march=native -ftree-vectorize -I/apps/gentoo/var/tmp/portage/sci-biology/abyss-2.1.0/work/abyss-2.1.0      -isystem/apps/gentoo/var/tmp/portage/sci-biology/abyss-2.1.0/work/abyss-2.1.0/boost_1_56_0 conftest.cpp >&5
In file included from /apps/gentoo/usr/include/sparsehash/sparsetable:227:0,
                 from /apps/gentoo/usr/include/sparsehash/internal/sparsehashtable.h:106,
                 from /apps/gentoo/usr/include/sparsehash/sparse_hash_map:93,
                 from /apps/gentoo/usr/include/google/sparse_hash_map:34,
                 from conftest.cpp:103:
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:98:27: error: 'hash' in namespace 'std' does not name a template type
           class HashFcn = SPARSEHASH_HASH<Key>,   // defined in sparseconfig.h
                           ^
In file included from /apps/gentoo/usr/include/google/sparse_hash_map:34:0,
                 from conftest.cpp:103:
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:98:42: error: expected '>' before '<' token
           class HashFcn = SPARSEHASH_HASH<Key>,   // defined in sparseconfig.h
                                          ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:128:36: error: 'EqualKey' was not declared in this scope
                            SetKey, EqualKey, Alloc> ht;
                                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:128:46: error: 'Alloc' was not declared in this scope
                            SetKey, EqualKey, Alloc> ht;
                                              ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:128:51: error: template argument 6 is invalid
                            SetKey, EqualKey, Alloc> ht;
                                                   ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:128:51: error: template argument 7 is invalid
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:132:20: error: 'ht' is not a class or namespace
   typedef typename ht::key_type key_type;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:135:20: error: 'ht' is not a class or namespace
   typedef typename ht::value_type value_type;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:136:20: error: 'ht' is not a class or namespace
   typedef typename ht::hasher hasher;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:137:20: error: 'ht' is not a class or namespace
   typedef typename ht::key_equal key_equal;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:138:11: error: 'Alloc' does not name a type
   typedef Alloc allocator_type;
           ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:140:20: error: 'ht' is not a class or namespace
   typedef typename ht::size_type size_type;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:141:20: error: 'ht' is not a class or namespace
   typedef typename ht::difference_type difference_type;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:142:20: error: 'ht' is not a class or namespace
   typedef typename ht::pointer pointer;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:143:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_pointer const_pointer;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:144:20: error: 'ht' is not a class or namespace
   typedef typename ht::reference reference;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:145:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_reference const_reference;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:147:20: error: 'ht' is not a class or namespace
   typedef typename ht::iterator iterator;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:148:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_iterator const_iterator;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:149:20: error: 'ht' is not a class or namespace
   typedef typename ht::local_iterator local_iterator;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:150:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_local_iterator const_local_iterator;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:165:3: error: 'allocator_type' does not name a type
   allocator_type get_allocator() const           { return rep.get_allocator(); }
   ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:175:34: error: 'allocator_type' does not name a type
                            const allocator_type& alloc = allocator_type())
                                  ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:184:25: error: 'allocator_type' does not name a type
                   const allocator_type& alloc = allocator_type())
                         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:305:20: error: 'ht' is not a class or namespace
   typedef typename ht::NopointerSerializer NopointerSerializer;
                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:175:73: error: there are no arguments to 'allocator_type' that depend on a template parameter, so a declaration of 'allocator_type' must be available [-fpermissive]
                            const allocator_type& alloc = allocator_type())
                                                                         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:175:73: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:184:64: error: there are no arguments to 'allocator_type' that depend on a template parameter, so a declaration of 'allocator_type' must be available [-fpermissive]
                   const allocator_type& alloc = allocator_type())
                                                                ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::iterator google::sparse_hash_map<Key, T, HashFcn>::begin()':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:153:63: error: request for member 'begin' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   iterator begin()                               { return rep.begin(); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::iterator google::sparse_hash_map<Key, T, HashFcn>::end()':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:154:63: error: request for member 'end' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   iterator end()                                 { return rep.end(); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::const_iterator google::sparse_hash_map<Key, T, HashFcn>::begin() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:155:63: error: request for member 'begin' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   const_iterator begin() const                   { return rep.begin(); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::const_iterator google::sparse_hash_map<Key, T, HashFcn>::end() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:156:63: error: request for member 'end' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   const_iterator end() const                     { return rep.end(); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::local_iterator google::sparse_hash_map<Key, T, HashFcn>::begin(google::sparse_hash_map<Key, T, HashFcn>::size_type)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:159:63: error: request for member 'begin' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   local_iterator begin(size_type i)              { return rep.begin(i); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::local_iterator google::sparse_hash_map<Key, T, HashFcn>::end(google::sparse_hash_map<Key, T, HashFcn>::size_type)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:160:63: error: request for member 'end' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   local_iterator end(size_type i)                { return rep.end(i); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::const_local_iterator google::sparse_hash_map<Key, T, HashFcn>::begin(google::sparse_hash_map<Key, T, HashFcn>::size_type) const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:161:63: error: request for member 'begin' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   const_local_iterator begin(size_type i) const  { return rep.begin(i); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::const_local_iterator google::sparse_hash_map<Key, T, HashFcn>::end(google::sparse_hash_map<Key, T, HashFcn>::size_type) const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:162:63: error: request for member 'end' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   const_local_iterator end(size_type i) const    { return rep.end(i); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::hasher google::sparse_hash_map<Key, T, HashFcn>::hash_funct() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:166:63: error: request for member 'hash_funct' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   hasher hash_funct() const                      { return rep.hash_funct(); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::key_equal google::sparse_hash_map<Key, T, HashFcn>::key_eq() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:168:63: error: request for member 'key_eq' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   key_equal key_eq() const                       { return rep.key_eq(); }
                                                               ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In constructor 'google::sparse_hash_map<Key, T, HashFcn>::sparse_hash_map(InputIterator, InputIterator, google::sparse_hash_map<Key, T, HashFcn>::size_type, const hasher&, const key_equal&, const int&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:186:9: error: request for member 'insert' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.insert(f, l);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::clear()':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:192:45: error: request for member 'clear' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   void clear()                        { rep.clear(); }
                                             ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::swap(google::sparse_hash_map<Key, T, HashFcn>&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:193:45: error: request for member 'swap' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   void swap(sparse_hash_map& hs)      { rep.swap(hs.rep); }
                                             ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::size() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:197:52: error: request for member 'size' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   size_type size() const              { return rep.size(); }
                                                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::max_size() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:198:52: error: request for member 'max_size' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   size_type max_size() const          { return rep.max_size(); }
                                                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'bool google::sparse_hash_map<Key, T, HashFcn>::empty() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:199:52: error: request for member 'empty' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   bool empty() const                  { return rep.empty(); }
                                                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::bucket_count() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:200:52: error: request for member 'bucket_count' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   size_type bucket_count() const      { return rep.bucket_count(); }
                                                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::max_bucket_count() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:201:52: error: request for member 'max_bucket_count' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   size_type max_bucket_count() const  { return rep.max_bucket_count(); }
                                                    ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::bucket_size(google::sparse_hash_map<Key, T, HashFcn>::size_type) const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:204:60: error: request for member 'bucket_size' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   size_type bucket_size(size_type i) const    { return rep.bucket_size(i); }
                                                            ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::bucket(const key_type&) const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:205:60: error: request for member 'bucket' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   size_type bucket(const key_type& key) const { return rep.bucket(key); }
                                                            ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'float google::sparse_hash_map<Key, T, HashFcn>::max_load_factor() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:211:9: error: request for member 'get_resizing_parameters' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
     rep.get_resizing_parameters(&shrink, &grow);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::max_load_factor(float)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:216:9: error: request for member 'get_resizing_parameters' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.get_resizing_parameters(&shrink, &grow);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:217:9: error: request for member 'set_resizing_parameters' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.set_resizing_parameters(shrink, new_grow);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'float google::sparse_hash_map<Key, T, HashFcn>::min_load_factor() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:222:9: error: request for member 'get_resizing_parameters' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
     rep.get_resizing_parameters(&shrink, &grow);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::min_load_factor(float)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:227:9: error: request for member 'get_resizing_parameters' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.get_resizing_parameters(&shrink, &grow);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:228:9: error: request for member 'set_resizing_parameters' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.set_resizing_parameters(new_shrink, grow);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::set_resizing_parameters(float, float)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:232:9: error: request for member 'set_resizing_parameters' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.set_resizing_parameters(shrink, grow);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::resize(google::sparse_hash_map<Key, T, HashFcn>::size_type)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:235:45: error: request for member 'resize' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   void resize(size_type hint)         { rep.resize(hint); }
                                             ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::iterator google::sparse_hash_map<Key, T, HashFcn>::find(const key_type&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:239:67: error: request for member 'find' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   iterator find(const key_type& key)                 { return rep.find(key); }
                                                                   ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::const_iterator google::sparse_hash_map<Key, T, HashFcn>::find(const key_type&) const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:240:67: error: request for member 'find' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   const_iterator find(const key_type& key) const     { return rep.find(key); }
                                                                   ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::count(const key_type&) const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:249:67: error: request for member 'count' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   size_type count(const key_type& key) const         { return rep.count(key); }
                                                                   ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'std::pair<int, int> google::sparse_hash_map<Key, T, HashFcn>::equal_range(const key_type&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:252:16: error: request for member 'equal_range' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     return rep.equal_range(key);
                ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'std::pair<int, int> google::sparse_hash_map<Key, T, HashFcn>::equal_range(const key_type&) const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:256:16: error: request for member 'equal_range' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
     return rep.equal_range(key);
                ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'std::pair<int, bool> google::sparse_hash_map<Key, T, HashFcn>::insert(const value_type&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:261:16: error: request for member 'insert' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     return rep.insert(obj);
                ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::insert(InputIterator, InputIterator)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:264:9: error: request for member 'insert' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.insert(f, l);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::insert(google::sparse_hash_map<Key, T, HashFcn>::const_iterator, google::sparse_hash_map<Key, T, HashFcn>::const_iterator)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:267:9: error: request for member 'insert' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.insert(f, l);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::set_deleted_key(const key_type&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:279:9: error: request for member 'set_deleted_key' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     rep.set_deleted_key(key);
         ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::clear_deleted_key()':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:281:53: error: request for member 'clear_deleted_key' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   void clear_deleted_key()                    { rep.clear_deleted_key(); }
                                                     ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::key_type google::sparse_hash_map<Key, T, HashFcn>::deleted_key() const':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:282:60: error: request for member 'deleted_key' in '((const google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'const ht {aka const int}'
   key_type deleted_key() const                { return rep.deleted_key(); }
                                                            ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'google::sparse_hash_map<Key, T, HashFcn>::size_type google::sparse_hash_map<Key, T, HashFcn>::erase(const key_type&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:285:67: error: request for member 'erase' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   size_type erase(const key_type& key)               { return rep.erase(key); }
                                                                   ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::erase(google::sparse_hash_map<Key, T, HashFcn>::iterator)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:286:60: error: request for member 'erase' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   void erase(iterator it)                            { rep.erase(it); }
                                                            ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'void google::sparse_hash_map<Key, T, HashFcn>::erase(google::sparse_hash_map<Key, T, HashFcn>::iterator, google::sparse_hash_map<Key, T, HashFcn>::iterator)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:287:60: error: request for member 'erase' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   void erase(iterator f, iterator l)                 { rep.erase(f, l); }
                                                            ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'bool google::sparse_hash_map<Key, T, HashFcn>::serialize(ValueSerializer, OUTPUT*)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:317:16: error: request for member 'serialize' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     return rep.serialize(serializer, fp);
                ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'bool google::sparse_hash_map<Key, T, HashFcn>::unserialize(ValueSerializer, INPUT*)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:336:16: error: request for member 'unserialize' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
     return rep.unserialize(serializer, fp);
                ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'bool google::sparse_hash_map<Key, T, HashFcn>::write_metadata(OUTPUT*)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:342:54: error: request for member 'write_metadata' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   bool write_metadata(OUTPUT *fp)       { return rep.write_metadata(fp); }
                                                      ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'bool google::sparse_hash_map<Key, T, HashFcn>::read_metadata(INPUT*)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:345:54: error: request for member 'read_metadata' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   bool read_metadata(INPUT *fp)         { return rep.read_metadata(fp); }
                                                      ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'bool google::sparse_hash_map<Key, T, HashFcn>::write_nopointer_data(OUTPUT*)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:348:54: error: request for member 'write_nopointer_data' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   bool write_nopointer_data(OUTPUT *fp) { return rep.write_nopointer_data(fp); }
                                                      ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In member function 'bool google::sparse_hash_map<Key, T, HashFcn>::read_nopointer_data(INPUT*)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:351:54: error: request for member 'read_nopointer_data' in '((google::sparse_hash_map<Key, T, HashFcn>*)this)->google::sparse_hash_map<Key, T, HashFcn>::rep', which is of non-class type 'google::sparse_hash_map<Key, T, HashFcn>::ht {aka int}'
   bool read_nopointer_data(INPUT *fp)   { return rep.read_nopointer_data(fp); }
                                                      ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: At global scope:
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:356:66: error: wrong number of template arguments (5, should be at least 2)
 inline void swap(sparse_hash_map<Key, T, HashFcn, EqualKey, Alloc>& hm1,
                                                                  ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:101:7: note: provided for 'template<class Key, class T, class HashFcn> class google::sparse_hash_map'
 class sparse_hash_map {
       ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:357:66: error: wrong number of template arguments (5, should be at least 2)
                  sparse_hash_map<Key, T, HashFcn, EqualKey, Alloc>& hm2) {
                                                                  ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:101:7: note: provided for 'template<class Key, class T, class HashFcn> class google::sparse_hash_map'
 class sparse_hash_map {
       ^
/apps/gentoo/usr/include/sparsehash/sparse_hash_map: In function 'void google::swap(int&, int&)':
/apps/gentoo/usr/include/sparsehash/sparse_hash_map:358:7: error: request for member 'swap' in 'hm1', which is of non-class type 'int'
   hm1.swap(hm2);
       ^
configure:8137: $? = 1
configure: failed program was:

@mmokrejs
Copy link
Contributor Author

mmokrejs commented May 7, 2018

It is dev-cpp/sparsehash-2.0.3-r1::gentoo. I thought it could maybe be some issue with headers copied&fixed aside by gcc (it used to poke through headers in /usr/include and correct them in its own copies. Just in case:

$ equery belongs omp.h
 * Searching for omp.h ... 
sys-devel/gcc-4.2.4-r1 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/4.2.4/include/omp.h)
sys-devel/gcc-4.4.7 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.7/include/omp.h)
sys-devel/gcc-4.5.4 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.4/include/omp.h)
sys-devel/gcc-4.7.4 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.4/include/omp.h)
sys-devel/gcc-4.8.5 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.5/include/omp.h)
sys-devel/gcc-4.9.3 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/omp.h)
sys-devel/gcc-4.9.4 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/include/omp.h)
sys-devel/gcc-5.4.0-r4 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/include/omp.h)
sys-devel/gcc-6.3.0 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.0/include/omp.h)
sys-devel/gcc-7.1.0-r1 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/7.1.0/include/omp.h)
sys-devel/gcc-7.2.0-r1 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include/omp.h)
sys-devel/gcc-7.3.0-r1 (/apps/gentoo/usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/include/omp.h)
sys-libs/libomp-5.0.1 (/apps/gentoo/usr/include/omp.h)
$

@benvvalk
Copy link
Contributor

benvvalk commented May 7, 2018

Hmm. sparsehash-2.0.3 is the most recent release, which was published way back in Oct 2015. It is quite possible that there are some gentoo-specific patches to sparsehash that are breaking ABySS compilation.

My guess is that there is a gentoo patch to sparsehash that requires compiling in "C++11" mode (ABySS normally compiles in "C++98" mode). You could test that theory by adding the word CXXFLAGS=-std=c++11 to your configure command. It might solve your issues, but if not, I'm really not sure what to do next.

@sjackman
Copy link
Collaborator

sjackman commented May 7, 2018

If your goal is just to install ABySS, you may wish to try installing ABySS using Linuxbrew. See http://linuxbrew.sh/ then brew install abyss.

If your goal is to fix the Gentoo portage package of ABySS, the Homebrew formula may be a useful reference:
https://github.com/Homebrew/homebrew-core/blob/master/Formula/abyss.rb

@benvvalk
Copy link
Contributor

benvvalk commented May 7, 2018

Thanks, Shaun.

@mmokrejs
Copy link
Contributor Author

mmokrejs commented May 7, 2018

@benvvalk Yes, there is a patch at https://packages.gentoo.org/packages/dev-cpp/sparsehash distributed along 2.0.3-r1. True, the -std=c++11 helped to get the testcase compiled with gcc-5.4.0.

CXXFLAGS="-std=c++11" ...
...
checking google/sparse_hash_map usability... yes
checking google/sparse_hash_map presence... yes
checking for google/sparse_hash_map... yes

Thank you @sjackman , unfortunately the linuxbrew formula does not really help me. I am scratching my head what --disable-dependency-tracking and --disable-silent-rules are useful for but will not investigate now. Yes, I want to have the Gentoo abyss package working, same way like 2.0.2 was.

As I see also with gcc-5.4.0 I am not getting ABYSS-P out, so this blind shot at using older gcc versions was not really helpful anyway.

@sjackman
Copy link
Collaborator

Compiling ABYSS-P requires installing the dependency Open-MPI.

@stale
Copy link

stale bot commented Jun 4, 2018

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

@stale stale bot added the stale label Jun 4, 2018
@benvvalk
Copy link
Contributor

benvvalk commented Jun 4, 2018

keeping this one open until fixed

@stale stale bot removed the stale label Jun 4, 2018
@stale
Copy link

stale bot commented Jun 25, 2018

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants