[Debichem-devel] mpqc3: FTBFS (Libint library is too old: a recent beta of 2.1.0 is required)

Steve Langasek steve.langasek at canonical.com
Fri Sep 30 19:29:40 UTC 2016


Control: reassign -1 src:libint2
Control: found -1 2.1.0~beta2-2
Control: affects -1 src:mpqc3

I've done some analysis of this build failure in Ubuntu, and it appears the
problem is that libint2 is missing some header includes, which causes build
failures of programs trying to include them.  (Unfortunately, cmake is not
good about showing the actual failing test or its output.)  On arm64 with
libint2-dev 2.1.0~beta2-2, I try to build the test case as follows:

$ cat > /tmp/test.cxx
#include <libint2.hpp>
#include <libint2/boys.h>
#if !(LIBINT_MAJOR_VERSION==2 && LIBINT_MINOR_VERSION==1 && LIBINT_MICRO_VERSION>=0)
# error "Libint2 library is too old"
#endif
int main(int argc, char** argv) {
  libint2::GaussianGmEvalScratch<double,-1> scr;
  scr.init(5);
  // FmEval_Chebyshev3 converted to template in 30ea3cd4474c740bee7713bbc633d60f95b3a4c2
  libint2::FmEval_Chebyshev3<double> cheb_boys_eval(12,1e-15);
  // libint2::finalize defined in 06be4d68a7b0da073469c40ccf49acb9ed62a18e
  libint2::finalize();
  return 0;
}
^D
$ g++ -I/usr/include/eigen3 -I/usr/include/libint2 /tmp/test.cxx -o /tmp/test -lint2

And I see failures about math-related includes, which means this is probably
triggered by a newer toolchain:

In file included from /usr/include/libint2/basis.h:35:0,
                 from /usr/include/libint2/cxxapi.h:30,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/libint2/shell.h: In member function 'void libint2::Shell::renorm()':
/usr/include/libint2/shell.h:130:65: error: 'pow' was not declared in this scope
               const auto two_alpha_to_am32 = pow(two_alpha,c.l+1) * sqrt(two_alpha);
                                                                 ^
/usr/include/libint2/shell.h:130:83: error: 'sqrt' was not declared in this scope
          const auto two_alpha_to_am32 = pow(two_alpha,c.l+1) * sqrt(two_alpha);
                                                                              ^
/usr/include/libint2/shell.h:143:66: error: call of overloaded 'abs(__gnu_cxx::__alloc_traits<std::allocator<double> >::value_type&)' is ambiguous
             max_ln_c = std::max(max_ln_c, log(std::abs(c.coeff[p])));
                                                                  ^
In file included from /usr/include/c++/6/bits/stl_algo.h:59:0,
                 from /usr/include/c++/6/algorithm:62,
                 from /usr/include/libint2/vector.h:26,
                 from /usr/include/libint2/libint2_types.h:4,
                 from /usr/include/libint2.h:33,
                 from /usr/include/libint2/cxxapi.h:26,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/c++/6/cstdlib:172:3: note: candidate: long int std::abs(long int)
   abs(long __i) { return __builtin_labs(__i); }
   ^~~
In file included from /usr/include/c++/6/cstdlib:75:0,
                 from /usr/include/c++/6/bits/stl_algo.h:59,
                 from /usr/include/c++/6/algorithm:62,
                 from /usr/include/libint2/vector.h:26,
                 from /usr/include/libint2/libint2_types.h:4,
                 from /usr/include/libint2.h:33,
                 from /usr/include/libint2/cxxapi.h:26,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/stdlib.h:735:12: note: candidate: int abs(int)
 extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
            ^~~
In file included from /usr/include/c++/6/bits/stl_algo.h:59:0,
                 from /usr/include/c++/6/algorithm:62,
                 from /usr/include/libint2/vector.h:26,
                 from /usr/include/libint2/libint2_types.h:4,
                 from /usr/include/libint2.h:33,
                 from /usr/include/libint2/cxxapi.h:26,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/c++/6/cstdlib:180:3: note: candidate: long long int std::abs(long long int)
   abs(long long __x) { return __builtin_llabs (__x); }
   ^~~
/usr/include/c++/6/cstdlib:185:3: note: candidate: __int128 std::abs(__int128)
   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
   ^~~
In file included from /usr/include/libint2/basis.h:35:0,
                 from /usr/include/libint2/cxxapi.h:30,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/libint2/shell.h:143:67: error: 'log' was not declared in this scope
             max_ln_c = std::max(max_ln_c, log(std::abs(c.coeff[p])));
                                                                   ^
/usr/include/libint2/shell.h: In member function 'void libint2::ShellPair::init(const libint2::Shell&, const libint2::Shell&, const real_t&)':
/usr/include/libint2/shell.h:278:42: error: 'exp' was not declared in this scope
             p.K = exp(minus_rho_times_AB2) * oogamma;
                                          ^
In file included from /usr/include/libint2/cxxapi.h:31:0,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/libint2/solidharmonics.h: In static member function 'static double libint2::solidharmonics::SolidHarmonicsCoefficients<Real>::coeff(int, int, int, int, int)':
/usr/include/libint2/solidharmonics.h:191:20: error: 'M_SQRT2' was not declared in this scope
             return M_SQRT2*pfac*sum;
                    ^~~~~~~
/usr/include/libint2/solidharmonics.h: In instantiation of 'static double libint2::solidharmonics::SolidHarmonicsCoefficients<Real>::coeff(int, int, int, int, int) [with Real = double]':
/usr/include/libint2/solidharmonics.h:96:62:   required from 'void libint2::solidharmonics::SolidHarmonicsCoefficients<Real>::init() [with Real = double]'
/usr/include/libint2/solidharmonics.h:64:15:   required from 'void libint2::solidharmonics::SolidHarmonicsCoefficients<Real>::init(unsigned char) [with Real = double]'
/usr/include/libint2/solidharmonics.h:202:56:   required from here
/usr/include/libint2/solidharmonics.h:163:27: error: 'sqrt' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
           Real pfac = sqrt(Real(fac[2*lx]*fac[2*ly]*fac[2*lz]*fac[l-abs_m])/(fac[2*l]*fac[l]*fac[lx]*fac[ly]*fac[lz]*fac[l+abs_m]));
                       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/features.h:364:0,
                 from /usr/include/limits.h:25,
                 from /usr/lib/gcc/aarch64-linux-gnu/6/include-fixed/limits.h:168,
                 from /usr/lib/gcc/aarch64-linux-gnu/6/include-fixed/syslimits.h:7,
                 from /usr/lib/gcc/aarch64-linux-gnu/6/include-fixed/limits.h:34,
                 from /usr/include/libint2/intrinsic_types.h:24,
                 from /usr/include/libint2.h:31,
                 from /usr/include/libint2/cxxapi.h:26,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/aarch64-linux-gnu/bits/mathcalls.h:156:1: note: 'double sqrt(double)' declared here, later in the translation unit
 __MATHCALL (sqrt,, (_Mdouble_ __x));
 ^
In file included from /usr/include/libint2/cxxapi.h:31:0,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/libint2/solidharmonics.h:186:22: error: 'sqrt' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
           sum *= sqrt(Real(df_Kminus1[2*l])/(df_Kminus1[2*lx]*df_Kminus1[2*ly]*df_Kminus1[2*lz]));
                  ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/features.h:364:0,
                 from /usr/include/limits.h:25,
                 from /usr/lib/gcc/aarch64-linux-gnu/6/include-fixed/limits.h:168,
                 from /usr/lib/gcc/aarch64-linux-gnu/6/include-fixed/syslimits.h:7,
                 from /usr/lib/gcc/aarch64-linux-gnu/6/include-fixed/limits.h:34,
                 from /usr/include/libint2/intrinsic_types.h:24,
                 from /usr/include/libint2.h:31,
                 from /usr/include/libint2/cxxapi.h:26,
                 from /usr/include/libint2.hpp:26,
                 from /tmp/test.cxx:1:
/usr/include/aarch64-linux-gnu/bits/mathcalls.h:156:1: note: 'double sqrt(double)' declared here, later in the translation unit
 __MATHCALL (sqrt,, (_Mdouble_ __x));
 ^

So libint2 assumes that these math functions will be available, without
explicitly including the correct headers.

I don't know why this problem appears to affect every architecture except
for amd64.

It's possible this problem is fixed upstream in libint2 2.1.0-1.1 (I haven't
had a chance yet to check), in which case this bug can be closed and the
mpqc3 builds can be retried.  However, it appears that the new libint2 is
also FTBFS on several architectures with an unrelated problem, so that will
also need to be resolved.

-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                    http://www.debian.org/
slangasek at ubuntu.com                                     vorlon at debian.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/debichem-devel/attachments/20160930/69e5a013/attachment-0002.sig>


More information about the Debichem-devel mailing list