INCLUDE(CheckCXXSourceRuns) FUNCTION(CHECK_CXX_COMPLEX_BLAS_PROBLEM_CAN_BE_FIXED VARNAME) SET(CMAKE_REQUIRED_LIBRARIES ${TPL_BLAS_LIBRARIES}) SET(SOURCE " #include #define F77_BLAS_MANGLE${F77_BLAS_MANGLE} extern \"C\" { std::complex F77_BLAS_MANGLE(cdotc,CDOTC)( std::complex *ret, const int* n, const std::complex x[], const int* incx, const std::complex y[], const int* incy); } int main() { const int NUM=2; const int INC=1; std::complex f[NUM]; const std::complex ONE = std::complex(1.0,0.0), TWO = std::complex(2.0,0.0); f[0] = ONE; f[1] = ONE; std::complex ret(0.0,0.0); F77_BLAS_MANGLE(cdotc,CDOTC)(&ret, &NUM, f, &INC, f, &INC); return (ret == TWO ? 0 : 1); } " ) CHECK_CXX_SOURCE_RUNS("${SOURCE}" ${VARNAME}) ENDFUNCTION() FUNCTION(CHECK_COMPLEX_BLAS_VECLIB_OKAY VARNAME) SET(CMAKE_REQUIRED_LIBRARIES ${TPL_BLAS_LIBRARIES}) SET(SOURCE " #include #include int main() { const int NUM=2; const int INC=1; std::complex f[NUM]; const std::complex ONE = std::complex(1.0,0.0), TWO = std::complex(2.0,0.0); f[0] = ONE; f[1] = ONE; std::complex ret(0.0,0.0); cblas_cdotc_sub(NUM,f,INC,f,INC,&ret); return (ret == TWO ? 0 : 1); } " ) CHECK_CXX_SOURCE_RUNS("${SOURCE}" ${VARNAME}) ENDFUNCTION()