Modification for ginac-1.8.10/check/exam_Gt.cpp (MacOS 26.3)
Dear Developers of GiNaC, [0] Thank you very much for developing continuously GiNaC, which is a very nice C++ library to write programs for symbolic computation. I recently built ginac-1.8.10 from source code on my MacBook Pro. The compilation stage was successful but the check stage failed. To pass the check stage, I needed several modifications of the source file ginac-1.8.10/check/exam_Gt.cpp. I will explain these modifications below. My environment is the following: OS: macOS Tahoe 26.3 C++ compiler: g++ --version --> Apple clang version 17.0.0 (clang-1700.6.3.2) Target: arm64-apple-darwin25.3.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin [1] The build from the original source code of ginac-1.8.10 produced the following result: mkdir /tmp/AAA /tmp/AAA bzcat /usr/local/src/SymbolicComputation/GiNaC/ginac-1.8.10.tar.bz2 | tar xvf - cd ginac-1.8.10 ./configure make make check --> ... ... /bin/sh ../libtool --tag=CXX --mode=link g++ -g -O2 -o exam_inifcns_elliptic exam_inifcns_elliptic.o ../ginac/libginac.la -L/usr/local/lib -lcln libtool: link: g++ -g -O2 -o .libs/exam_inifcns_elliptic exam_inifcns_elliptic.o -Wl,-bind_at_load ../ginac/.libs/libginac.dylib -ldl -L/usr/local/lib /usr/local/lib/libcln.dylib /usr/local/lib/libgmp.dylib ld: warning: -bind_at_load is deprecated on macOS depbase=`echo exam_Gt.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ g++ -DHAVE_CONFIG_H -I. -I../config -I./../ginac -I../ginac -DIN_GINAC -I/usr/local/include -g -O2 -MT exam_Gt.o -MD -MP -MF $depbase.Tpo -c -o exam_Gt.o exam_Gt.cpp &&\ mv -f $depbase.Tpo $depbase.Po exam_Gt.cpp:1891:17: error: call to 'pow' is ambiguous 1891 | const ex eps = pow(10,-30); | ^~~ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__math/exponential_functions.h:161:65: note: candidate function [with _A1 = int, _A2 = int, $2 = 0] 161 | inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type pow(_A1 __x, _A2 __y) _NOEXCEPT { | ^ ./../ginac/power.h:120:11: note: candidate function [with T1 = int, T2 = int] 120 | inline ex pow(const T1 & b, const T2 & e) | ^ 1 error generated. [2] The above error indicates that pow() in GiNaC and pow() in MacOS conflict as having the same name. Accordingly, I modified exam_Gt.cpp as follows: cd /tmp/AAA/ginac-1.8.10/check mv exam_Gt.cpp exam_Gt.cpp.org cat exam_Gt.cpp.org | sed -e 's/pow(10,-30)/GiNaC::pow(10,-30)/' > exam_Gt.cpp diff -u exam_Gt.cpp.org exam_Gt.cpp --> ------------------------------------------------------------------------------ --- exam_Gt.cpp.org 2026-02-10 01:49:00 +++ exam_Gt.cpp 2026-02-17 07:54:20 @@ -1888,7 +1888,7 @@ }; Digits = 40; - const ex eps = pow(10,-30); + const ex eps = GiNaC::pow(10,-30); auto evaluate = [&](const ex& points) { for (int deform = -1; deform <= +1; deform += 1) { ------------------------------------------------------------------------------ [3] Then the check stage proceeded as follows make check --> ... ... PASS: exam_paranoia PASS: exam_heur_gcd PASS: exam_match PASS: exam_parser PASS: exam_numeric PASS: exam_relational PASS: exam_powerlaws PASS: exam_collect PASS: exam_inifcns PASS: exam_inifcns_nstdsums PASS: exam_inifcns_elliptic ../config/test-driver: line 112: 73792 Abort trap: 6 "$@" >> "$log_file" 2>&1 FAIL: exam_Gt PASS: exam_differentiation PASS: exam_polygcd PASS: exam_collect_common_factors PASS: exam_normalization PASS: exam_sqrfree PASS: exam_factor PASS: exam_pseries PASS: exam_matrices PASS: exam_lsolve PASS: exam_indexed PASS: exam_color PASS: exam_clifford PASS: exam_archive PASS: exam_structure PASS: exam_misc PASS: exam_pgcd PASS: exam_mod_gcd PASS: exam_chinrem_gcd PASS: exam_function_exvector PASS: exam_real_imag PASS: check_numeric PASS: check_inifcns PASS: check_matrices PASS: check_lsolve PASS: check_cra PASS: time_dennyfliegner PASS: time_gammaseries PASS: time_vandermonde PASS: time_toeplitz PASS: time_lw_A PASS: time_lw_B PASS: time_lw_C PASS: time_lw_D PASS: time_lw_E PASS: time_lw_F PASS: time_lw_G PASS: time_lw_H PASS: time_lw_IJKL PASS: time_lw_M1 PASS: time_lw_M2 PASS: time_lw_N PASS: time_lw_O PASS: time_lw_P PASS: time_lw_Pprime PASS: time_lw_Q PASS: time_lw_Qprime PASS: time_antipode PASS: time_fateman_expand PASS: time_uvar_gcd PASS: time_Gt PASS: time_parser ============================================================================ Testsuite summary for GiNaC 1.8.10 ============================================================================ # TOTAL: 63 # PASS: 62 # SKIP: 0 # XFAIL: 0 # FAIL: 1 # XPASS: 0 # ERROR: 0 ============================================================================ See check/test-suite.log for debugging. Some test(s) failed. Please report this to ginac-list@ginac.de, together with the test-suite.log file (gzipped) and your system information. Thanks. ============================================================================ [3] I have investigated the above failure of exam_Gt and found that in exam_Gt.cpp the code fragment lst{lst{A,B}} is expected to produce { { A, B } } but actually produces { A, B } when g++ on my MacOS is used. Namely, the outside constructor lst in lst{lst{A,B}} is interpreted as the copy constructor. Accordingly, I modify lst{lst{A,B}} to lst().append(lst{A,B}) as follows: cat exam_Gt.cpp.org | sed -e 's/lst{\(lst{[^}]*}\)}/lst().append(\1)/' -e 's/pow(10,-30)/GiNaC::pow(10,-30)/' > exam_Gt.cpp [4] Now, the check stage becomes successful as follows: make check --> ... ... e_lw_M2 PASS: time_lw_N PASS: time_lw_O PASS: time_lw_P PASS: time_lw_Pprime PASS: time_lw_Q PASS: time_lw_Qprime PASS: time_antipode PASS: time_fateman_expand PASS: time_uvar_gcd PASS: time_Gt PASS: time_parser ============================================================================ Testsuite summary for GiNaC 1.8.10 ============================================================================ # TOTAL: 63 # PASS: 63 # SKIP: 0 # XFAIL: 0 # FAIL: 0 # XPASS: 0 # ERROR: 0 ============================================================================ Now, everything is fine. I do not know what is the most appropriate way to fix the code fragment lst{lst{A,B}} to produce { { A, B } } and please take the above modification as just a reference. Again, thank you very much for developing and maintaining GiNaC to help us write programs for symbolic commutation. Sincerely yours, Satoshi Adachi
participants (1)
-
足立聡