@@ -18,16 +18,51 @@ qblas_dep = dependency('qblas', fallback: ['qblas', 'qblas_dep'])
1818# Try to find SLEEF system-wide first, fall back to subproject if not found
1919sleef_dep = dependency (' sleef' , fallback : [' sleef' , ' sleef_dep' ], required : false )
2020
21+ use_system_sleef = false
22+ fallback_reason = ''
23+
2124if sleef_dep.found() and sleef_dep.type_name() != ' internal'
22- # SLEEF found system-wide - both sleef and sleefquad are typically in the same installation
25+ # SLEEF found system-wide - verify quad-precision support
2326 cpp = meson .get_compiler(' cpp' )
24- sleefquad_lib = cpp.find_library (' sleefquad' , required : true )
25- sleefquad_dep = declare_dependency (
26- dependencies : [sleef_dep, sleefquad_lib]
27- )
28- message (' Using system-wide SLEEF installation' )
27+ sleefquad_lib = cpp.find_library (' sleefquad' , required : false )
28+
29+ if sleefquad_lib.found()
30+ sleefquad_test_code = '''
31+ #include <sleefquad.h>
32+
33+ int main(void) {
34+ Sleef_quad q1 = Sleef_cast_from_doubleq1(1.0);
35+ Sleef_quad q2 = Sleef_cast_from_doubleq1(2.0);
36+ Sleef_quad result = Sleef_addq1_u05(q1, q2);
37+ return 0;
38+ }
39+ '''
40+ # this should compile and link
41+ quad_works = cpp.links(
42+ sleefquad_test_code,
43+ dependencies : [sleef_dep, sleefquad_lib],
44+ name : ' SLEEF quad-precision support'
45+ )
46+
47+ if quad_works
48+ sleefquad_dep = declare_dependency (
49+ dependencies : [sleef_dep, sleefquad_lib]
50+ )
51+ use_system_sleef = true
52+ else
53+ fallback_reason = ' quad-precision support is not working'
54+ endif
55+ else
56+ fallback_reason = ' sleefquad library is missing'
57+ endif
58+ else
59+ fallback_reason = ' SLEEF not found system-wide'
60+ endif
61+
62+ if use_system_sleef
63+ message (' Using system-wide SLEEF installation with quad-precision support' )
2964else
30- # Fall back to subproject which provides both dependencies
65+ warning ( ' Falling back to SLEEF subproject: ' + fallback_reason)
3166 sleef_subproj = subproject (' sleef' )
3267 sleef_dep = sleef_subproj.get_variable (' sleef_dep' )
3368 sleefquad_dep = sleef_subproj.get_variable (' sleefquad_dep' )
0 commit comments