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/
[email protected] [email protected]
signature.asc
Description: PGP signature

