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

configure forces -std=c++98 but that should be moved to relevant Makefiles or sga code adjusted #156

Open
mmokrejs opened this issue Apr 4, 2019 · 6 comments

Comments

@mmokrejs
Copy link

mmokrejs commented Apr 4, 2019

For me configure does not detect sparsehash-2.0.3 not even with current git master at commit af73db6 :

./configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --disable-dependency-tracking --disable-silent-rules --libdir=/usr/lib64 --with-bamtools=/usr
...
checking google/sparse_hash_set usability... no
checking google/sparse_hash_set presence... yes
configure: WARNING: google/sparse_hash_set: present but cannot be compiled
configure: WARNING: google/sparse_hash_set:     check for missing prerequisite headers?
configure: WARNING: google/sparse_hash_set: see the Autoconf documentation
configure: WARNING: google/sparse_hash_set:     section "Present But Cannot Be Compiled"
configure: WARNING: google/sparse_hash_set: proceeding with the compiler's result
configure: WARNING:     ## -------------------------------- ##
configure: WARNING:     ## Report this to [email protected] ##
configure: WARNING:     ## -------------------------------- ##
checking for google/sparse_hash_set... no
configure: error: google sparse hash library is required: http://code.google.com/p/google-sparsehash/

The config.log states:

configure:5164: checking google/sparse_hash_set usability
configure:5164: x86_64-pc-linux-gnu-g++ -c -std=c++98 -O3  -fopenmp  -I/usr/include -I/usr/include/bamtools conftest.cpp >&5
In file included from /usr/include/sparsehash/sparsetable:227,
                 from /usr/include/sparsehash/internal/sparsehashtable.h:106,
                 from /usr/include/sparsehash/sparse_hash_set:97,
                 from /usr/include/google/sparse_hash_set:34,
                 from conftest.cpp:56:
/usr/include/sparsehash/sparse_hash_set:103:27: error: 'hash' in namespace 'std' does not name a template type
           class HashFcn = SPARSEHASH_HASH<Value>,   // defined in sparseconfig.h
                           ^~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:103:27: note: 'std::hash' is only available from C++11 onwards
           class HashFcn = SPARSEHASH_HASH<Value>,   // defined in sparseconfig.h
                           ^~~~~~~~~~~~~~~
In file included from /usr/include/google/sparse_hash_set:34,
                 from conftest.cpp:56:
/usr/include/sparsehash/sparse_hash_set:103:42: error: expected '>' before '<' token
           class HashFcn = SPARSEHASH_HASH<Value>,   // defined in sparseconfig.h
                                          ^
/usr/include/sparsehash/sparse_hash_set:120:28: error: 'EqualKey' was not declared in this scope
                            EqualKey, Alloc> ht;
                            ^~~~~~~~
/usr/include/sparsehash/sparse_hash_set:120:38: error: 'Alloc' was not declared in this scope
                            EqualKey, Alloc> ht;
                                      ^~~~~
/usr/include/sparsehash/sparse_hash_set:120:38: note: suggested alternative: 'valloc'
                            EqualKey, Alloc> ht;
                                      ^~~~~
                                      valloc
/usr/include/sparsehash/sparse_hash_set:120:43: error: template argument 6 is invalid
                            EqualKey, Alloc> ht;
                                           ^
/usr/include/sparsehash/sparse_hash_set:120:43: error: template argument 7 is invalid
/usr/include/sparsehash/sparse_hash_set:124:20: error: 'ht' is not a class or namespace
   typedef typename ht::key_type key_type;
                    ^~
/usr/include/sparsehash/sparse_hash_set:125:20: error: 'ht' is not a class or namespace
   typedef typename ht::value_type value_type;
                    ^~
/usr/include/sparsehash/sparse_hash_set:126:20: error: 'ht' is not a class or namespace
   typedef typename ht::hasher hasher;
                    ^~
/usr/include/sparsehash/sparse_hash_set:127:20: error: 'ht' is not a class or namespace
   typedef typename ht::key_equal key_equal;
                    ^~
/usr/include/sparsehash/sparse_hash_set:128:11: error: 'Alloc' does not name a type; did you mean 'valloc'?
   typedef Alloc allocator_type;
           ^~~~~
           valloc
/usr/include/sparsehash/sparse_hash_set:130:20: error: 'ht' is not a class or namespace
   typedef typename ht::size_type size_type;
                    ^~
/usr/include/sparsehash/sparse_hash_set:131:20: error: 'ht' is not a class or namespace
   typedef typename ht::difference_type difference_type;
                    ^~
/usr/include/sparsehash/sparse_hash_set:132:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_pointer pointer;
                    ^~
/usr/include/sparsehash/sparse_hash_set:133:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_pointer const_pointer;
                    ^~
/usr/include/sparsehash/sparse_hash_set:134:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_reference reference;
                    ^~
/usr/include/sparsehash/sparse_hash_set:135:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_reference const_reference;
                    ^~
/usr/include/sparsehash/sparse_hash_set:137:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_iterator iterator;
                    ^~
/usr/include/sparsehash/sparse_hash_set:138:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_iterator const_iterator;
                    ^~
/usr/include/sparsehash/sparse_hash_set:139:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_local_iterator local_iterator;
                    ^~
/usr/include/sparsehash/sparse_hash_set:140:20: error: 'ht' is not a class or namespace
   typedef typename ht::const_local_iterator const_local_iterator;
                    ^~
/usr/include/sparsehash/sparse_hash_set:153:3: error: 'allocator_type' does not name a type
   allocator_type get_allocator() const    { return rep.get_allocator(); }
   ^~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:163:34: error: 'allocator_type' does not name a type
                            const allocator_type& alloc = allocator_type())
                                  ^~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:172:25: error: 'allocator_type' does not name a type
                   const allocator_type& alloc = allocator_type())
                         ^~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:281:20: error: 'ht' is not a class or namespace
   typedef typename ht::NopointerSerializer NopointerSerializer;
                    ^~
/usr/include/sparsehash/sparse_hash_set:163:58: 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())
                                                          ^~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:163:58: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/usr/include/sparsehash/sparse_hash_set:172:49: 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())
                                                 ^~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::iterator google::sparse_hash_set<Value, HashFcn>::begin() const':
/usr/include/sparsehash/sparse_hash_set:144:56: error: request for member 'begin' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   iterator begin() const                  { return rep.begin(); }
                                                        ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::iterator google::sparse_hash_set<Value, HashFcn>::end() const':
/usr/include/sparsehash/sparse_hash_set:145:56: error: request for member 'end' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   iterator end() const                    { return rep.end(); }
                                                        ^~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::local_iterator google::sparse_hash_set<Value, HashFcn>::begin(google::sparse_hash_set<Value, HashFcn>::size_type) const':
/usr/include/sparsehash/sparse_hash_set:148:56: error: request for member 'begin' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   local_iterator begin(size_type i) const { return rep.begin(i); }
                                                        ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::local_iterator google::sparse_hash_set<Value, HashFcn>::end(google::sparse_hash_set<Value, HashFcn>::size_type) const':
/usr/include/sparsehash/sparse_hash_set:149:56: error: request for member 'end' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   local_iterator end(size_type i) const   { return rep.end(i); }
                                                        ^~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::hasher google::sparse_hash_set<Value, HashFcn>::hash_funct() const':
/usr/include/sparsehash/sparse_hash_set:154:56: error: request for member 'hash_funct' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   hasher hash_funct() const               { return rep.hash_funct(); }
                                                        ^~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::key_equal google::sparse_hash_set<Value, HashFcn>::key_eq() const':
/usr/include/sparsehash/sparse_hash_set:156:56: error: request for member 'key_eq' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   key_equal key_eq() const                { return rep.key_eq(); }
                                                        ^~~~~~
/usr/include/sparsehash/sparse_hash_set: In constructor 'google::sparse_hash_set<Value, HashFcn>::sparse_hash_set(InputIterator, InputIterator, google::sparse_hash_set<Value, HashFcn>::size_type, const hasher&, const key_equal&, const int&)':
/usr/include/sparsehash/sparse_hash_set:174:9: error: request for member 'insert' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.insert(f, l);
         ^~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::clear()':
/usr/include/sparsehash/sparse_hash_set:180:45: error: request for member 'clear' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   void clear()                        { rep.clear(); }
                                             ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::swap(google::sparse_hash_set<Value, HashFcn>&)':
/usr/include/sparsehash/sparse_hash_set:181:45: error: request for member 'swap' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   void swap(sparse_hash_set& hs)      { rep.swap(hs.rep); }
                                             ^~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::size() const':
/usr/include/sparsehash/sparse_hash_set:185:52: error: request for member 'size' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   size_type size() const              { return rep.size(); }
                                                    ^~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::max_size() const':
/usr/include/sparsehash/sparse_hash_set:186:52: error: request for member 'max_size' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   size_type max_size() const          { return rep.max_size(); }
                                                    ^~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'bool google::sparse_hash_set<Value, HashFcn>::empty() const':
/usr/include/sparsehash/sparse_hash_set:187:52: error: request for member 'empty' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   bool empty() const                  { return rep.empty(); }
                                                    ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::bucket_count() const':
/usr/include/sparsehash/sparse_hash_set:188:52: error: request for member 'bucket_count' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   size_type bucket_count() const      { return rep.bucket_count(); }
                                                    ^~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::max_bucket_count() const':
/usr/include/sparsehash/sparse_hash_set:189:52: error: request for member 'max_bucket_count' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   size_type max_bucket_count() const  { return rep.max_bucket_count(); }
                                                    ^~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::bucket_size(google::sparse_hash_set<Value, HashFcn>::size_type) const':
/usr/include/sparsehash/sparse_hash_set:192:60: error: request for member 'bucket_size' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, 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); }
                                                            ^~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::bucket(const key_type&) const':
/usr/include/sparsehash/sparse_hash_set:193:60: error: request for member 'bucket' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, 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); }
                                                            ^~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'float google::sparse_hash_set<Value, HashFcn>::max_load_factor() const':
/usr/include/sparsehash/sparse_hash_set:199:9: error: request for member 'get_resizing_parameters' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
     rep.get_resizing_parameters(&shrink, &grow);
         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::max_load_factor(float)':
/usr/include/sparsehash/sparse_hash_set:204:9: error: request for member 'get_resizing_parameters' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.get_resizing_parameters(&shrink, &grow);
         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:205:9: error: request for member 'set_resizing_parameters' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.set_resizing_parameters(shrink, new_grow);
         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'float google::sparse_hash_set<Value, HashFcn>::min_load_factor() const':
/usr/include/sparsehash/sparse_hash_set:210:9: error: request for member 'get_resizing_parameters' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
     rep.get_resizing_parameters(&shrink, &grow);
         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::min_load_factor(float)':
/usr/include/sparsehash/sparse_hash_set:215:9: error: request for member 'get_resizing_parameters' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.get_resizing_parameters(&shrink, &grow);
         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:216:9: error: request for member 'set_resizing_parameters' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.set_resizing_parameters(new_shrink, grow);
         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::set_resizing_parameters(float, float)':
/usr/include/sparsehash/sparse_hash_set:220:9: error: request for member 'set_resizing_parameters' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.set_resizing_parameters(shrink, grow);
         ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::resize(google::sparse_hash_set<Value, HashFcn>::size_type)':
/usr/include/sparsehash/sparse_hash_set:223:45: error: request for member 'resize' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   void resize(size_type hint)         { rep.resize(hint); }
                                             ^~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::iterator google::sparse_hash_set<Value, HashFcn>::find(const key_type&) const':
/usr/include/sparsehash/sparse_hash_set:227:67: error: request for member 'find' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   iterator find(const key_type& key) const           { return rep.find(key); }
                                                                   ^~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::count(const key_type&) const':
/usr/include/sparsehash/sparse_hash_set:229:67: error: request for member 'count' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, 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); }
                                                                   ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'std::pair<int, int> google::sparse_hash_set<Value, HashFcn>::equal_range(const key_type&) const':
/usr/include/sparsehash/sparse_hash_set:232:16: error: request for member 'equal_range' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
     return rep.equal_range(key);
                ^~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'std::pair<int, bool> google::sparse_hash_set<Value, HashFcn>::insert(const value_type&)':
/usr/include/sparsehash/sparse_hash_set:238:42: error: wrong number of template arguments (1, should be 2)
     std::pair<typename ht::iterator, bool> p = rep.insert(obj);
                                          ^
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/g++-v8/utility:70,
                 from /usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/g++-v8/algorithm:60,
                 from /usr/include/sparsehash/sparse_hash_set:92,
                 from /usr/include/google/sparse_hash_set:34,
                 from conftest.cpp:56:
/usr/lib/gcc/x86_64-pc-linux-gnu/8.3.0/include/g++-v8/bits/stl_pair.h:208:12: note: provided for 'template<class _T1, class _T2> struct std::pair'
     struct pair
            ^~~~
In file included from /usr/include/google/sparse_hash_set:34,
                 from conftest.cpp:56:
/usr/include/sparsehash/sparse_hash_set:238:52: error: request for member 'insert' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     std::pair<typename ht::iterator, bool> p = rep.insert(obj);
                                                    ^~~~~~
/usr/include/sparsehash/sparse_hash_set:239:40: error: request for member 'first' in 'p', which is of non-class type 'int'
     return std::pair<iterator, bool>(p.first, p.second);   // const to non-const
                                        ^~~~~
/usr/include/sparsehash/sparse_hash_set:239:49: error: request for member 'second' in 'p', which is of non-class type 'int'
     return std::pair<iterator, bool>(p.first, p.second);   // const to non-const
                                                 ^~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::insert(InputIterator, InputIterator)':
/usr/include/sparsehash/sparse_hash_set:242:9: error: request for member 'insert' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.insert(f, l);
         ^~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::insert(google::sparse_hash_set<Value, HashFcn>::const_iterator, google::sparse_hash_set<Value, HashFcn>::const_iterator)':
/usr/include/sparsehash/sparse_hash_set:245:9: error: request for member 'insert' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     rep.insert(f, l);
         ^~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::set_deleted_key(const key_type&)':
/usr/include/sparsehash/sparse_hash_set:256:53: error: request for member 'set_deleted_key' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   void set_deleted_key(const key_type& key)   { rep.set_deleted_key(key); }
                                                     ^~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::clear_deleted_key()':
/usr/include/sparsehash/sparse_hash_set:257:53: error: request for member 'clear_deleted_key' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   void clear_deleted_key()                    { rep.clear_deleted_key(); }
                                                     ^~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::key_type google::sparse_hash_set<Value, HashFcn>::deleted_key() const':
/usr/include/sparsehash/sparse_hash_set:258:60: error: request for member 'deleted_key' in '((const google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'const ht' {aka 'const int'}
   key_type deleted_key() const                { return rep.deleted_key(); }
                                                            ^~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'google::sparse_hash_set<Value, HashFcn>::size_type google::sparse_hash_set<Value, HashFcn>::erase(const key_type&)':
/usr/include/sparsehash/sparse_hash_set:261:67: error: request for member 'erase' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   size_type erase(const key_type& key)               { return rep.erase(key); }
                                                                   ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::erase(google::sparse_hash_set<Value, HashFcn>::iterator)':
/usr/include/sparsehash/sparse_hash_set:262:60: error: request for member 'erase' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   void erase(iterator it)                            { rep.erase(it); }
                                                            ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'void google::sparse_hash_set<Value, HashFcn>::erase(google::sparse_hash_set<Value, HashFcn>::iterator, google::sparse_hash_set<Value, HashFcn>::iterator)':
/usr/include/sparsehash/sparse_hash_set:263:60: error: request for member 'erase' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   void erase(iterator f, iterator l)                 { rep.erase(f, l); }
                                                            ^~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'bool google::sparse_hash_set<Value, HashFcn>::serialize(ValueSerializer, OUTPUT*)':
/usr/include/sparsehash/sparse_hash_set:293:16: error: request for member 'serialize' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     return rep.serialize(serializer, fp);
                ^~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'bool google::sparse_hash_set<Value, HashFcn>::unserialize(ValueSerializer, INPUT*)':
/usr/include/sparsehash/sparse_hash_set:312:16: error: request for member 'unserialize' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
     return rep.unserialize(serializer, fp);
                ^~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'bool google::sparse_hash_set<Value, HashFcn>::write_metadata(OUTPUT*)':
/usr/include/sparsehash/sparse_hash_set:318:54: error: request for member 'write_metadata' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   bool write_metadata(OUTPUT *fp)       { return rep.write_metadata(fp); }
                                                      ^~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'bool google::sparse_hash_set<Value, HashFcn>::read_metadata(INPUT*)':
/usr/include/sparsehash/sparse_hash_set:321:54: error: request for member 'read_metadata' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   bool read_metadata(INPUT *fp)         { return rep.read_metadata(fp); }
                                                      ^~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'bool google::sparse_hash_set<Value, HashFcn>::write_nopointer_data(OUTPUT*)':
/usr/include/sparsehash/sparse_hash_set:324:54: error: request for member 'write_nopointer_data' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   bool write_nopointer_data(OUTPUT *fp) { return rep.write_nopointer_data(fp); }
                                                      ^~~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In member function 'bool google::sparse_hash_set<Value, HashFcn>::read_nopointer_data(INPUT*)':
/usr/include/sparsehash/sparse_hash_set:327:54: error: request for member 'read_nopointer_data' in '((google::sparse_hash_set<Value, HashFcn>*)this)->google::sparse_hash_set<Value, HashFcn>::rep', which is of non-class type 'google::sparse_hash_set<Value, HashFcn>::ht' {aka 'int'}
   bool read_nopointer_data(INPUT *fp)   { return rep.read_nopointer_data(fp); }
                                                      ^~~~~~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: At global scope:
/usr/include/sparsehash/sparse_hash_set:331:63: error: wrong number of template arguments (4, should be at least 1)
 inline void swap(sparse_hash_set<Val, HashFcn, EqualKey, Alloc>& hs1,
                                                               ^
/usr/include/sparsehash/sparse_hash_set:106:7: note: provided for 'template<class Value, class HashFcn> class google::sparse_hash_set'
 class sparse_hash_set {
       ^~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set:332:63: error: wrong number of template arguments (4, should be at least 1)
                  sparse_hash_set<Val, HashFcn, EqualKey, Alloc>& hs2) {
                                                               ^
/usr/include/sparsehash/sparse_hash_set:106:7: note: provided for 'template<class Value, class HashFcn> class google::sparse_hash_set'
 class sparse_hash_set {
       ^~~~~~~~~~~~~~~
/usr/include/sparsehash/sparse_hash_set: In function 'void google::swap(int&, int&)':
/usr/include/sparsehash/sparse_hash_set:333:7: error: request for member 'swap' in 'hs1', which is of non-class type 'int'
   hs1.swap(hs2);
       ^~~~
configure:5164: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "sga"
| #define PACKAGE_TARNAME "sga"
| #define PACKAGE_VERSION "0.10.15"
| #define PACKAGE_STRING "sga 0.10.15"
| #define PACKAGE_BUGREPORT "[email protected]"
| #define PACKAGE_URL ""
| #define PACKAGE "sga"
| #define VERSION "0.10.15"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_OPENMP 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <google/sparse_hash_set>
configure:5164: result: no
configure:5164: checking google/sparse_hash_set presence
configure:5164: x86_64-pc-linux-gnu-g++ -E  -fopenmp  -I/usr/include -I/usr/include/bamtools conftest.cpp
configure:5164: $? = 0
configure:5164: result: yes
configure:5164: WARNING: google/sparse_hash_set: present but cannot be compiled
configure:5164: WARNING: google/sparse_hash_set:     check for missing prerequisite headers?
configure:5164: WARNING: google/sparse_hash_set: see the Autoconf documentation
configure:5164: WARNING: google/sparse_hash_set:     section "Present But Cannot Be Compiled"
configure:5164: WARNING: google/sparse_hash_set: proceeding with the compiler's result
configure:5164: checking for google/sparse_hash_set
configure:5164: result: no
configure:5171: error: google sparse hash library is required: http://code.google.com/p/google-sparsehash/

I dropped the -std=c++98 and now configure checks passed:

--- src/configure.ac.old	2019-04-04 10:22:22.113290603 +0200
+++ src/configure.ac	2019-04-04 10:47:31.362115204 +0200
@@ -92,8 +92,6 @@
 
 # Set compiler flags.
 AC_SUBST(AM_CXXFLAGS, "-Wall -Wextra $fail_on_warning -Wno-unknown-pragmas")
-AC_SUBST(CXXFLAGS, "-std=c++98 -O3")
-AC_SUBST(CFLAGS, "-std=gnu99 -O3")
 AC_SUBST(CPPFLAGS, "$CPPFLAGS $openmp_cppflags $sparsehash_include $bamtools_include")
 AC_SUBST(LDFLAGS, "$openmp_cppflags $external_malloc_ldflags $bamtools_ldflags $LDFLAGS")

Now configure works:

configure:5164: checking google/sparse_hash_set usability
configure:5164: x86_64-pc-linux-gnu-g++ -c   -fopenmp  -I/usr/include -I/usr/include/bamtools conftest.cpp >&5
configure:5164: $? = 0
configure:5164: result: yes
configure:5164: checking google/sparse_hash_set presence
configure:5164: x86_64-pc-linux-gnu-g++ -E  -fopenmp  -I/usr/include -I/usr/include/bamtools conftest.cpp
configure:5164: $? = 0
configure:5164: result: yes
configure:5164: checking for google/sparse_hash_set
configure:5164: result: yes
configure:5185: checking for google/sparse_hash_set
configure:5185: result: yes
configure:5185: checking google/sparse_hash_map usability
configure:5185: x86_64-pc-linux-gnu-g++ -c   -fopenmp  -I/usr/include -I/usr/include/bamtools conftest.cpp >&5
configure:5185: $? = 0
configure:5185: result: yes
configure:5185: checking google/sparse_hash_map presence
configure:5185: x86_64-pc-linux-gnu-g++ -E  -fopenmp  -I/usr/include -I/usr/include/bamtools conftest.cpp
configure:5185: $? = 0
configure:5185: result: yes
configure:5185: checking for google/sparse_hash_map
configure:5185: result: yes
configure:5185: checking unordered_map usability
configure:5185: x86_64-pc-linux-gnu-g++ -c   -fopenmp  -I/usr/include -I/usr/include/bamtools conftest.cpp >&5
configure:5185: $? = 0
configure:5185: result: yes

But, the sga code needs some more tweaks or src/Util/Makefile and src/SGA/Makefile need to append -std=c++98 to CXXFLAGS:

x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I..  -I../Bigraph -I../Thirdparty -fopenmp  -I/usr/include -I/usr/include/bamtools -Wall -Wextra  -Wno-unknown-pragmas -g -O2 -c -o libutil_a-ClusterReader.o `test -f 'ClusterReader.cpp' || echo './'`ClusterReader.cpp
ClusterReader.cpp: In member function 'bool ClusterReader::readCluster(ClusterRecord&)':
ClusterReader.cpp:70:41: error: cannot convert 'std::basic_istream<char>' to 'bool' in initialization
     bool good = getline(*m_pReader, line);
                                         ^
make[2]: *** [Makefile:753: libutil_a-ClusterReader.o] Error 1
make[2]: Leaving directory '/scratch/var/tmp/portage/sci-biology/sga-9999/work/sga-9999/src/Util'
x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I..  -I../Bigraph -I../Thirdparty -fopenmp  -I/usr/include -I/usr/include/bamtools -Wall -Wextra  -Wno-unknown-pragmas -g -O2 -c -o libutil_a-StdAlnTools.o `test -f 'StdAlnTools.cpp' || echo './'`StdAlnTools.cpp
StdAlnTools.cpp: In function 'std::__cxx11::string StdAlnTools::expandCigar(const string&)':
StdAlnTools.cpp:122:34: error: cannot convert 'std::basic_istream<char>' to 'bool' in initialization
         bool success = parser >> code;
                                  ^~~~
...
make[2]: Leaving directory '/scratch/var/tmp/portage/sci-biology/sga-9999/work/sga-9999/src/Util'
x86_64-pc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I..  -I../Util -I../Bigraph -I../SuffixTools -I../StringGraph -I../Concurrency -I../Algorithm -I../SQG -I../Scaffold -I../GraphDiff -I../Thirdparty -fopenmp  -I/usr/include -I/usr/include/bamtools -Wall -Wextra  -Wno-unknown-pragmas -g -O2 -c -o sga-rmdup.o `test -f 'rmdup.cpp' || echo './'`rmdup.cpp
rmdup.cpp: In function 'std::__cxx11::string parseDupHits(const StringVector&, const string&)':
rmdup.cpp:235:62: error: cannot convert 'std::basic_istream<char>' to 'bool' in initialization
         bool valid = getline(*reader_vec[currReaderIdx], line);
                                                              ^
make[2]: *** [Makefile:621: sga-rmdup.o] Error 1
make[2]: Leaving directory '/scratch/var/tmp/portage/sci-biology/sga-9999/work/sga-9999/src/SGA'
@mmokrejs mmokrejs changed the title configure forces -std=c++98 but that should be moved to releavnt Makefiles or sga code adjusted configure forces -std=c++98 but that should be moved to relevant Makefiles or sga code adjusted Apr 4, 2019
@jts
Copy link
Owner

jts commented Apr 4, 2019

Thanks @mmokrejs for the detailed report.

Do you remember how you configured your installation of sparsehash? It should not be looking for std::hash and should have no problems compiling with -std=c++98. I see you've reported a very similar issue here: bcgsc/abyss#225. Was this ever resolved?

@mmokrejs
Copy link
Author

mmokrejs commented Apr 4, 2019

>>> Preparing source in /scratch/var/tmp/portage/dev-cpp/sparsehash-2.0.3-r1/work/sparsehash-sparsehash-2.0.3 ...
 * Applying sparsehash-2.0.3-fix-buildsystem.patch ...                                                                                                           [ ok ]
 * Running eautoreconf in '/scratch/var/tmp/portage/dev-cpp/sparsehash-2.0.3-r1/work/sparsehash-sparsehash-2.0.3' ...
 * Running aclocal -I m4 ...                                                                                                                                     [ ok ]
 * Running autoconf --force ...                                                                                                                                  [ ok ]
 * Running autoheader ...                                                                                                                                        [ ok ]
 * Running automake --add-missing --copy --force-missing ...                                                                                                     [ ok ]
 * Running elibtoolize in: sparsehash-sparsehash-2.0.3/
>>> Source prepared.
>>> Configuring source in /scratch/var/tmp/portage/dev-cpp/sparsehash-2.0.3-r1/work/sparsehash-sparsehash-2.0.3 ...
 * econf: updating sparsehash-sparsehash-2.0.3/config.sub with /usr/share/gnuconfig/config.sub
 * econf: updating sparsehash-sparsehash-2.0.3/config.guess with /usr/share/gnuconfig/config.guess
./configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --disable-dependency-tracking --disable-silent-rules --docdir=/usr/share/doc/sparsehash-2.0.3-r1 --htmldir=/usr/share/doc/sparsehash-2.0.3-r1/html --libdir=/usr/lib64
...

It was built with gcc-8.2.0 or 8.3.0. No special CFLAGS/CXXFLAGS fiddling with -std or similar.

No, the issue in abyss was not solved.

@jts
Copy link
Owner

jts commented Apr 4, 2019

Thanks. I don't see anything there would cause a problem. Can you paste the contents of your sparsehash/internal/sparseconfig.h file?

@mmokrejs
Copy link
Author

mmokrejs commented Apr 4, 2019

$ cat /usr/include/sparsehash/internal/sparseconfig.h
/*
 * NOTE: This file is for internal use only.
 *       Do not use these #defines in your own program!
 */

/* Namespace for Google classes */
#define GOOGLE_NAMESPACE ::google

/* the location of the header defining hash functions */
#define HASH_FUN_H <functional>

/* the namespace of the hash<> function */
#define HASH_NAMESPACE std

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if the system has the type `long long'. */
#define HAVE_LONG_LONG 1

/* Define to 1 if you have the `memcpy' function. */
#define HAVE_MEMCPY 1

/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1

/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1

/* Define to 1 if the system has the type `uint16_t'. */
#define HAVE_UINT16_T 1

/* Define to 1 if the system has the type `u_int16_t'. */
#define HAVE_U_INT16_T 1

/* Define to 1 if the system has the type `__uint16'. */
/* #undef HAVE___UINT16 */

/* The system-provided hash function including the namespace. */
#define SPARSEHASH_HASH HASH_NAMESPACE::hash

/* Stops putting the code inside the Google namespace */
#define _END_GOOGLE_NAMESPACE_ }

/* Puts following code inside the Google namespace */
#define _START_GOOGLE_NAMESPACE_ namespace google {
$

@jts
Copy link
Owner

jts commented Apr 4, 2019

Ok, that confirms your sparsehash is configured to assume c++11 hash functions are available.

I am reluctant to change the dialect to c++11 just over this issue. SGA is no longer used for assembly very often but some subprograms it contains are still useful. Perhaps I should default to using the standard hash map if sparsehash is unavailable instead of dying.

@numpde
Copy link

numpde commented Jul 12, 2020

FWIW, I was able to compile with c++11 with the following changes:

configure.ac
AC_SUBST(CXXFLAGS, "-std=c++11 -O3")

ClusterReader.cpp
bool good = static_cast<bool>(getline(*m_pReader, line));

rmdup.cpp
bool valid = static_cast<bool>(getline(*reader_vec[currReaderIdx], line));

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

No branches or pull requests

3 participants