From b552e46f2fcf2d0e8152aa8ef14d3b163a5de4b5 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 7 Apr 2024 23:13:37 +0100
Subject: [PATCH 01/36] build: add a meson build configuration

---
 meson.build     |   40 +
 src/meson.build | 5368 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 5408 insertions(+)
 create mode 100644 meson.build
 create mode 100644 src/meson.build

diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000000..ae7cd95a15
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,40 @@
+project('FLINT', 'c',
+  version: '3.1.0',
+  license: 'LGPL3+'
+)
+
+cc = meson.get_compiler('c')
+m_dep = cc.find_library('m', required: false)
+
+gmp_dep = dependency('gmp', version: '>= 6.2.1')
+mpfr_dep = dependency('mpfr', version: '>= 4.1.0')
+
+flint_deps = [gmp_dep, mpfr_dep, m_dep]
+
+subdir('src')
+
+headers_all = []
+foreach header : headers
+  headers_all += ['src' / header]
+endforeach
+
+c_files_all = []
+foreach file : c_files_all_subdir
+  c_files_all += ['src' / file]
+endforeach
+
+install_headers(headers_all, subdir: 'flint')
+
+libflint = library('flint', c_files_all,
+  dependencies: flint_deps,
+  include_directories: include_directories('src'),
+)
+
+pkg_mod = import('pkgconfig')
+pkg_mod.generate(
+  libraries: libflint,
+  version : '3.1.0',
+  name: 'flint',
+  filebase: 'flint',
+  description: 'Fast Library for Number Theory'
+)
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000000..5349ceac93
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,5368 @@
+headers = [
+  'acb_calc.h',
+  'acb_dft.h',
+  'acb_dirichlet.h',
+  'acb_elliptic.h',
+  'acb.h',
+  'acb_hypgeom.h',
+  'acb_mat.h',
+  'acb_modular.h',
+  'acb_poly.h',
+  'acb_theta.h',
+  'acb_types.h',
+  'acf.h',
+  'acf_types.h',
+  'aprcl.h',
+  'arb_calc.h',
+  'arb_fmpz_poly.h',
+  'arb_fpwrap.h',
+  'arb.h',
+  'arb_hypgeom.h',
+  'arb_mat.h',
+  'arb_poly.h',
+  'arb_types.h',
+  'arf.h',
+  'arf_types.h',
+  'arith.h',
+  'bernoulli.h',
+  'bool_mat.h',
+  'ca_ext.h',
+  'ca_field.h',
+  'ca.h',
+  'calcium.h',
+  'ca_mat.h',
+  'ca_poly.h',
+  'ca_vec.h',
+  'crt_helpers.h',
+  'dirichlet.h',
+  'dlog.h',
+  'd_mat.h',
+  'double_extras.h',
+  'double_interval.h',
+  'd_vec.h',
+  'fexpr_builtin.h',
+  'fexpr.h',
+  'fft.h',
+  'fft_small.h',
+  'fmpq.h',
+  'fmpq_mat.h',
+  'fmpq_mpoly_factor.h',
+  'fmpq_mpoly.h',
+  'fmpq_poly.h',
+  'fmpq_types.h',
+  'fmpq_vec.h',
+  'fmpz_extras.h',
+  'fmpz_factor.h',
+  'fmpz.h',
+  'fmpzi.h',
+  'fmpz_lll.h',
+  'fmpz_mat.h',
+  'fmpz_mod.h',
+  'fmpz_mod_mat.h',
+  'fmpz_mod_mpoly_factor.h',
+  'fmpz_mod_mpoly.h',
+  'fmpz_mod_poly_factor.h',
+  'fmpz_mod_poly.h',
+  'fmpz_mod_types.h',
+  'fmpz_mod_vec.h',
+  'fmpz_mpoly_factor.h',
+  'fmpz_mpoly.h',
+  'fmpz_mpoly_q.h',
+  'fmpz_poly_factor.h',
+  'fmpz_poly.h',
+  'fmpz_poly_mat.h',
+  'fmpz_poly_q.h',
+  'fmpz_types.h',
+  'fmpz_vec.h',
+  'fq_default.h',
+  'fq_default_mat.h',
+  'fq_default_poly_factor.h',
+  'fq_default_poly.h',
+  'fq_embed.h',
+  'fq_embed_templates.h',
+  'fq.h',
+  'fq_mat.h',
+  'fq_mat_templates.h',
+  'fq_nmod_embed.h',
+  'fq_nmod.h',
+  'fq_nmod_mat.h',
+  'fq_nmod_mpoly_factor.h',
+  'fq_nmod_mpoly.h',
+  'fq_nmod_poly_factor.h',
+  'fq_nmod_poly.h',
+  'fq_nmod_types.h',
+  'fq_nmod_vec.h',
+  'fq_poly_factor.h',
+  'fq_poly_factor_templates.h',
+  'fq_poly.h',
+  'fq_poly_templates.h',
+  'fq_templates.h',
+  'fq_types.h',
+  'fq_vec.h',
+  'fq_vec_templates.h',
+  'fq_zech_embed.h',
+  'fq_zech.h',
+  'fq_zech_mat.h',
+  'fq_zech_mpoly_factor.h',
+  'fq_zech_mpoly.h',
+  'fq_zech_poly_factor.h',
+  'fq_zech_poly.h',
+  'fq_zech_types.h',
+  'fq_zech_vec.h',
+  'gettimeofday.h',
+  'gr_generic.h',
+  'gr.h',
+  'gr_mat.h',
+  'gr_mpoly.h',
+  'gr_poly.h',
+  'gr_special.h',
+  'gr_vec.h',
+  'hypgeom.h',
+  'limb_types.h',
+  'long_extras.h',
+  'longlong_asm_clang.h',
+  'longlong_asm_gcc.h',
+  'longlong_asm_gnu.h',
+  'longlong_div_gnu.h',
+  'longlong.h',
+  'longlong_msc_arm64.h',
+  'longlong_msc_x86.h',
+  'machine_vectors.h',
+  'mag.h',
+  'mpf-impl.h',
+  'mpfr_mat.h',
+  'mpfr_vec.h',
+  'mpn_extras.h',
+  'mpoly.h',
+  'mpoly_types.h',
+  'nf_elem.h',
+  'nf.h',
+  'nmod.h',
+  'nmod_mat.h',
+  'nmod_mpoly_factor.h',
+  'nmod_mpoly.h',
+  'nmod_poly_factor.h',
+  'nmod_poly.h',
+  'nmod_poly_mat.h',
+  'nmod_types.h',
+  'nmod_vec.h',
+  'n_poly.h',
+  'n_poly_types.h',
+  'NTL-interface.h',
+  'padic.h',
+  'padic_mat.h',
+  'padic_poly.h',
+  'padic_types.h',
+  'partitions.h',
+  'perm.h',
+  'profiler.h',
+  'qadic.h',
+  'qfb.h',
+  'qqbar.h',
+  'qsieve.h',
+  'templates.h',
+  'test_helpers.h',
+  'thread_pool.h',
+  'thread_support.h',
+  'ulong_extras.h',
+]
+
+c_files_all_subdir = [
+  # These three not captured by src/*/*.c
+  #'fmpz/link/fmpz_gc.c',
+  #'fmpz/link/fmpz_reentrant.c',
+  'fmpz/link/fmpz_single.c',
+  # src/*/*.c
+  'acb/acos.c',
+  'acb/acosh.c',
+  'acb/addmul.c',
+  'acb/agm1.c',
+  'acb/agm.c',
+  'acb/approx_dot.c',
+  'acb/arg.c',
+  'acb/asin.c',
+  'acb/asinh.c',
+  'acb/atan.c',
+  'acb/atanh.c',
+  'acb/barnes_g.c',
+  'acb/bernoulli_poly_ui.c',
+  'acb_calc/cauchy_bound.c',
+  'acb_calc/integrate.c',
+  'acb_calc/integrate_gl_auto_deg.c',
+  'acb_calc/integrate_opt_init.c',
+  'acb_calc/integrate_taylor.c',
+  'acb/chebyshev_t2_ui.c',
+  'acb/chebyshev_t_ui.c',
+  'acb/chebyshev_u2_ui.c',
+  'acb/chebyshev_u_ui.c',
+  'acb/clear.c',
+  'acb/contains_int.c',
+  'acb/cos.c',
+  'acb/cos_pi.c',
+  'acb/cot.c',
+  'acb/cot_pi.c',
+  'acb/csch.c',
+  'acb/csc_pi.c',
+  'acb/csgn.c',
+  'acb/cube.c',
+  'acb_dft/bluestein.c',
+  'acb_dft/convol.c',
+  'acb_dft/convol_dft.c',
+  'acb_dft/convol_mullow.c',
+  'acb_dft/convol_naive.c',
+  'acb_dft/convol_rad2.c',
+  'acb_dft/crt.c',
+  'acb_dft/cyc.c',
+  'acb_dft/naive.c',
+  'acb_dft/precomp.c',
+  'acb_dft/prod.c',
+  'acb_dft/rad2.c',
+  'acb_dft/rad2_threaded.c',
+  'acb_dft/step.c',
+  'acb/digamma.c',
+  'acb_dirichlet/arb_quadratic_powers.c',
+  'acb_dirichlet/backlund_s_bound.c',
+  'acb_dirichlet/backlund_s.c',
+  'acb_dirichlet/backlund_s_gram.c',
+  'acb_dirichlet/chi.c',
+  'acb_dirichlet/chi_vec.c',
+  'acb_dirichlet/dft.c',
+  'acb_dirichlet/eta.c',
+  'acb_dirichlet/euler_product_real_ui.c',
+  'acb_dirichlet/gauss_sum.c',
+  'acb_dirichlet/gauss_sum_factor.c',
+  'acb_dirichlet/gauss_sum_naive.c',
+  'acb_dirichlet/gauss_sum_order2.c',
+  'acb_dirichlet/gauss_sum_theta.c',
+  'acb_dirichlet/gram_point.c',
+  'acb_dirichlet/hardy_theta.c',
+  'acb_dirichlet/hardy_theta_series.c',
+  'acb_dirichlet/hardy_z.c',
+  'acb_dirichlet/hardy_z_series.c',
+  'acb_dirichlet/hardy_z_zero.c',
+  'acb_dirichlet/hurwitz.c',
+  'acb_dirichlet/hurwitz_precomp_bound.c',
+  'acb_dirichlet/hurwitz_precomp_choose_param.c',
+  'acb_dirichlet/hurwitz_precomp_clear.c',
+  'acb_dirichlet/hurwitz_precomp_eval.c',
+  'acb_dirichlet/hurwitz_precomp_init.c',
+  'acb_dirichlet/isolate_hardy_z_zero.c',
+  'acb_dirichlet/jacobi_sum.c',
+  'acb_dirichlet/jacobi_sum_factor.c',
+  'acb_dirichlet/jacobi_sum_gauss.c',
+  'acb_dirichlet/jacobi_sum_naive.c',
+  'acb_dirichlet/l.c',
+  'acb_dirichlet/lerch_phi.c',
+  'acb_dirichlet/lerch_phi_direct.c',
+  'acb_dirichlet/lerch_phi_integral.c',
+  'acb_dirichlet/l_euler_product.c',
+  'acb_dirichlet/l_fmpq_afe.c',
+  'acb_dirichlet/l_fmpq.c',
+  'acb_dirichlet/l_hurwitz.c',
+  'acb_dirichlet/l_jet.c',
+  'acb_dirichlet/l_series.c',
+  'acb_dirichlet/l_vec_hurwitz.c',
+  'acb_dirichlet/pairing.c',
+  'acb_dirichlet/pairing_conrey.c',
+  'acb_dirichlet/platt_beta.c',
+  'acb_dirichlet/platt_c_bound.c',
+  'acb_dirichlet/platt_hardy_z_zeros.c',
+  'acb_dirichlet/platt_i_bound.c',
+  'acb_dirichlet/platt_lemma_32.c',
+  'acb_dirichlet/platt_lemma_A11.c',
+  'acb_dirichlet/platt_lemma_A5.c',
+  'acb_dirichlet/platt_lemma_A7.c',
+  'acb_dirichlet/platt_lemma_A9.c',
+  'acb_dirichlet/platt_lemma_B1.c',
+  'acb_dirichlet/platt_lemma_B2.c',
+  'acb_dirichlet/platt_local_hardy_z_zeros.c',
+  'acb_dirichlet/platt_multieval.c',
+  'acb_dirichlet/platt_multieval_threaded.c',
+  'acb_dirichlet/platt_ws_interpolation.c',
+  'acb_dirichlet/platt_zeta_zeros.c',
+  'acb_dirichlet/powsum_sieved.c',
+  'acb_dirichlet/powsum_smooth.c',
+  'acb_dirichlet/powsum_term.c',
+  'acb_dirichlet/qseries_arb.c',
+  'acb_dirichlet/qseries_arb_powers.c',
+  'acb_dirichlet/root.c',
+  'acb_dirichlet/root_number.c',
+  'acb_dirichlet/roots_clear.c',
+  'acb_dirichlet/roots_init.c',
+  'acb_dirichlet/si_poly_evaluate.c',
+  'acb_dirichlet/stieltjes.c',
+  'acb_dirichlet/theta_arb.c',
+  'acb_dirichlet/theta_length.c',
+  'acb_dirichlet/turing_method_bound.c',
+  'acb_dirichlet/ui_theta_arb.c',
+  'acb_dirichlet/vec_mellin_arb.c',
+  'acb_dirichlet/xi.c',
+  'acb_dirichlet/zeta_bound.c',
+  'acb_dirichlet/zeta.c',
+  'acb_dirichlet/zeta_jet.c',
+  'acb_dirichlet/zeta_jet_rs.c',
+  'acb_dirichlet/zeta_rs_bound.c',
+  'acb_dirichlet/zeta_rs.c',
+  'acb_dirichlet/zeta_rs_d_coeffs.c',
+  'acb_dirichlet/zeta_rs_f_coeffs.c',
+  'acb_dirichlet/zeta_rs_r.c',
+  'acb_dirichlet/zeta_zeros.c',
+  'acb/div.c',
+  'acb/dot.c',
+  'acb/dot_fmpz.c',
+  'acb/dot_precise.c',
+  'acb/dot_si.c',
+  'acb/dot_simple.c',
+  'acb/dot_siui.c',
+  'acb/dot_ui.c',
+  'acb/dot_uiui.c',
+  'acb_elliptic/e.c',
+  'acb_elliptic/e_inc.c',
+  'acb_elliptic/f.c',
+  'acb_elliptic/invariants.c',
+  'acb_elliptic/inv_p.c',
+  'acb_elliptic/k.c',
+  'acb_elliptic/k_jet.c',
+  'acb_elliptic/k_series.c',
+  'acb_elliptic/p.c',
+  'acb_elliptic/pi.c',
+  'acb_elliptic/p_jet.c',
+  'acb_elliptic/p_prime.c',
+  'acb_elliptic/p_series.c',
+  'acb_elliptic/rc1.c',
+  'acb_elliptic/rf.c',
+  'acb_elliptic/rg.c',
+  'acb_elliptic/rj.c',
+  'acb_elliptic/roots.c',
+  'acb_elliptic/zeta.c',
+  'acb/exp.c',
+  'acb/exp_invexp.c',
+  'acb/expm1.c',
+  'acb/exp_pi_i.c',
+  'acb/gamma.c',
+  'acb/get_abs_lbound_arf.c',
+  'acb/get_abs_ubound_arf.c',
+  'acb/get_mag.c',
+  'acb/get_mag_lower.c',
+  'acb/get_rad_ubound_arf.c',
+  'acb/get_unique_fmpz.c',
+  'acb_hypgeom/0f1.c',
+  'acb_hypgeom/2f1.c',
+  'acb_hypgeom/2f1_choose.c',
+  'acb_hypgeom/2f1_continuation.c',
+  'acb_hypgeom/2f1_corner.c',
+  'acb_hypgeom/2f1_direct.c',
+  'acb_hypgeom/2f1_series_direct.c',
+  'acb_hypgeom/2f1_transform.c',
+  'acb_hypgeom/airy_asymp.c',
+  'acb_hypgeom/airy_bound.c',
+  'acb_hypgeom/airy.c',
+  'acb_hypgeom/airy_direct.c',
+  'acb_hypgeom/airy_jet.c',
+  'acb_hypgeom/airy_series.c',
+  'acb_hypgeom/bessel_i.c',
+  'acb_hypgeom/bessel_j.c',
+  'acb_hypgeom/bessel_k.c',
+  'acb_hypgeom/bessel_y.c',
+  'acb_hypgeom/beta_lower.c',
+  'acb_hypgeom/beta_lower_series.c',
+  'acb_hypgeom/chebyshev_t.c',
+  'acb_hypgeom/chebyshev_u.c',
+  'acb_hypgeom/chi.c',
+  'acb_hypgeom/chi_series.c',
+  'acb_hypgeom/ci.c',
+  'acb_hypgeom/ci_series.c',
+  'acb_hypgeom/coulomb.c',
+  'acb_hypgeom/coulomb_jet.c',
+  'acb_hypgeom/coulomb_series.c',
+  'acb_hypgeom/dilog_bernoulli.c',
+  'acb_hypgeom/dilog_bitburst.c',
+  'acb_hypgeom/dilog.c',
+  'acb_hypgeom/dilog_continuation.c',
+  'acb_hypgeom/dilog_transform.c',
+  'acb_hypgeom/dilog_zero.c',
+  'acb_hypgeom/dilog_zero_taylor.c',
+  'acb_hypgeom/ei.c',
+  'acb_hypgeom/ei_series.c',
+  'acb_hypgeom/erf.c',
+  'acb_hypgeom/erfc.c',
+  'acb_hypgeom/erfc_series.c',
+  'acb_hypgeom/erfi.c',
+  'acb_hypgeom/erfi_series.c',
+  'acb_hypgeom/erf_series.c',
+  'acb_hypgeom/expint.c',
+  'acb_hypgeom/fresnel.c',
+  'acb_hypgeom/fresnel_series.c',
+  'acb_hypgeom/gamma.c',
+  'acb_hypgeom/gamma_lower.c',
+  'acb_hypgeom/gamma_lower_series.c',
+  'acb_hypgeom/gamma_stirling_sum_horner.c',
+  'acb_hypgeom/gamma_stirling_sum_improved.c',
+  'acb_hypgeom/gamma_taylor.c',
+  'acb_hypgeom/gamma_upper.c',
+  'acb_hypgeom/gamma_upper_series.c',
+  'acb_hypgeom/gegenbauer_c.c',
+  'acb_hypgeom/hermite_h.c',
+  'acb_hypgeom/jacobi_p.c',
+  'acb_hypgeom/laguerre_l.c',
+  'acb_hypgeom/legendre_p.c',
+  'acb_hypgeom/legendre_p_uiui_rec.c',
+  'acb_hypgeom/legendre_q.c',
+  'acb_hypgeom/lgamma.c',
+  'acb_hypgeom/li.c',
+  'acb_hypgeom/li_series.c',
+  'acb_hypgeom/log_rising_ui_jet.c',
+  'acb_hypgeom/m.c',
+  'acb_hypgeom/pfq_bound_factor.c',
+  'acb_hypgeom/pfq.c',
+  'acb_hypgeom/pfq_choose_n.c',
+  'acb_hypgeom/pfq_direct.c',
+  'acb_hypgeom/pfq_series_direct.c',
+  'acb_hypgeom/pfq_series_sum_bs.c',
+  'acb_hypgeom/pfq_series_sum.c',
+  'acb_hypgeom/pfq_series_sum_forward.c',
+  'acb_hypgeom/pfq_series_sum_rs.c',
+  'acb_hypgeom/pfq_sum_bs.c',
+  'acb_hypgeom/pfq_sum.c',
+  'acb_hypgeom/pfq_sum_fme.c',
+  'acb_hypgeom/pfq_sum_forward.c',
+  'acb_hypgeom/pfq_sum_rs.c',
+  'acb_hypgeom/rising_ui_bs.c',
+  'acb_hypgeom/rising_ui.c',
+  'acb_hypgeom/rising_ui_forward.c',
+  'acb_hypgeom/rising_ui_jet_bs.c',
+  'acb_hypgeom/rising_ui_jet.c',
+  'acb_hypgeom/rising_ui_jet_powsum.c',
+  'acb_hypgeom/rising_ui_jet_rs.c',
+  'acb_hypgeom/rising_ui_rec.c',
+  'acb_hypgeom/rising_ui_rs.c',
+  'acb_hypgeom/shi.c',
+  'acb_hypgeom/shi_series.c',
+  'acb_hypgeom/si.c',
+  'acb_hypgeom/si_series.c',
+  'acb_hypgeom/spherical_y.c',
+  'acb_hypgeom/u_asymp.c',
+  'acb_hypgeom/u.c',
+  'acb_hypgeom/u_use_asymp.c',
+  'acb/inlines.c',
+  'acb/inv.c',
+  'acb/io.c',
+  'acb/lambertw_asymp.c',
+  'acb/lambertw_bound_deriv.c',
+  'acb/lambertw.c',
+  'acb/lambertw_check_branch.c',
+  'acb/log1p.c',
+  'acb/log.c',
+  'acb/log_sin_pi.c',
+  'acb_mat/add.c',
+  'acb_mat/approx_eig_qr.c',
+  'acb_mat/approx_inv.c',
+  'acb_mat/approx_lu.c',
+  'acb_mat/approx_mul.c',
+  'acb_mat/approx_solve.c',
+  'acb_mat/approx_solve_lu_precomp.c',
+  'acb_mat/approx_solve_tril.c',
+  'acb_mat/approx_solve_triu.c',
+  'acb_mat/bound_frobenius_norm.c',
+  'acb_mat/bound_inf_norm.c',
+  'acb_mat/charpoly.c',
+  'acb_mat/clear.c',
+  'acb_mat/companion.c',
+  'acb_mat/conjugate.c',
+  'acb_mat/contains.c',
+  'acb_mat/contains_fmpq_mat.c',
+  'acb_mat/contains_fmpz_mat.c',
+  'acb_mat/det.c',
+  'acb_mat/det_lu.c',
+  'acb_mat/det_precond.c',
+  'acb_mat/dft.c',
+  'acb_mat/diag_prod.c',
+  'acb_mat/eig_enclosure_rump.c',
+  'acb_mat/eig_global_enclosure.c',
+  'acb_mat/eig_multiple.c',
+  'acb_mat/eig_multiple_rump.c',
+  'acb_mat/eig_simple.c',
+  'acb_mat/eig_simple_rump.c',
+  'acb_mat/eig_simple_vdhoeven_mourrain.c',
+  'acb_mat/eq.c',
+  'acb_mat/equal.c',
+  'acb_mat/exp.c',
+  'acb_mat/exp_taylor_sum.c',
+  'acb_mat/find_pivot_partial.c',
+  'acb_mat/frobenius_norm.c',
+  'acb_mat/get_imag.c',
+  'acb_mat/get_real.c',
+  'acb_mat/indeterminate.c',
+  'acb_mat/init.c',
+  'acb_mat/inlines.c',
+  'acb_mat/inv.c',
+  'acb_mat/io.c',
+  'acb_mat/is_exact.c',
+  'acb_mat/is_finite.c',
+  'acb_mat/is_real.c',
+  'acb_mat/is_tril.c',
+  'acb_mat/is_triu.c',
+  'acb_mat/is_zero.c',
+  'acb_mat/lu.c',
+  'acb_mat/lu_classical.c',
+  'acb_mat/lu_recursive.c',
+  'acb_mat/mul.c',
+  'acb_mat/mul_classical.c',
+  'acb_mat/mul_entrywise.c',
+  'acb_mat/mul_reorder.c',
+  'acb_mat/mul_threaded.c',
+  'acb_mat/ne.c',
+  'acb_mat/neg.c',
+  'acb_mat/one.c',
+  'acb_mat/onei.c',
+  'acb_mat/ones.c',
+  'acb_mat/overlaps.c',
+  'acb_mat/pow_ui.c',
+  'acb_mat/randtest.c',
+  'acb_mat/randtest_eig.c',
+  'acb_mat/set_arb_mat.c',
+  'acb_mat/set.c',
+  'acb_mat/set_fmpq_mat.c',
+  'acb_mat/set_fmpz_mat.c',
+  'acb_mat/set_real_imag.c',
+  'acb_mat/set_round_arb_mat.c',
+  'acb_mat/set_round_fmpz_mat.c',
+  'acb_mat/solve.c',
+  'acb_mat/solve_lu.c',
+  'acb_mat/solve_lu_precomp.c',
+  'acb_mat/solve_precond.c',
+  'acb_mat/solve_tril.c',
+  'acb_mat/solve_triu.c',
+  'acb_mat/sqr.c',
+  'acb_mat/sqr_classical.c',
+  'acb_mat/sub.c',
+  'acb_mat/trace.c',
+  'acb_mat/transpose.c',
+  'acb_mat/vector_mul.c',
+  'acb_mat/window_init.c',
+  'acb_mat/zero.c',
+  'acb_modular/addseq.c',
+  'acb_modular/delta.c',
+  'acb_modular/eisenstein.c',
+  'acb_modular/elliptic_e.c',
+  'acb_modular/elliptic_k.c',
+  'acb_modular/elliptic_k_cpx.c',
+  'acb_modular/elliptic_p.c',
+  'acb_modular/elliptic_p_zpx.c',
+  'acb_modular/epsilon_arg.c',
+  'acb_modular/eta.c',
+  'acb_modular/eta_sum.c',
+  'acb_modular/fill_addseq.c',
+  'acb_modular/fundamental_domain_approx_arf.c',
+  'acb_modular/fundamental_domain_approx.c',
+  'acb_modular/fundamental_domain_approx_d.c',
+  'acb_modular/hilbert_class_poly.c',
+  'acb_modular/inlines.c',
+  'acb_modular/io.c',
+  'acb_modular/is_in_fundamental_domain.c',
+  'acb_modular/j.c',
+  'acb_modular/lambda.c',
+  'acb_modular/psl2z.c',
+  'acb_modular/theta.c',
+  'acb_modular/theta_const_sum_basecase.c',
+  'acb_modular/theta_const_sum.c',
+  'acb_modular/theta_const_sum_rs.c',
+  'acb_modular/theta_jet.c',
+  'acb_modular/theta_jet_notransform.c',
+  'acb_modular/theta_series.c',
+  'acb_modular/theta_sum.c',
+  'acb_modular/theta_transform.c',
+  'acb_modular/transform.c',
+  'acb/mul.c',
+  'acb/mul_naive.c',
+  'acb_poly/add.c',
+  'acb_poly/add_series.c',
+  'acb_poly/add_si.c',
+  'acb_poly/agm1_series.c',
+  'acb_poly/atan_series.c',
+  'acb_poly/binomial_transform_basecase.c',
+  'acb_poly/binomial_transform.c',
+  'acb_poly/binomial_transform_convolution.c',
+  'acb_poly/borel_transform.c',
+  'acb_poly/clear.c',
+  'acb_poly/compose.c',
+  'acb_poly/compose_series.c',
+  'acb_poly/contains.c',
+  'acb_poly/contains_fmpq_poly.c',
+  'acb_poly/contains_fmpz_poly.c',
+  'acb_poly/cosh_series.c',
+  'acb_poly/cos_pi_series.c',
+  'acb_poly/cos_series.c',
+  'acb_poly/cot_pi_series.c',
+  'acb_poly/derivative.c',
+  'acb_poly/digamma_series.c',
+  'acb_poly/divrem.c',
+  'acb_poly/div_root.c',
+  'acb_poly/div_series.c',
+  'acb_poly/elliptic_k_series.c',
+  'acb_poly/elliptic_p_series.c',
+  'acb_poly/equal.c',
+  'acb_poly/erf_series.c',
+  'acb_poly/evaluate2.c',
+  'acb_poly/evaluate2_horner.c',
+  'acb_poly/evaluate2_rectangular.c',
+  'acb_poly/evaluate.c',
+  'acb_poly/evaluate_horner.c',
+  'acb_poly/evaluate_rectangular.c',
+  'acb_poly/evaluate_vec_fast.c',
+  'acb_poly/evaluate_vec_iter.c',
+  'acb_poly/exp_pi_i_series.c',
+  'acb_poly/exp_series_basecase.c',
+  'acb_poly/exp_series.c',
+  'acb_poly/find_roots.c',
+  'acb_poly/fit_length.c',
+  'acb/polygamma.c',
+  'acb_poly/gamma_series.c',
+  'acb_poly/get_coeff_acb.c',
+  'acb_poly/get_unique_fmpz_poly.c',
+  'acb_poly/graeffe_transform.c',
+  'acb_poly/init.c',
+  'acb_poly/inlines.c',
+  'acb_poly/integral.c',
+  'acb_poly/interpolate_barycentric.c',
+  'acb_poly/interpolate_fast.c',
+  'acb_poly/interpolate_newton.c',
+  'acb_poly/inv_borel_transform.c',
+  'acb_poly/inv_series.c',
+  'acb_poly/io.c',
+  'acb_poly/lambertw_series.c',
+  'acb_poly/lgamma_series.c',
+  'acb_poly/log1p_series.c',
+  'acb/polylog.c',
+  'acb_poly/log_series.c',
+  'acb_poly/majorant.c',
+  'acb_poly/mul.c',
+  'acb_poly/mullow.c',
+  'acb_poly/mullow_classical.c',
+  'acb_poly/mullow_transpose.c',
+  'acb_poly/mullow_transpose_gauss.c',
+  'acb_poly/normalise.c',
+  'acb_poly/nth_derivative.c',
+  'acb_poly/overlaps.c',
+  'acb_poly/polylog_series.c',
+  'acb_poly/pow_acb_series.c',
+  'acb_poly/pow_series.c',
+  'acb_poly/powsum_one_series_sieved.c',
+  'acb_poly/powsum_series_naive.c',
+  'acb_poly/powsum_series_naive_threaded.c',
+  'acb_poly/pow_ui.c',
+  'acb_poly/pow_ui_trunc_binexp.c',
+  'acb_poly/product_roots.c',
+  'acb_poly/randtest.c',
+  'acb_poly/refine_roots_durand_kerner.c',
+  'acb_poly/reverse.c',
+  'acb_poly/revert_series.c',
+  'acb_poly/rgamma_series.c',
+  'acb_poly/rising_ui_series.c',
+  'acb_poly/root_bound_fujiwara.c',
+  'acb_poly/root_inclusion.c',
+  'acb_poly/rsqrt_series.c',
+  'acb_poly/set2_arb_poly.c',
+  'acb_poly/set2_fmpq_poly.c',
+  'acb_poly/set2_fmpz_poly.c',
+  'acb_poly/set.c',
+  'acb_poly/set_coeff_acb.c',
+  'acb_poly/set_coeff_si.c',
+  'acb_poly/set_fmpz_poly.c',
+  'acb_poly/set_length.c',
+  'acb_poly/set_round.c',
+  'acb_poly/set_si.c',
+  'acb_poly/set_trunc.c',
+  'acb_poly/set_trunc_round.c',
+  'acb_poly/shift_left.c',
+  'acb_poly/shift_right.c',
+  'acb_poly/sin_cos_series.c',
+  'acb_poly/sinc_series.c',
+  'acb_poly/sinh_cosh_series_basecase.c',
+  'acb_poly/sinh_cosh_series.c',
+  'acb_poly/sinh_cosh_series_exponential.c',
+  'acb_poly/sinh_series.c',
+  'acb_poly/sin_pi_series.c',
+  'acb_poly/sin_series.c',
+  'acb_poly/sqrt_series.c',
+  'acb_poly/sub.c',
+  'acb_poly/sub_series.c',
+  'acb_poly/tan_series.c',
+  'acb_poly/taylor_shift.c',
+  'acb_poly/tree.c',
+  'acb_poly/validate_real_roots.c',
+  'acb_poly/validate_roots.c',
+  'acb_poly/valuation.c',
+  'acb_poly/zeta_em_bound.c',
+  'acb_poly/zeta_em_choose_param.c',
+  'acb_poly/zeta_em_sum.c',
+  'acb_poly/zeta_em_tail_bsplit.c',
+  'acb_poly/zeta_em_tail_naive.c',
+  'acb_poly/zeta_series.c',
+  'acb/pow.c',
+  'acb/quadratic_roots_fmpz.c',
+  'acb/randtest.c',
+  'acb/real_abs.c',
+  'acb/real_ceil.c',
+  'acb/real_floor.c',
+  'acb/real_heaviside.c',
+  'acb/real_max.c',
+  'acb/real_min.c',
+  'acb/real_sgn.c',
+  'acb/real_sqrtpos.c',
+  'acb/rel_error_bits.c',
+  'acb/rising2_ui.c',
+  'acb/rising_ui.c',
+  'acb/rising_ui_get_mag.c',
+  'acb/root_ui.c',
+  'acb/rsqrt.c',
+  'acb/sech.c',
+  'acb/sgn.c',
+  'acb/sin.c',
+  'acb/sinc.c',
+  'acb/sin_cos.c',
+  'acb/sin_cos_pi.c',
+  'acb/sinc_pi.c',
+  'acb/sin_pi.c',
+  'acb/sqrt.c',
+  'acb/sqrts.c',
+  'acb/submul.c',
+  'acb/tan.c',
+  'acb/tan_pi.c',
+  'acb_theta/agm_hadamard.c',
+  'acb_theta/agm_mul.c',
+  'acb_theta/agm_mul_tight.c',
+  'acb_theta/agm_sqrt.c',
+  'acb_theta/all.c',
+  'acb_theta/char_dot_acb.c',
+  'acb_theta/char_dot.c',
+  'acb_theta/char_dot_slong.c',
+  'acb_theta/char_get_a.c',
+  'acb_theta/char_get_acb.c',
+  'acb_theta/char_get_arb.c',
+  'acb_theta/char_get_slong.c',
+  'acb_theta/char_is_even.c',
+  'acb_theta/char_is_goepel.c',
+  'acb_theta/char_is_syzygous.c',
+  'acb_theta/dist_a0.c',
+  'acb_theta/dist_addprec.c',
+  'acb_theta/dist_lat.c',
+  'acb_theta/dist_pt.c',
+  'acb_theta/eld_border.c',
+  'acb_theta/eld_clear.c',
+  'acb_theta/eld_contains.c',
+  'acb_theta/eld_init.c',
+  'acb_theta/eld_points.c',
+  'acb_theta/eld_print.c',
+  'acb_theta/eld_set.c',
+  'acb_theta/g2_character.c',
+  'acb_theta/g2_chi10.c',
+  'acb_theta/g2_chi12.c',
+  'acb_theta/g2_chi35.c',
+  'acb_theta/g2_chi3_6.c',
+  'acb_theta/g2_chi5.c',
+  'acb_theta/g2_covariants.c',
+  'acb_theta/g2_covariants_lead.c',
+  'acb_theta/g2_detk_symj.c',
+  'acb_theta/g2_jet_naive_1.c',
+  'acb_theta/g2_psi4.c',
+  'acb_theta/g2_psi6.c',
+  'acb_theta/g2_sextic.c',
+  'acb_theta/g2_sextic_chi5.c',
+  'acb_theta/g2_transvectant.c',
+  'acb_theta/g2_transvectant_lead.c',
+  'acb_theta/jet_all.c',
+  'acb_theta/jet_compose.c',
+  'acb_theta/jet_error_bounds.c',
+  'acb_theta/jet_exp_pi_i.c',
+  'acb_theta/jet_index.c',
+  'acb_theta/jet_mul.c',
+  'acb_theta/jet_naive_00.c',
+  'acb_theta/jet_naive_all.c',
+  'acb_theta/jet_naive_fixed_ab.c',
+  'acb_theta/jet_naive_radius.c',
+  'acb_theta/jet_nb.c',
+  'acb_theta/jet_ql_all.c',
+  'acb_theta/jet_ql_bounds.c',
+  'acb_theta/jet_ql_finite_diff.c',
+  'acb_theta/jet_ql_radius.c',
+  'acb_theta/jet_total_order.c',
+  'acb_theta/jet_tuples.c',
+  'acb_theta/naive_00.c',
+  'acb_theta/naive_0b.c',
+  'acb_theta/naive_all.c',
+  'acb_theta/naive_fixed_ab.c',
+  'acb_theta/naive_fixed_a.c',
+  'acb_theta/naive_radius.c',
+  'acb_theta/naive_reduce.c',
+  'acb_theta/naive_term.c',
+  'acb_theta/naive_worker.c',
+  'acb_theta/ql_a0.c',
+  'acb_theta/ql_a0_naive.c',
+  'acb_theta/ql_a0_nb_steps.c',
+  'acb_theta/ql_a0_split.c',
+  'acb_theta/ql_a0_steps.c',
+  'acb_theta/ql_all.c',
+  'acb_theta/ql_reduce.c',
+  'acb_theta/siegel_cho.c',
+  'acb_theta/siegel_cocycle.c',
+  'acb_theta/siegel_is_reduced.c',
+  'acb_theta/siegel_randtest.c',
+  'acb_theta/siegel_randtest_reduced.c',
+  'acb_theta/siegel_randtest_vec.c',
+  'acb_theta/siegel_reduce.c',
+  'acb_theta/siegel_transform.c',
+  'acb_theta/siegel_transform_cocycle_inv.c',
+  'acb_theta/siegel_transform_z.c',
+  'acb_theta/siegel_yinv.c',
+  'acb_theta/sp2gz_block_diag.c',
+  'acb_theta/sp2gz_decompose.c',
+  'acb_theta/sp2gz_embed.c',
+  'acb_theta/sp2gz_fundamental.c',
+  'acb_theta/sp2gz_inv.c',
+  'acb_theta/sp2gz_is_block_diag.c',
+  'acb_theta/sp2gz_is_correct.c',
+  'acb_theta/sp2gz_is_embedded.c',
+  'acb_theta/sp2gz_is_j.c',
+  'acb_theta/sp2gz_is_trig.c',
+  'acb_theta/sp2gz_j.c',
+  'acb_theta/sp2gz_nb_fundamental.c',
+  'acb_theta/sp2gz_randtest.c',
+  'acb_theta/sp2gz_restrict.c',
+  'acb_theta/sp2gz_set_blocks.c',
+  'acb_theta/sp2gz_trig.c',
+  'acb_theta/transform_char.c',
+  'acb_theta/transform_kappa2.c',
+  'acb_theta/transform_kappa.c',
+  'acb_theta/transform_proj.c',
+  'acb_theta/transform_sqrtdet.c',
+  'acb/unit_root.c',
+  'acb/urandom.c',
+  'acb/vec_clear.c',
+  'acb/vec_init.c',
+  'acb/vec_set_powers.c',
+  'acb/vec_sort_pretty.c',
+  'acb/vec_unit_roots.c',
+  'acb/zeta.c',
+  'acf/approx_div.c',
+  'acf/approx_dot.c',
+  'acf/approx_sqrt.c',
+  'acf/inlines.c',
+  'aprcl/config_gauss.c',
+  'aprcl/config_jacobi.c',
+  'aprcl/f_table.c',
+  'aprcl/is_mul_coprime.c',
+  'aprcl/is_prime.c',
+  'aprcl/is_prime_final_division.c',
+  'aprcl/is_prime_gauss.c',
+  'aprcl/is_prime_jacobi.c',
+  'aprcl/unity_zp_add.c',
+  'aprcl/unity_zp_aut.c',
+  'aprcl/unity_zp_aut_inv.c',
+  'aprcl/unity_zp_auxiliary_routine.c',
+  'aprcl/unity_zp_coeff.c',
+  'aprcl/unity_zp_copy.c',
+  'aprcl/unity_zp_equal.c',
+  'aprcl/unity_zp_init.c',
+  'aprcl/unity_zp_is_unity.c',
+  'aprcl/unity_zp_jacobi_sum.c',
+  'aprcl/unity_zp_mul.c',
+  'aprcl/unity_zp_pow_2k.c',
+  'aprcl/unity_zp_pow.c',
+  'aprcl/unity_zp_pow_select_k.c',
+  'aprcl/unity_zp_pow_sliding.c',
+  'aprcl/unity_zpq_add.c',
+  'aprcl/unity_zpq_clear.c',
+  'aprcl/unity_zpq_coeff_add.c',
+  'aprcl/unity_zpq_coeff_set.c',
+  'aprcl/unity_zpq_copy.c',
+  'aprcl/unity_zpq_equal.c',
+  'aprcl/unity_zpq_gauss_sum.c',
+  'aprcl/unity_zpq_gauss_sum_character_pow.c',
+  'aprcl/unity_zpq_init.c',
+  'aprcl/unity_zpq_mul.c',
+  'aprcl/unity_zpq_mul_unity_p.c',
+  'aprcl/unity_zpq_pow.c',
+  'aprcl/unity_zpq_swap.c',
+  'aprcl/unity_zp_reduce_cyclotomic.c',
+  'aprcl/unity_zp_set_zero.c',
+  'aprcl/unity_zp_sqr.c',
+  'aprcl/unity_zp_swap.c',
+  'aprcl/utility.c',
+  'arb/abs.c',
+  'arb/acos.c',
+  'arb/acosh.c',
+  'arb/add.c',
+  'arb/add_error.c',
+  'arb/addmul.c',
+  'arb/agm.c',
+  'arb/approx_dot.c',
+  'arb/asin.c',
+  'arb/asinh.c',
+  'arb/atan2.c',
+  'arb/atan_arf_bb.c',
+  'arb/atan_arf.c',
+  'arb/atan.c',
+  'arb/atan_frac_bsplit.c',
+  'arb/atanh.c',
+  'arb/atan_newton.c',
+  'arb/atan_sum_bs_powtab.c',
+  'arb/atan_sum_bs_simple.c',
+  'arb/atan_tab.c',
+  'arb/atan_taylor_naive.c',
+  'arb/atan_taylor_rs.c',
+  'arb/bell_fmpz.c',
+  'arb/bell_sum_bsplit.c',
+  'arb/bell_sum_taylor.c',
+  'arb/bernoulli_fmpz.c',
+  'arb/bernoulli_poly_ui.c',
+  'arb/bernoulli_ui.c',
+  'arb/bernoulli_ui_zeta.c',
+  'arb/bin.c',
+  'arb_calc/io.c',
+  'arb_calc/isolate_roots.c',
+  'arb_calc/newton_conv_factor.c',
+  'arb_calc/newton_step.c',
+  'arb_calc/refine_root_bisect.c',
+  'arb_calc/refine_root_newton.c',
+  'arb_calc/verbose.c',
+  'arb/can_round_mpfr.c',
+  'arb/ceil.c',
+  'arb/chebyshev_t_ui.c',
+  'arb/chebyshev_u_ui.c',
+  'arb/clear.c',
+  'arb/const_apery.c',
+  'arb/const_catalan.c',
+  'arb/const_e.c',
+  'arb/const_euler.c',
+  'arb/const_glaisher.c',
+  'arb/const_khinchin.c',
+  'arb/const_log10.c',
+  'arb/const_log2.c',
+  'arb/const_log_sqrt2pi.c',
+  'arb/const_pi.c',
+  'arb/const_reciprocal_fibonacci.c',
+  'arb/const_sqrt_pi.c',
+  'arb/contains.c',
+  'arb/cot.c',
+  'arb/coth.c',
+  'arb/cot_pi.c',
+  'arb/csc.c',
+  'arb/csch.c',
+  'arb/csc_pi.c',
+  'arb/digamma.c',
+  'arb/div_2expm1_ui.c',
+  'arb/div.c',
+  'arb/dot.c',
+  'arb/dot_fmpz.c',
+  'arb/dot_precise.c',
+  'arb/dot_si.c',
+  'arb/dot_simple.c',
+  'arb/dot_siui.c',
+  'arb/dot_ui.c',
+  'arb/dot_uiui.c',
+  'arb/doublefac_ui.c',
+  'arb/euler_number_fmpz.c',
+  'arb/euler_number_ui.c',
+  'arb/exp_arf_bb.c',
+  'arb/exp_arf.c',
+  'arb/exp_arf_rs_generic.c',
+  'arb/exp.c',
+  'arb/exp_sum_bs_powtab.c',
+  'arb/exp_sum_bs_simple.c',
+  'arb/exp_tab.c',
+  'arb/exp_taylor_bound.c',
+  'arb/exp_taylor_naive.c',
+  'arb/exp_taylor_rs.c',
+  'arb/fac.c',
+  'arb/fib.c',
+  'arb/floor.c',
+  'arb/fma.c',
+  'arb_fmpz_poly/complex_roots.c',
+  'arb_fmpz_poly/deflate.c',
+  'arb_fmpz_poly/deflation.c',
+  'arb_fmpz_poly/evaluate_acb.c',
+  'arb_fmpz_poly/evaluate_acb_horner.c',
+  'arb_fmpz_poly/evaluate_acb_rectangular.c',
+  'arb_fmpz_poly/evaluate_arb.c',
+  'arb_fmpz_poly/evaluate_arb_horner.c',
+  'arb_fmpz_poly/evaluate_arb_rectangular.c',
+  'arb_fmpz_poly/gauss_period_minpoly.c',
+  'arb_fpwrap/fpwrap.c',
+  'arb/gamma.c',
+  'arb/get_abs_lbound_arf.c',
+  'arb/get_abs_ubound_arf.c',
+  'arb/get_fmpz_mid_rad_10exp.c',
+  'arb/get_interval_arf.c',
+  'arb/get_interval_fmpz_2exp.c',
+  'arb/get_interval_mpfr.c',
+  'arb/get_lbound_arf.c',
+  'arb/get_mag_lower.c',
+  'arb/get_mag_lower_nonnegative.c',
+  'arb/get_mpn_fixed_mod_log2.c',
+  'arb/get_mpn_fixed_mod_pi4.c',
+  'arb/get_rand_fmpq.c',
+  'arb/get_str.c',
+  'arb/get_ubound_arf.c',
+  'arb/get_unique_fmpz.c',
+  'arb/hurwitz_zeta.c',
+  'arb_hypgeom/1f1_integration.c',
+  'arb_hypgeom/2f1_integration.c',
+  'arb_hypgeom/airy.c',
+  'arb_hypgeom/airy_jet.c',
+  'arb_hypgeom/airy_series.c',
+  'arb_hypgeom/airy_zero.c',
+  'arb_hypgeom/bessel_i_integration.c',
+  'arb_hypgeom/bessel_k_integration.c',
+  'arb_hypgeom/beta_lower_series.c',
+  'arb_hypgeom/central_bin_ui.c',
+  'arb_hypgeom/chi_series.c',
+  'arb_hypgeom/ci.c',
+  'arb_hypgeom/ci_series.c',
+  'arb_hypgeom/coulomb.c',
+  'arb_hypgeom/coulomb_jet.c',
+  'arb_hypgeom/coulomb_series.c',
+  'arb_hypgeom/ei_series.c',
+  'arb_hypgeom/erf.c',
+  'arb_hypgeom/erfc_series.c',
+  'arb_hypgeom/erfinv.c',
+  'arb_hypgeom/erfi_series.c',
+  'arb_hypgeom/erf_series.c',
+  'arb_hypgeom/fresnel_series.c',
+  'arb_hypgeom/gamma.c',
+  'arb_hypgeom/gamma_fmpq.c',
+  'arb_hypgeom/gamma_lower_series.c',
+  'arb_hypgeom/gamma_lower_sum_rs.c',
+  'arb_hypgeom/gamma_stirling_sum_horner.c',
+  'arb_hypgeom/gamma_stirling_sum_improved.c',
+  'arb_hypgeom/gamma_stirling_term_bounds.c',
+  'arb_hypgeom/gamma_tab.c',
+  'arb_hypgeom/gamma_taylor.c',
+  'arb_hypgeom/gamma_upper_fmpq.c',
+  'arb_hypgeom/gamma_upper_fmpq_step_bsplit.c',
+  'arb_hypgeom/gamma_upper_integration.c',
+  'arb_hypgeom/gamma_upper_series.c',
+  'arb_hypgeom/gamma_upper_sum_rs.c',
+  'arb_hypgeom/legendre_p.c',
+  'arb_hypgeom/legendre_p_ui_asymp.c',
+  'arb_hypgeom/legendre_p_ui.c',
+  'arb_hypgeom/legendre_p_ui_one.c',
+  'arb_hypgeom/legendre_p_ui_rec.c',
+  'arb_hypgeom/legendre_p_ui_root.c',
+  'arb_hypgeom/legendre_p_ui_zero.c',
+  'arb_hypgeom/lgamma.c',
+  'arb_hypgeom/li_series.c',
+  'arb_hypgeom/rising_ui_bs.c',
+  'arb_hypgeom/rising_ui.c',
+  'arb_hypgeom/rising_ui_forward.c',
+  'arb_hypgeom/rising_ui_jet_bs.c',
+  'arb_hypgeom/rising_ui_jet.c',
+  'arb_hypgeom/rising_ui_jet_powsum.c',
+  'arb_hypgeom/rising_ui_jet_rs.c',
+  'arb_hypgeom/rising_ui_rec.c',
+  'arb_hypgeom/rising_ui_rs.c',
+  'arb_hypgeom/shi_series.c',
+  'arb_hypgeom/si.c',
+  'arb_hypgeom/si_series.c',
+  'arb_hypgeom/sum_fmpq_arb_bs.c',
+  'arb_hypgeom/sum_fmpq_arb.c',
+  'arb_hypgeom/sum_fmpq_arb_forward.c',
+  'arb_hypgeom/sum_fmpq_arb_rs.c',
+  'arb_hypgeom/sum_fmpq_imag_arb_bs.c',
+  'arb_hypgeom/sum_fmpq_imag_arb.c',
+  'arb_hypgeom/sum_fmpq_imag_arb_forward.c',
+  'arb_hypgeom/sum_fmpq_imag_arb_rs.c',
+  'arb_hypgeom/u_integration.c',
+  'arb_hypgeom/wrappers.c',
+  'arb/hypot.c',
+  'arb/indeterminate.c',
+  'arb/inlines.c',
+  'arb/intersection.c',
+  'arb/io.c',
+  'arb/is_finite.c',
+  'arb/lambertw.c',
+  'arb/log1p.c',
+  'arb/log_arf.c',
+  'arb/log_base_ui.c',
+  'arb/log.c',
+  'arb/log_hypot.c',
+  'arb/log_newton.c',
+  'arb/log_precompute_reductions.c',
+  'arb/log_primes.c',
+  'arb/log_reduce.c',
+  'arb/log_tab.c',
+  'arb/log_ui.c',
+  'arb_mat/add.c',
+  'arb_mat/addmul_rad_mag_fast.c',
+  'arb_mat/approx_inv.c',
+  'arb_mat/approx_lu.c',
+  'arb_mat/approx_mul.c',
+  'arb_mat/approx_solve.c',
+  'arb_mat/approx_solve_lu_precomp.c',
+  'arb_mat/approx_solve_tril.c',
+  'arb_mat/approx_solve_triu.c',
+  'arb_mat/bound_frobenius_norm.c',
+  'arb_mat/bound_inf_norm.c',
+  'arb_mat/charpoly.c',
+  'arb_mat/cho.c',
+  'arb_mat/clear.c',
+  'arb_mat/companion.c',
+  'arb_mat/contains.c',
+  'arb_mat/contains_fmpq_mat.c',
+  'arb_mat/contains_fmpz_mat.c',
+  'arb_mat/count_is_zero.c',
+  'arb_mat/dct.c',
+  'arb_mat/det.c',
+  'arb_mat/det_lu.c',
+  'arb_mat/det_precond.c',
+  'arb_mat/diag_prod.c',
+  'arb_mat/entrywise_is_zero.c',
+  'arb_mat/entrywise_not_is_zero.c',
+  'arb_mat/eq.c',
+  'arb_mat/equal.c',
+  'arb_mat/exp.c',
+  'arb_mat/exp_taylor_sum.c',
+  'arb_mat/find_pivot_partial.c',
+  'arb_mat/frobenius_norm.c',
+  'arb_mat/hilbert.c',
+  'arb_mat/indeterminate.c',
+  'arb_mat/init.c',
+  'arb_mat/inlines.c',
+  'arb_mat/inv.c',
+  'arb_mat/inv_cho_precomp.c',
+  'arb_mat/inv_ldl_precomp.c',
+  'arb_mat/io.c',
+  'arb_mat/is_exact.c',
+  'arb_mat/is_finite.c',
+  'arb_mat/is_tril.c',
+  'arb_mat/is_triu.c',
+  'arb_mat/is_zero.c',
+  'arb_mat/ldl.c',
+  'arb_mat/lu.c',
+  'arb_mat/lu_classical.c',
+  'arb_mat/lu_recursive.c',
+  'arb_mat/mul_block.c',
+  'arb_mat/mul.c',
+  'arb_mat/mul_classical.c',
+  'arb_mat/mul_entrywise.c',
+  'arb_mat/mul_threaded.c',
+  'arb_mat/ne.c',
+  'arb_mat/neg.c',
+  'arb_mat/one.c',
+  'arb_mat/ones.c',
+  'arb_mat/overlaps.c',
+  'arb_mat/pascal.c',
+  'arb_mat/pow_ui.c',
+  'arb_mat/randtest.c',
+  'arb_mat/randtest_cho.c',
+  'arb_mat/randtest_spd.c',
+  'arb_mat/set.c',
+  'arb_mat/set_fmpq_mat.c',
+  'arb_mat/set_fmpz_mat.c',
+  'arb_mat/set_round_fmpz_mat.c',
+  'arb_mat/solve.c',
+  'arb_mat/solve_cho_precomp.c',
+  'arb_mat/solve_ldl_precomp.c',
+  'arb_mat/solve_lu.c',
+  'arb_mat/solve_lu_precomp.c',
+  'arb_mat/solve_preapprox.c',
+  'arb_mat/solve_precond.c',
+  'arb_mat/solve_tril.c',
+  'arb_mat/solve_triu.c',
+  'arb_mat/spd_get_fmpz_mat.c',
+  'arb_mat/spd_inv.c',
+  'arb_mat/spd_is_lll_reduced.c',
+  'arb_mat/spd_lll_reduce.c',
+  'arb_mat/spd_solve.c',
+  'arb_mat/sqr.c',
+  'arb_mat/sqr_classical.c',
+  'arb_mat/stirling.c',
+  'arb_mat/sub.c',
+  'arb_mat/trace.c',
+  'arb_mat/transpose.c',
+  'arb_mat/vector_mul.c',
+  'arb_mat/window_init.c',
+  'arb_mat/zero.c',
+  'arb/max.c',
+  'arb/min.c',
+  'arb/minmax.c',
+  'arb/mul_2exp_si.c',
+  'arb/mul.c',
+  'arb/neg.c',
+  'arb/neg_round.c',
+  'arb/nint.c',
+  'arb/nonnegative_abs.c',
+  'arb/nonnegative_part.c',
+  'arb/one.c',
+  'arb/overlaps.c',
+  'arb/partitions_fmpz.c',
+  'arb_poly/acos_series.c',
+  'arb_poly/add.c',
+  'arb_poly/add_series.c',
+  'arb_poly/add_si.c',
+  'arb_poly/asin_series.c',
+  'arb_poly/atan_series.c',
+  'arb_poly/binomial_transform_basecase.c',
+  'arb_poly/binomial_transform.c',
+  'arb_poly/binomial_transform_convolution.c',
+  'arb_poly/borel_transform.c',
+  'arb_poly/clear.c',
+  'arb_poly/compose.c',
+  'arb_poly/compose_series.c',
+  'arb_poly/contains.c',
+  'arb_poly/contains_fmpq_poly.c',
+  'arb_poly/contains_fmpz_poly.c',
+  'arb_poly/cosh_series.c',
+  'arb_poly/cos_pi_series.c',
+  'arb_poly/cos_series.c',
+  'arb_poly/cot_pi_series.c',
+  'arb_poly/derivative.c',
+  'arb_poly/digamma_series.c',
+  'arb_poly/divrem.c',
+  'arb_poly/div_root.c',
+  'arb_poly/div_series.c',
+  'arb_poly/equal.c',
+  'arb_poly/evaluate2_acb.c',
+  'arb_poly/evaluate2_acb_horner.c',
+  'arb_poly/evaluate2_acb_rectangular.c',
+  'arb_poly/evaluate2.c',
+  'arb_poly/evaluate2_horner.c',
+  'arb_poly/evaluate2_rectangular.c',
+  'arb_poly/evaluate_acb.c',
+  'arb_poly/evaluate_acb_horner.c',
+  'arb_poly/evaluate_acb_rectangular.c',
+  'arb_poly/evaluate.c',
+  'arb_poly/evaluate_horner.c',
+  'arb_poly/evaluate_rectangular.c',
+  'arb_poly/evaluate_vec_fast.c',
+  'arb_poly/evaluate_vec_iter.c',
+  'arb_poly/exp_series_basecase.c',
+  'arb_poly/exp_series.c',
+  'arb_poly/fit_length.c',
+  'arb_poly/gamma_series.c',
+  'arb_poly/get_coeff_arb.c',
+  'arb_poly/get_unique_fmpz_poly.c',
+  'arb_poly/graeffe_transform.c',
+  'arb_poly/init.c',
+  'arb_poly/inlines.c',
+  'arb_poly/integral.c',
+  'arb_poly/interpolate_barycentric.c',
+  'arb_poly/interpolate_fast.c',
+  'arb_poly/interpolate_newton.c',
+  'arb_poly/inv_borel_transform.c',
+  'arb_poly/inv_series.c',
+  'arb_poly/io.c',
+  'arb_poly/lambertw_series.c',
+  'arb_poly/lgamma_series.c',
+  'arb_poly/log1p_series.c',
+  'arb/polylog.c',
+  'arb_poly/log_series.c',
+  'arb_poly/majorant.c',
+  'arb_poly/mul.c',
+  'arb_poly/mullow_block.c',
+  'arb_poly/mullow.c',
+  'arb_poly/mullow_classical.c',
+  'arb_poly/newton_convergence_factor.c',
+  'arb_poly/newton_refine_root.c',
+  'arb_poly/newton_step.c',
+  'arb_poly/normalise.c',
+  'arb_poly/nth_derivative.c',
+  'arb_poly/overlaps.c',
+  'arb_poly/pow_arb_series.c',
+  'arb_poly/pow_series.c',
+  'arb_poly/pow_ui.c',
+  'arb_poly/pow_ui_trunc_binexp.c',
+  'arb_poly/product_roots.c',
+  'arb_poly/product_roots_complex.c',
+  'arb_poly/randtest.c',
+  'arb_poly/reverse.c',
+  'arb_poly/revert_series.c',
+  'arb_poly/rgamma_series.c',
+  'arb_poly/riemann_siegel_theta_series.c',
+  'arb_poly/riemann_siegel_z_series.c',
+  'arb_poly/rising_ui_series.c',
+  'arb_poly/root_bound_fujiwara.c',
+  'arb_poly/rsqrt_series.c',
+  'arb_poly/set.c',
+  'arb_poly/set_coeff_arb.c',
+  'arb_poly/set_coeff_si.c',
+  'arb_poly/set_fmpq_poly.c',
+  'arb_poly/set_fmpz_poly.c',
+  'arb_poly/set_length.c',
+  'arb_poly/set_round.c',
+  'arb_poly/set_si.c',
+  'arb_poly/set_trunc.c',
+  'arb_poly/set_trunc_round.c',
+  'arb_poly/shift_left.c',
+  'arb_poly/shift_right.c',
+  'arb_poly/sin_cos_series.c',
+  'arb_poly/sinc_pi_series.c',
+  'arb_poly/sinc_series.c',
+  'arb_poly/sinh_cosh_series_basecase.c',
+  'arb_poly/sinh_cosh_series.c',
+  'arb_poly/sinh_cosh_series_exponential.c',
+  'arb_poly/sinh_series.c',
+  'arb_poly/sin_pi_series.c',
+  'arb_poly/sin_series.c',
+  'arb_poly/sqrt_series.c',
+  'arb_poly/sub.c',
+  'arb_poly/sub_series.c',
+  'arb_poly/swinnerton_dyer_ui.c',
+  'arb_poly/tan_series.c',
+  'arb_poly/taylor_shift.c',
+  'arb_poly/tree.c',
+  'arb_poly/valuation.c',
+  'arb_poly/zeta_series.c',
+  'arb/pow.c',
+  'arb/power_sum_vec.c',
+  'arb/pow_fmpq.c',
+  'arb/pow_fmpz_binexp.c',
+  'arb/pow_fmpz.c',
+  'arb/primorial.c',
+  'arb/randtest.c',
+  'arb/rel_error_bits.c',
+  'arb/richcmp.c',
+  'arb/rising2_ui.c',
+  'arb/rising_fmpq_ui.c',
+  'arb/rising_ui.c',
+  'arb/root_ui.c',
+  'arb/sec.c',
+  'arb/sech.c',
+  'arb/set.c',
+  'arb/set_interval.c',
+  'arb/set_round.c',
+  'arb/set_str.c',
+  'arb/sgn.c',
+  'arb/sgn_nonzero.c',
+  'arb/sinc.c',
+  'arb/sin_cos_arf_bb.c',
+  'arb/sin_cos_arf_generic.c',
+  'arb/sin_cos.c',
+  'arb/sin_cos_generic.c',
+  'arb/sin_cos_pi.c',
+  'arb/sin_cos_pi_fmpq_algebraic.c',
+  'arb/sin_cos_pi_fmpq.c',
+  'arb/sin_cos_tab.c',
+  'arb/sin_cos_taylor_naive.c',
+  'arb/sin_cos_taylor_rs.c',
+  'arb/sin_cos_wide.c',
+  'arb/sinc_pi.c',
+  'arb/sinh_cosh.c',
+  'arb/sqrt1pm1.c',
+  'arb/sqrt.c',
+  'arb/sqrtpos.c',
+  'arb/sub.c',
+  'arb/submul.c',
+  'arb/tan.c',
+  'arb/tanh.c',
+  'arb/tan_pi.c',
+  'arb/trim.c',
+  'arb/trunc.c',
+  'arb/ui_pow_ui.c',
+  'arb/union.c',
+  'arb/urandom.c',
+  'arb/vec_clear.c',
+  'arb/vec_get_mag.c',
+  'arb/vec_init.c',
+  'arb/vec_set_powers.c',
+  'arb/zero.c',
+  'arb/zeta.c',
+  'arb/zeta_ui_bernoulli.c',
+  'arb/zeta_ui_borwein_bsplit.c',
+  'arb/zeta_ui.c',
+  'arb/zeta_ui_euler_product.c',
+  'arb/zeta_ui_vec_borwein.c',
+  'arb/zeta_ui_vec.c',
+  'arb/zeta_ui_vec_even.c',
+  'arb/zeta_ui_vec_odd.c',
+  'arf/abs_bound_lt_2exp_si.c',
+  'arf/add.c',
+  'arf/add_mpn.c',
+  'arf/addmul.c',
+  'arf/approx_dot.c',
+  'arf/call_mpfr_func.c',
+  'arf/ceil.c',
+  'arf/clear.c',
+  'arf/cmp.c',
+  'arf/complex_mul.c',
+  'arf/debug.c',
+  'arf/div.c',
+  'arf/equal.c',
+  'arf/floor.c',
+  'arf/fma.c',
+  'arf/frexp.c',
+  'arf/get.c',
+  'arf/inlines.c',
+  'arf/io.c',
+  'arf/is_int_2exp_si.c',
+  'arf/is_int.c',
+  'arf/memory_manager.c',
+  'arf/mul_rnd_any.c',
+  'arf/mul_rnd_down.c',
+  'arf/mul_special.c',
+  'arf/mul_tmp_cleanup.c',
+  'arf/mul_via_mpfr.c',
+  'arf/neg_round.c',
+  'arf/randtest.c',
+  'arf/root.c',
+  'arf/rsqrt.c',
+  'arf/set.c',
+  'arf/set_round.c',
+  'arf/sosq.c',
+  'arf/sqrt.c',
+  'arf/sub.c',
+  'arf/submul.c',
+  'arf/sum.c',
+  'arf/urandom.c',
+  'arith/bell_number.c',
+  'arith/bell_number_dobinski.c',
+  'arith/bell_number_multi_mod.c',
+  'arith/bell_number_nmod.c',
+  'arith/bell_number_nmod_vec.c',
+  'arith/bell_number_nmod_vec_ogf.c',
+  'arith/bell_number_nmod_vec_recursive.c',
+  'arith/bell_number_nmod_vec_series.c',
+  'arith/bell_number_size.c',
+  'arith/bell_number_vec.c',
+  'arith/bell_number_vec_multi_mod.c',
+  'arith/bell_number_vec_recursive.c',
+  'arith/bernoulli_number.c',
+  'arith/bernoulli_number_denom.c',
+  'arith/bernoulli_number_size.c',
+  'arith/bernoulli_number_vec.c',
+  'arith/bernoulli_number_vec_multi_mod.c',
+  'arith/bernoulli_number_vec_recursive.c',
+  'arith/bernoulli_polynomial.c',
+  'arith/dedekind_cosine_sum_factored.c',
+  'arith/divisors.c',
+  'arith/euler_number.c',
+  'arith/euler_number_size.c',
+  'arith/euler_number_vec.c',
+  'arith/euler_polynomial.c',
+  'arith/harmonic_number.c',
+  'arith/landau_function_vec.c',
+  'arith/number_of_partitions.c',
+  'arith/number_of_partitions_nmod_vec.c',
+  'arith/number_of_partitions_vec.c',
+  'arith/ramanujan_tau.c',
+  'arith/stirling1.c',
+  'arith/stirling2.c',
+  'arith/stirlingmat.c',
+  'arith/sum_of_squares.c',
+  'arith/sum_of_squares_vec.c',
+  'bernoulli/bound_2exp_si.c',
+  'bernoulli/cache_compute.c',
+  'bernoulli/fmpq_ui.c',
+  'bernoulli/fmpq_ui_multi_mod.c',
+  'bernoulli/fmpq_ui_zeta.c',
+  'bernoulli/fmpq_vec.c',
+  'bernoulli/mod_p_harvey.c',
+  'bernoulli/rev_clear.c',
+  'bernoulli/rev_init.c',
+  'bernoulli/rev_next.c',
+  'bool_mat/add.c',
+  'bool_mat/all.c',
+  'bool_mat/all_pairs_longest_walk.c',
+  'bool_mat/any.c',
+  'bool_mat/clear.c',
+  'bool_mat/complement.c',
+  'bool_mat/directed_cycle.c',
+  'bool_mat/directed_path.c',
+  'bool_mat/equal.c',
+  'bool_mat/get_strongly_connected_components.c',
+  'bool_mat/init.c',
+  'bool_mat/io.c',
+  'bool_mat/is_diagonal.c',
+  'bool_mat/is_lower_triangular.c',
+  'bool_mat/is_nilpotent.c',
+  'bool_mat/is_transitive.c',
+  'bool_mat/mul.c',
+  'bool_mat/mul_entrywise.c',
+  'bool_mat/nilpotency_degree.c',
+  'bool_mat/one.c',
+  'bool_mat/pow_ui.c',
+  'bool_mat/randtest.c',
+  'bool_mat/set.c',
+  'bool_mat/trace.c',
+  'bool_mat/transitive_closure.c',
+  'bool_mat/transpose.c',
+  'bool_mat/zero.c',
+  'ca/abs.c',
+  'ca/add.c',
+  'ca/arg.c',
+  'ca/asin.c',
+  'ca/atan.c',
+  'ca/can_evaluate_qqbar.c',
+  'ca/ceil.c',
+  'ca/check_equal.c',
+  'ca/check_ge.c',
+  'ca/check_is_algebraic.c',
+  'ca/check_is_i.c',
+  'ca/check_is_imaginary.c',
+  'ca/check_is_infinity.c',
+  'ca/check_is_integer.c',
+  'ca/check_is_negative_real.c',
+  'ca/check_is_neg_i.c',
+  'ca/check_is_neg_i_inf.c',
+  'ca/check_is_neg_inf.c',
+  'ca/check_is_neg_one.c',
+  'ca/check_is_number.c',
+  'ca/check_is_one.c',
+  'ca/check_is_pos_i_inf.c',
+  'ca/check_is_pos_inf.c',
+  'ca/check_is_rational.c',
+  'ca/check_is_real.c',
+  'ca/check_is_signed_inf.c',
+  'ca/check_is_uinf.c',
+  'ca/check_is_undefined.c',
+  'ca/check_is_zero.c',
+  'ca/clear.c',
+  'ca/condense_field.c',
+  'ca/conj.c',
+  'ca/csgn.c',
+  'ca/ctx_clear.c',
+  'ca/ctx_get_field_const.c',
+  'ca/ctx_get_field_fx.c',
+  'ca/ctx_get_field_fxy.c',
+  'ca/ctx_init.c',
+  'ca/div.c',
+  'ca/dot.c',
+  'ca/equal_repr.c',
+  'ca/erf.c',
+  'ca/erfc.c',
+  'ca/erfi.c',
+  'ca/euler.c',
+  'ca/exp.c',
+  'ca_ext/cache_clear.c',
+  'ca_ext/cache_init.c',
+  'ca_ext/cache_insert.c',
+  'ca_ext/clear.c',
+  'ca_ext/cmp_repr.c',
+  'ca_ext/equal_repr.c',
+  'ca_ext/get_acb_raw.c',
+  'ca_ext/init.c',
+  'ca_ext/inlines.c',
+  'ca_ext/print.c',
+  'ca/factor.c',
+  'ca/factor_clear.c',
+  'ca/factor_get_ca.c',
+  'ca/factor_init.c',
+  'ca/factor_insert.c',
+  'ca/factor_one.c',
+  'ca_field/build_ideal.c',
+  'ca_field/build_ideal_erf.c',
+  'ca_field/build_ideal_gamma.c',
+  'ca_field/cache_clear.c',
+  'ca_field/cache_init.c',
+  'ca_field/cache_insert.c',
+  'ca_field/clear.c',
+  'ca_field/cmp.c',
+  'ca_field/init.c',
+  'ca_field/print.c',
+  'ca_field/set_ext.c',
+  'ca/floor.c',
+  'ca/fmpq_poly_evaluate.c',
+  'ca/fmpz_mpoly_evaluate.c',
+  'ca/fmpz_mpoly_q_evaluate.c',
+  'ca/fmpz_poly_evaluate.c',
+  'ca/gamma.c',
+  'ca/get_acb.c',
+  'ca/get_acb_raw.c',
+  'ca/get_fexpr.c',
+  'ca/get_qqbar.c',
+  'ca/hash_repr.c',
+  'ca/i.c',
+  'ca/im.c',
+  'ca/init.c',
+  'ca/inlines.c',
+  'ca/inv.c',
+  'ca/io.c',
+  'ca/is_cyclotomic_nf_elem.c',
+  'ca/is_gen_as_ext.c',
+  'calcium/func_name.c',
+  'calcium/io.c',
+  'calcium/write_acb.c',
+  'calcium/write.c',
+  'calcium/write_si.c',
+  'ca/log.c',
+  'ca/make_field_element.c',
+  'ca_mat/add.c',
+  'ca_mat/add_ca.c',
+  'ca_mat/addmul_ca.c',
+  'ca_mat/adjugate.c',
+  'ca_mat/adjugate_charpoly.c',
+  'ca_mat/adjugate_cofactor.c',
+  'ca_mat/ca_poly_evaluate.c',
+  'ca_mat/charpoly_berkowitz.c',
+  'ca_mat/charpoly.c',
+  'ca_mat/charpoly_danilevsky.c',
+  'ca_mat/check_equal.c',
+  'ca_mat/check_is_one.c',
+  'ca_mat/check_is_zero.c',
+  'ca_mat/clear.c',
+  'ca_mat/companion.c',
+  'ca_mat/conj.c',
+  'ca_mat/conj_transpose.c',
+  'ca_mat/det_bareiss.c',
+  'ca_mat/det_berkowitz.c',
+  'ca_mat/det.c',
+  'ca_mat/det_cofactor.c',
+  'ca_mat/det_lu.c',
+  'ca_mat/dft.c',
+  'ca_mat/diagonalization.c',
+  'ca_mat/eigenvalues.c',
+  'ca_mat/exp.c',
+  'ca_mat/fflu.c',
+  'ca_mat/find_pivot.c',
+  'ca_mat/get_fexpr.c',
+  'ca_mat/hilbert.c',
+  'ca_mat/init.c',
+  'ca_mat/inlines.c',
+  'ca_mat/inv.c',
+  'ca_mat/jordan_blocks.c',
+  'ca_mat/jordan_form.c',
+  'ca_mat/jordan_transformation.c',
+  'ca_mat/log.c',
+  'ca_mat/lu.c',
+  'ca_mat/lu_classical.c',
+  'ca_mat/lu_recursive.c',
+  'ca_mat/mul.c',
+  'ca_mat/mul_classical.c',
+  'ca_mat/mul_same_nf.c',
+  'ca_mat/neg.c',
+  'ca_mat/nonsingular_fflu.c',
+  'ca_mat/nonsingular_lu.c',
+  'ca_mat/nonsingular_solve_adjugate.c',
+  'ca_mat/nonsingular_solve.c',
+  'ca_mat/nonsingular_solve_fflu.c',
+  'ca_mat/nonsingular_solve_lu.c',
+  'ca_mat/one.c',
+  'ca_mat/ones.c',
+  'ca_mat/pascal.c',
+  'ca_mat/pow_ui_binexp.c',
+  'ca_mat/print.c',
+  'ca_mat/randops.c',
+  'ca_mat/randtest.c',
+  'ca_mat/rank.c',
+  'ca_mat/right_kernel.c',
+  'ca_mat/rref.c',
+  'ca_mat/rref_fflu.c',
+  'ca_mat/rref_lu.c',
+  'ca_mat/set.c',
+  'ca_mat/set_ca.c',
+  'ca_mat/set_fmpq_mat.c',
+  'ca_mat/set_fmpz_mat.c',
+  'ca_mat/solve_fflu_precomp.c',
+  'ca_mat/solve_lu_precomp.c',
+  'ca_mat/solve_tril.c',
+  'ca_mat/solve_triu.c',
+  'ca_mat/stirling.c',
+  'ca_mat/sub.c',
+  'ca_mat/sub_ca.c',
+  'ca_mat/submul_ca.c',
+  'ca_mat/trace.c',
+  'ca_mat/transfer.c',
+  'ca_mat/transpose.c',
+  'ca_mat/window_init.c',
+  'ca_mat/zero.c',
+  'ca/merge_fields.c',
+  'ca/mul.c',
+  'ca/neg.c',
+  'ca/neg_i.c',
+  'ca/neg_i_inf.c',
+  'ca/neg_inf.c',
+  'ca/neg_one.c',
+  'ca/one.c',
+  'ca/pi.c',
+  'ca/pi_i.c',
+  'ca_poly/add.c',
+  'ca_poly/check_equal.c',
+  'ca_poly/check_is_one.c',
+  'ca_poly/check_is_zero.c',
+  'ca_poly/clear.c',
+  'ca_poly/compose.c',
+  'ca_poly/derivative.c',
+  'ca_poly/divrem_basecase.c',
+  'ca_poly/divrem.c',
+  'ca_poly/div_series.c',
+  'ca_poly/evaluate.c',
+  'ca_poly/evaluate_horner.c',
+  'ca_poly/exp_series.c',
+  'ca_poly/factor_squarefree.c',
+  'ca_poly/fit_length.c',
+  'ca_poly/gcd.c',
+  'ca_poly/gcd_euclidean.c',
+  'ca_poly/get_fexpr.c',
+  'ca_poly/init.c',
+  'ca_poly/inlines.c',
+  'ca_poly/integral.c',
+  'ca_poly/inv_series.c',
+  'ca_poly/is_proper.c',
+  'ca_poly/log_series.c',
+  'ca_poly/make_monic.c',
+  'ca_poly/mul.c',
+  'ca_poly/mullow.c',
+  'ca_poly/mullow_same_nf.c',
+  'ca_poly/neg.c',
+  'ca_poly/normalise.c',
+  'ca_poly/pow_ui.c',
+  'ca_poly/pow_ui_trunc.c',
+  'ca_poly/print.c',
+  'ca_poly/randtest.c',
+  'ca_poly/reverse.c',
+  'ca_poly/roots.c',
+  'ca_poly/set.c',
+  'ca_poly/set_ca.c',
+  'ca_poly/set_coeff_ca.c',
+  'ca_poly/set_fmpq_poly.c',
+  'ca_poly/set_fmpz_poly.c',
+  'ca_poly/set_length.c',
+  'ca_poly/set_roots.c',
+  'ca_poly/set_si.c',
+  'ca_poly/shift_left.c',
+  'ca_poly/shift_right.c',
+  'ca_poly/squarefree_part.c',
+  'ca_poly/sub.c',
+  'ca_poly/transfer.c',
+  'ca_poly/vec_append.c',
+  'ca_poly/vec_clear.c',
+  'ca_poly/vec_init.c',
+  'ca_poly/vec_set_length.c',
+  'ca/pos_i_inf.c',
+  'ca/pos_inf.c',
+  'ca/pow.c',
+  'ca/randtest.c',
+  'ca/re.c',
+  'ca/rewrite_complex_normal_form.c',
+  'ca/set.c',
+  'ca/set_d.c',
+  'ca/set_d_d.c',
+  'ca/set_fexpr.c',
+  'ca/set_fmpq.c',
+  'ca/set_fmpz.c',
+  'ca/set_qqbar.c',
+  'ca/set_si.c',
+  'ca/set_ui.c',
+  'ca/sgn.c',
+  'ca/sin_cos.c',
+  'ca/sqrt.c',
+  'ca/sqrt_factor.c',
+  'ca/swap.c',
+  'ca/transfer.c',
+  'ca/uinf.c',
+  'ca/undefined.c',
+  'ca/unknown.c',
+  'ca_vec/ca_vec.c',
+  'ca_vec/inlines.c',
+  'ca/zero.c',
+  'dirichlet/char.c',
+  'dirichlet/char_conductor.c',
+  'dirichlet/char_eq_deep.c',
+  'dirichlet/char_exp.c',
+  'dirichlet/char_first_primitive.c',
+  'dirichlet/char_index.c',
+  'dirichlet/char_lift.c',
+  'dirichlet/char_log.c',
+  'dirichlet/char_lower.c',
+  'dirichlet/char_mul.c',
+  'dirichlet/char_next.c',
+  'dirichlet/char_next_primitive.c',
+  'dirichlet/char_one.c',
+  'dirichlet/char_order.c',
+  'dirichlet/char_parity.c',
+  'dirichlet/char_pow.c',
+  'dirichlet/char_print.c',
+  'dirichlet/chi.c',
+  'dirichlet/chi_vec.c',
+  'dirichlet/chi_vec_loop.c',
+  'dirichlet/chi_vec_primeloop.c',
+  'dirichlet/group_clear.c',
+  'dirichlet/group_dlog_precompute.c',
+  'dirichlet/group_init.c',
+  'dirichlet/group_num_primitive.c',
+  'dirichlet/index_char.c',
+  'dirichlet/inlines.c',
+  'dirichlet/pairing.c',
+  'dirichlet/pairing_char.c',
+  'dirichlet/ui_conductor.c',
+  'dirichlet/ui_order.c',
+  'dirichlet/ui_parity.c',
+  'dirichlet/ui_vec_set_null.c',
+  'dlog/1modpe.c',
+  'dlog/1modpe_init.c',
+  'dlog/1modpe_mod1p.c',
+  'dlog/bsgs.c',
+  'dlog/bsgs_init.c',
+  'dlog/crt.c',
+  'dlog/crt_clear.c',
+  'dlog/crt_init.c',
+  'dlog/factor_group.c',
+  'dlog/mod2e.c',
+  'dlog/modpe.c',
+  'dlog/modpe_init.c',
+  'dlog/once.c',
+  'dlog/order23.c',
+  'dlog/order23_init.c',
+  'dlog/power.c',
+  'dlog/power_init.c',
+  'dlog/precomp.c',
+  'dlog/precomp_clear.c',
+  'dlog/precomp_modpe_init.c',
+  'dlog/precomp_n_init.c',
+  'dlog/precomp_pe_init.c',
+  'dlog/precomp_p_init.c',
+  'dlog/precomp_small_init.c',
+  'dlog/rho.c',
+  'dlog/rho_init.c',
+  'dlog/table.c',
+  'dlog/table_init.c',
+  'dlog/vec_add.c',
+  'dlog/vec_add_precomp.c',
+  'dlog/vec.c',
+  'dlog/vec_eratos_add.c',
+  'dlog/vec_eratos.c',
+  'dlog/vec_fill.c',
+  'dlog/vec_loop_add.c',
+  'dlog/vec_loop.c',
+  'dlog/vec_pindex_factorgcd.c',
+  'dlog/vec_set_not_found.c',
+  'dlog/vec_sieve_add.c',
+  'dlog/vec_sieve_add_precomp.c',
+  'dlog/vec_sieve.c',
+  'dlog/vec_sieve_precomp.c',
+  'd_mat/approx_equal.c',
+  'd_mat/clear.c',
+  'd_mat/equal.c',
+  'd_mat/init.c',
+  'd_mat/inlines.c',
+  'd_mat/mul_classical.c',
+  'd_mat/print.c',
+  'd_mat/randtest.c',
+  'd_mat/set.c',
+  'd_mat/transpose.c',
+  'd_mat/zero.c',
+  'double_extras/inlines.c',
+  'double_extras/lambertw.c',
+  'double_extras/log2.c',
+  'double_extras/randtest.c',
+  'double_extras/randtest_signed.c',
+  'double_extras/randtest_special.c',
+  'double_interval/arb_get_di.c',
+  'double_interval/arb_set_di.c',
+  'double_interval/fast_div.c',
+  'double_interval/fast_log_nonnegative.c',
+  'double_interval/fast_mul.c',
+  'double_interval/fast_sqr.c',
+  'double_interval/inlines.c',
+  'd_vec/add.c',
+  'd_vec/approx_equal.c',
+  'd_vec/clear.c',
+  'd_vec/dot.c',
+  'd_vec/dot_heuristic.c',
+  'd_vec/dot_thrice.c',
+  'd_vec/equal.c',
+  'd_vec/init.c',
+  'd_vec/inlines.c',
+  'd_vec/is_approx_zero.c',
+  'd_vec/is_zero.c',
+  'd_vec/norm.c',
+  'd_vec/randtest.c',
+  'd_vec/set.c',
+  'd_vec/sub.c',
+  'd_vec/zero.c',
+  'fexpr/arg.c',
+  'fexpr/arithmetic.c',
+  'fexpr/arithmetic_nodes.c',
+  'fexpr_builtin/inlines.c',
+  'fexpr_builtin/lookup.c',
+  'fexpr_builtin/table.c',
+  'fexpr/call0.c',
+  'fexpr/call1.c',
+  'fexpr/call2.c',
+  'fexpr/call3.c',
+  'fexpr/call4.c',
+  'fexpr/call_vec.c',
+  'fexpr/cmp_fast.c',
+  'fexpr/contains.c',
+  'fexpr/depth.c',
+  'fexpr/equal_si.c',
+  'fexpr/equal_ui.c',
+  'fexpr/expanded_normal_form.c',
+  'fexpr/func.c',
+  'fexpr/get_fmpz.c',
+  'fexpr/get_fmpz_mpoly_q.c',
+  'fexpr/get_string.c',
+  'fexpr/get_symbol_str.c',
+  'fexpr/hash.c',
+  'fexpr/inlines.c',
+  'fexpr/is_any_builtin_call.c',
+  'fexpr/is_arithmetic_operation.c',
+  'fexpr/is_builtin_call.c',
+  'fexpr/is_neg_integer.c',
+  'fexpr/numerical_enclosure.c',
+  'fexpr/num_leaves.c',
+  'fexpr/print.c',
+  'fexpr/replace.c',
+  'fexpr/set_arf.c',
+  'fexpr/set_d.c',
+  'fexpr/set_fmpq.c',
+  'fexpr/set_fmpz.c',
+  'fexpr/set_fmpz_mpoly.c',
+  'fexpr/set_fmpz_mpoly_q.c',
+  'fexpr/set_si.c',
+  'fexpr/set_string.c',
+  'fexpr/set_symbol_str.c',
+  'fexpr/set_ui.c',
+  'fexpr/vec_sort_fast.c',
+  'fexpr/write_latex.c',
+  'fft/adjust.c',
+  'fft/adjust_sqrt2.c',
+  'fft/butterfly_lshB.c',
+  'fft/butterfly_rshB.c',
+  'fft/combine_bits.c',
+  'fft/convolution.c',
+  'fft/convolution_precache.c',
+  'fft/div_2expmod_2expp1.c',
+  'fft/fermat_to_mpz.c',
+  'fft/fft_mfa_truncate_sqrt2.c',
+  'fft/fft_mfa_truncate_sqrt2_inner.c',
+  'fft/fft_negacylic.c',
+  'fft/fft_radix2.c',
+  'fft/fft_truncate.c',
+  'fft/fft_truncate_sqrt2.c',
+  'fft/ifft_mfa_truncate_sqrt2.c',
+  'fft/ifft_negacyclic.c',
+  'fft/ifft_radix2.c',
+  'fft/ifft_truncate.c',
+  'fft/ifft_truncate_sqrt2.c',
+  'fft/inlines.c',
+  'fft/mul_2expmod_2expp1.c',
+  'fft/mul_fft_main.c',
+  'fft/mul_mfa_truncate_sqrt2.c',
+  'fft/mulmod_2expp1.c',
+  'fft/mul_truncate_sqrt2.c',
+  'fft/negmod_2expp1.c',
+  'fft/normmod_2expp1.c',
+  #'fft_small/default_ctx.c',
+  #'fft_small/fmpz_poly_mul.c',
+  #'fft_small/mpn_helpers.c',
+  #'fft_small/mpn_mul.c',
+  #'fft_small/mulmod_statisfies_bounds.c',
+  #'fft_small/nmod_poly_mul.c',
+  #'fft_small/sd_fft.c',
+  #'fft_small/sd_fft_ctx.c',
+  #'fft_small/sd_ifft.c',
+  'fft/split_bits.c',
+  'fmpq/add.c',
+  'fmpq/addmul.c',
+  'fmpq/ball.c',
+  'fmpq/canonicalise.c',
+  'fmpq/cfrac_bound.c',
+  'fmpq/clear_readonly.c',
+  'fmpq/cmp.c',
+  'fmpq/dedekind_sum.c',
+  'fmpq/div_2exp.c',
+  'fmpq/div.c',
+  'fmpq/farey_neighbors.c',
+  'fmpq/fmpz_vector.c',
+  'fmpq/gcd.c',
+  'fmpq/gcd_cofactors.c',
+  'fmpq/get_cfrac.c',
+  'fmpq/get_cfrac_helpers.c',
+  'fmpq/get_d.c',
+  'fmpq/get_mpfr.c',
+  'fmpq/get_mpz_frac.c',
+  'fmpq/get_str.c',
+  'fmpq/harmonic_ui.c',
+  'fmpq/height_bits.c',
+  'fmpq/height.c',
+  'fmpq/init_set_readonly.c',
+  'fmpq/inlines.c',
+  'fmpq/inv.c',
+  'fmpq/io.c',
+  'fmpq/is_canonical.c',
+  'fmpq/mat22.c',
+  'fmpq_mat/add.c',
+  'fmpq_mat/can_solve.c',
+  'fmpq_mat/can_solve_dixon.c',
+  'fmpq_mat/can_solve_fraction_free.c',
+  'fmpq_mat/can_solve_multi_mod.c',
+  'fmpq_mat/charpoly.c',
+  'fmpq_mat/clear.c',
+  'fmpq_mat/concat_horizontal.c',
+  'fmpq_mat/concat_vertical.c',
+  'fmpq_mat/det.c',
+  'fmpq_mat/equal.c',
+  'fmpq_mat/fmpq_vec_mul.c',
+  'fmpq_mat/fmpz_vec_mul.c',
+  'fmpq_mat/get_fmpz_mat.c',
+  'fmpq_mat/get_fmpz_mat_colwise.c',
+  'fmpq_mat/get_fmpz_mat_entrywise.c',
+  'fmpq_mat/get_fmpz_mat_matwise.c',
+  'fmpq_mat/get_fmpz_mat_mod_fmpz.c',
+  'fmpq_mat/get_fmpz_mat_rowwise.c',
+  'fmpq_mat/gso.c',
+  'fmpq_mat/hilbert_matrix.c',
+  'fmpq_mat/init.c',
+  'fmpq_mat/init_set.c',
+  'fmpq_mat/inlines.c',
+  'fmpq_mat/inv.c',
+  'fmpq_mat/invert.c',
+  'fmpq_mat/io.c',
+  'fmpq_mat/is_integral.c',
+  'fmpq_mat/is_one.c',
+  'fmpq_mat/is_zero.c',
+  'fmpq_mat/kronecker_product.c',
+  'fmpq_mat/minpoly.c',
+  'fmpq_mat/mul.c',
+  'fmpq_mat/mul_cleared.c',
+  'fmpq_mat/mul_direct.c',
+  'fmpq_mat/mul_fmpq_vec.c',
+  'fmpq_mat/mul_fmpz_mat.c',
+  'fmpq_mat/mul_fmpz_vec.c',
+  'fmpq_mat/mul_r_fmpz_mat.c',
+  'fmpq_mat/neg.c',
+  'fmpq_mat/one.c',
+  'fmpq_mat/pivot.c',
+  'fmpq_mat/randbits.c',
+  'fmpq_mat/randtest.c',
+  'fmpq_mat/rref.c',
+  'fmpq_mat/rref_classical.c',
+  'fmpq_mat/rref_fraction_free.c',
+  'fmpq_mat/scalar_div_fmpz.c',
+  'fmpq_mat/scalar_mul_fmpq.c',
+  'fmpq_mat/scalar_mul_fmpz.c',
+  'fmpq_mat/set.c',
+  'fmpq_mat/set_fmpz_mat.c',
+  'fmpq_mat/set_fmpz_mat_div_fmpz.c',
+  'fmpq_mat/set_fmpz_mat_mod_fmpz.c',
+  'fmpq_mat/similarity.c',
+  'fmpq_mat/solve.c',
+  'fmpq_mat/solve_dixon.c',
+  'fmpq_mat/solve_fraction_free.c',
+  'fmpq_mat/solve_multi_mod.c',
+  'fmpq_mat/sub.c',
+  'fmpq_mat/swap.c',
+  'fmpq_mat/trace.c',
+  'fmpq_mat/transpose.c',
+  'fmpq_mat/window_clear.c',
+  'fmpq_mat/window_init.c',
+  'fmpq_mat/zero.c',
+  'fmpq/mod_fmpz.c',
+  'fmpq_mpoly/add.c',
+  'fmpq_mpoly/add_fmpq.c',
+  'fmpq_mpoly/cmp.c',
+  'fmpq_mpoly/compose_fmpq_mpoly.c',
+  'fmpq_mpoly/compose_fmpq_mpoly_gen.c',
+  'fmpq_mpoly/compose_fmpq_poly.c',
+  'fmpq_mpoly/content_vars.c',
+  'fmpq_mpoly/degrees.c',
+  'fmpq_mpoly/derivative.c',
+  'fmpq_mpoly/discriminant.c',
+  'fmpq_mpoly/div.c',
+  'fmpq_mpoly/divides.c',
+  'fmpq_mpoly/divrem.c',
+  'fmpq_mpoly/divrem_ideal.c',
+  'fmpq_mpoly/equal_fmpq.c',
+  'fmpq_mpoly/equal_fmpz.c',
+  'fmpq_mpoly/evaluate_all.c',
+  'fmpq_mpoly/evaluate_one.c',
+  'fmpq_mpoly_factor/clear.c',
+  'fmpq_mpoly_factor/expand.c',
+  'fmpq_mpoly_factor/factor.c',
+  'fmpq_mpoly_factor/factor_make_integral.c',
+  'fmpq_mpoly_factor/factor_make_monic.c',
+  'fmpq_mpoly_factor/factor_squarefree.c',
+  'fmpq_mpoly_factor/fit_length.c',
+  'fmpq_mpoly_factor/init.c',
+  'fmpq_mpoly_factor/inlines.c',
+  'fmpq_mpoly_factor/realloc.c',
+  'fmpq_mpoly_factor/sort.c',
+  'fmpq_mpoly_factor/swap_fmpz_mpoly_factor.c',
+  'fmpq_mpoly/gcd.c',
+  'fmpq_mpoly/gcd_cofactors.c',
+  'fmpq_mpoly/get_coeff_fmpq_fmpz.c',
+  'fmpq_mpoly/get_coeff_fmpq_monomial.c',
+  'fmpq_mpoly/get_coeff_fmpq_ui.c',
+  'fmpq_mpoly/get_coeff_vars_ui.c',
+  'fmpq_mpoly/get_fmpq.c',
+  'fmpq_mpoly/get_set_is_fmpq_poly.c',
+  'fmpq_mpoly/get_str_pretty.c',
+  'fmpq_mpoly/get_term.c',
+  'fmpq_mpoly/get_term_coeff_fmpq.c',
+  'fmpq_mpoly/get_term_exp_fmpz.c',
+  'fmpq_mpoly/get_term_exp_si.c',
+  'fmpq_mpoly/get_term_exp_ui.c',
+  'fmpq_mpoly/get_term_monomial.c',
+  'fmpq_mpoly/get_term_var_exp_si.c',
+  'fmpq_mpoly/get_term_var_exp_ui.c',
+  'fmpq_mpoly/inflate.c',
+  'fmpq_mpoly/inlines.c',
+  'fmpq_mpoly/integral.c',
+  'fmpq_mpoly/io.c',
+  'fmpq_mpoly/is_canonical.c',
+  'fmpq_mpoly/is_monic.c',
+  'fmpq_mpoly/make_monic.c',
+  'fmpq_mpoly/mul.c',
+  'fmpq_mpoly/pow_fmpz.c',
+  'fmpq_mpoly/pow_ui.c',
+  'fmpq_mpoly/push_term_fmpq_fmpz.c',
+  'fmpq_mpoly/push_term_fmpq_ui.c',
+  'fmpq_mpoly/reduce.c',
+  'fmpq_mpoly/reduce_easy.c',
+  'fmpq_mpoly/repack_bits.c',
+  'fmpq_mpoly/rescale.c',
+  'fmpq_mpoly/resultant.c',
+  'fmpq_mpoly/scalar_div_fmpq.c',
+  'fmpq_mpoly/scalar_div_fmpz.c',
+  'fmpq_mpoly/scalar_mul_fmpq.c',
+  'fmpq_mpoly/scalar_mul_fmpz.c',
+  'fmpq_mpoly/set_coeff_fmpq_fmpz.c',
+  'fmpq_mpoly/set_coeff_fmpq_monomial.c',
+  'fmpq_mpoly/set_coeff_fmpq_ui.c',
+  'fmpq_mpoly/set_fmpq.c',
+  'fmpq_mpoly/set_fmpz.c',
+  'fmpq_mpoly/set_str_pretty.c',
+  'fmpq_mpoly/set_term_coeff_fmpq.c',
+  'fmpq_mpoly/sqrt.c',
+  'fmpq_mpoly/sub.c',
+  'fmpq_mpoly/sub_fmpq.c',
+  'fmpq_mpoly/term_content.c',
+  'fmpq_mpoly/term_exp_fits.c',
+  'fmpq_mpoly/univar.c',
+  'fmpq_mpoly/void_ring.c',
+  'fmpq/mpq_clear_readonly.c',
+  'fmpq/mpq_init_set_readonly.c',
+  'fmpq/mul_2exp.c',
+  'fmpq/mul.c',
+  'fmpq/next_calkin_wilf.c',
+  'fmpq/next_minimal.c',
+  'fmpq/next_signed_calkin_wilf.c',
+  'fmpq/next_signed_minimal.c',
+  'fmpq_poly/add.c',
+  'fmpq_poly/add_series.c',
+  'fmpq_poly/asinh_series.c',
+  'fmpq_poly/asin_series.c',
+  'fmpq_poly/atanh_series.c',
+  'fmpq_poly/atan_series.c',
+  'fmpq_poly/canonicalise.c',
+  'fmpq_poly/clear.c',
+  'fmpq_poly/cmp.c',
+  'fmpq_poly/comparisons.c',
+  'fmpq_poly/compose.c',
+  'fmpq_poly/compose_series_brent_kung.c',
+  'fmpq_poly/compose_series.c',
+  'fmpq_poly/compose_series_horner.c',
+  'fmpq_poly/content.c',
+  'fmpq_poly/cosh_series.c',
+  'fmpq_poly/cos_series.c',
+  'fmpq_poly/derivative.c',
+  'fmpq_poly/div.c',
+  'fmpq_poly/divides.c',
+  'fmpq_poly/divrem.c',
+  'fmpq_poly/div_series.c',
+  'fmpq_poly/equal.c',
+  'fmpq_poly/equal_trunc.c',
+  'fmpq_poly/evaluate.c',
+  'fmpq_poly/exp_series.c',
+  'fmpq_poly/fit_length.c',
+  'fmpq_poly/gcd.c',
+  'fmpq_poly/gegenbauer_c.c',
+  'fmpq_poly/get_coeff.c',
+  'fmpq_poly/get_nmod_poly.c',
+  'fmpq_poly/get_numerator_denominator.c',
+  'fmpq_poly/get_slice.c',
+  'fmpq_poly/get_str.c',
+  'fmpq_poly/init.c',
+  'fmpq_poly/inlines.c',
+  'fmpq_poly/integral.c',
+  'fmpq_poly/interpolate_fmpz_vec.c',
+  'fmpq_poly/inv.c',
+  'fmpq_poly/inv_series_newton.c',
+  'fmpq_poly/invsqrt_series.c',
+  'fmpq_poly/io.c',
+  'fmpq_poly/is_canonical.c',
+  'fmpq_poly/is_monic.c',
+  'fmpq_poly/is_squarefree.c',
+  'fmpq_poly/laguerre_l.c',
+  'fmpq_poly/lcm.c',
+  'fmpq_poly/legendre_p.c',
+  'fmpq_poly/log_series.c',
+  'fmpq_poly/make_monic.c',
+  'fmpq_poly/mul.c',
+  'fmpq_poly/mullow.c',
+  'fmpq_poly/neg.c',
+  'fmpq_poly/normalise.c',
+  'fmpq_poly/nth_derivative.c',
+  'fmpq_poly/one.c',
+  'fmpq_poly/pow.c',
+  'fmpq_poly/powers_clear.c',
+  'fmpq_poly/powers_precompute.c',
+  'fmpq_poly/power_sums.c',
+  'fmpq_poly/power_sums_to_poly.c',
+  'fmpq_poly/pow_trunc.c',
+  'fmpq_poly/primitive_part.c',
+  'fmpq_poly/randtest.c',
+  'fmpq_poly/realloc.c',
+  'fmpq_poly/rem.c',
+  'fmpq_poly/remove.c',
+  'fmpq_poly/rem_powers_precomp.c',
+  'fmpq_poly/rescale.c',
+  'fmpq_poly/resultant.c',
+  'fmpq_poly/resultant_modular_div.c',
+  'fmpq_poly/reverse.c',
+  'fmpq_poly/revert_series.c',
+  'fmpq_poly/revert_series_lagrange.c',
+  'fmpq_poly/revert_series_lagrange_fast.c',
+  'fmpq_poly/revert_series_newton.c',
+  'fmpq_poly/scalar.c',
+  'fmpq_poly/set.c',
+  'fmpq_poly/set_coeff.c',
+  'fmpq_poly/set_length.c',
+  'fmpq_poly/set_str.c',
+  'fmpq_poly/set_trunc.c',
+  'fmpq_poly/shift_left.c',
+  'fmpq_poly/shift_right.c',
+  'fmpq_poly/sin_cos_series.c',
+  'fmpq_poly/sinh_cosh_series.c',
+  'fmpq_poly/sinh_series.c',
+  'fmpq_poly/sin_series.c',
+  'fmpq_poly/sqrt_series.c',
+  'fmpq_poly/sub.c',
+  'fmpq_poly/sub_series.c',
+  'fmpq_poly/swap.c',
+  'fmpq_poly/tanh_series.c',
+  'fmpq_poly/tan_series.c',
+  'fmpq_poly/truncate.c',
+  'fmpq_poly/xgcd.c',
+  'fmpq_poly/zero.c',
+  'fmpq/pow_fmpz.c',
+  'fmpq/pow_si.c',
+  'fmpq/randbits.c',
+  'fmpq/randtest.c',
+  'fmpq/reconstruct_fmpz_2.c',
+  'fmpq/reconstruct_fmpz_2_naive.c',
+  'fmpq/reconstruct_fmpz.c',
+  'fmpq/set_cfrac.c',
+  'fmpq/set_fmpz_frac.c',
+  'fmpq/set_si.c',
+  'fmpq/set_str.c',
+  'fmpq/set_ui.c',
+  'fmpq/simplest_between.c',
+  'fmpq/sub.c',
+  'fmpq/submul.c',
+  'fmpq_vec/clear.c',
+  'fmpq_vec/dot.c',
+  'fmpq_vec/get_fmpz_vec_fmpz.c',
+  'fmpq_vec/init.c',
+  'fmpq_vec/io.c',
+  'fmpq_vec/randtest.c',
+  'fmpq_vec/randtest_uniq_sorted.c',
+  'fmpq_vec/set_fmpz_vec.c',
+  'fmpq_vec/sort.c',
+  'fmpz/abs.c',
+  'fmpz/abs_fits_ui.c',
+  'fmpz/abs_lbound_ui_2exp.c',
+  'fmpz/abs_ubound_ui_2exp.c',
+  'fmpz/add.c',
+  'fmpz/addmul.c',
+  'fmpz/aors_ui.c',
+  'fmpz/bin_uiui.c',
+  'fmpz/bit_pack.c',
+  'fmpz/bits.c',
+  'fmpz/bit_unpack.c',
+  'fmpz/cdiv.c',
+  'fmpz/clear_readonly.c',
+  'fmpz/clog.c',
+  'fmpz/cmp.c',
+  'fmpz/comb_clear.c',
+  'fmpz/comb_init.c',
+  'fmpz/CRT.c',
+  'fmpz/divexact.c',
+  'fmpz/divides.c',
+  'fmpz/divides_mod_list.c',
+  'fmpz/divisible.c',
+  'fmpz/divisor_in_residue_class_lenstra.c',
+  'fmpz/divisor_sigma.c',
+  'fmpz/div_newton.c',
+  'fmpz/dlog.c',
+  'fmpz/equal.c',
+  'fmpz/euler_phi.c',
+  'fmpz_extras/lshift_mpn.c',
+  'fmpz_extras/sub_small_large.c',
+  'fmpz_factor/append.c',
+  'fmpz_factor/clear.c',
+  'fmpz_factor/concat.c',
+  'fmpz_factor/ecm_add.c',
+  'fmpz_factor/ecm_addmod.c',
+  'fmpz_factor/ecm.c',
+  'fmpz_factor/ecm_clear.c',
+  'fmpz_factor/ecm_double.c',
+  'fmpz_factor/ecm_init.c',
+  'fmpz_factor/ecm_mul_montgomery_ladder.c',
+  'fmpz_factor/ecm_select_curve.c',
+  'fmpz_factor/ecm_stage_I.c',
+  'fmpz_factor/ecm_stage_II.c',
+  'fmpz_factor/ecm_submod.c',
+  'fmpz_factor/expand.c',
+  'fmpz_factor/expand_iterative.c',
+  'fmpz_factor/expand_multiexp.c',
+  'fmpz_factor/extend_factor_ui.c',
+  'fmpz_factor/factor.c',
+  'fmpz_factor/factor_no_trial.c',
+  'fmpz_factor/factor_pp1.c',
+  'fmpz_factor/factor_si.c',
+  'fmpz_factor/factor_smooth.c',
+  'fmpz_factor/factor_trial.c',
+  'fmpz_factor/factor_trial_range.c',
+  'fmpz_factor/fit_length.c',
+  'fmpz_factor/get_fmpz.c',
+  'fmpz_factor/init.c',
+  'fmpz_factor/io.c',
+  'fmpz_factor/pollard_brent.c',
+  'fmpz_factor/pollard_brent_single.c',
+  'fmpz_factor/refine.c',
+  'fmpz_factor/set_length.c',
+  'fmpz/fac_ui.c',
+  'fmpz/fdiv.c',
+  'fmpz/fib_ui.c',
+  'fmpz/fits_si.c',
+  'fmpz/flog.c',
+  'fmpz/fmma.c',
+  'fmpz/fmms.c',
+  'fmpz/gcd.c',
+  'fmpz/gcdinv.c',
+  'fmpz/get.c',
+  'fmpz/get_str.c',
+  'fmpzi/bits.c',
+  'fmpzi/canonical_unit_i_pow.c',
+  'fmpzi/divexact.c',
+  'fmpzi/div_i.c',
+  'fmpzi/divrem_approx.c',
+  'fmpzi/divrem.c',
+  'fmpzi/gcd_binary.c',
+  'fmpzi/gcd.c',
+  'fmpzi/gcd_euclidean.c',
+  'fmpzi/gcd_euclidean_improved.c',
+  'fmpzi/gcd_shortest.c',
+  'fmpzi/inlines.c',
+  'fmpzi/io.c',
+  'fmpzi/is_prime.c',
+  'fmpzi/is_probabprime.c',
+  'fmpzi/mul.c',
+  'fmpzi/mul_i.c',
+  'fmpzi/mul_i_pow_si.c',
+  'fmpz/init2.c',
+  'fmpz/init_set_readonly.c',
+  'fmpz/inlines.c',
+  'fmpz/invmod.c',
+  'fmpz/io.c',
+  'fmpzi/pow_ui.c',
+  'fmpzi/remove_one_plus_i.c',
+  'fmpz/is_canonical.c',
+  'fmpz/is_perfect_power.c',
+  'fmpz/is_prime.c',
+  'fmpz/is_prime_morrison.c',
+  'fmpz/is_prime_pocklington.c',
+  'fmpz/is_prime_pseudosquare.c',
+  'fmpz/is_probabprime_BPSW.c',
+  'fmpz/is_probabprime_lucas.c',
+  'fmpzi/sqr.c',
+  'fmpz/is_square.c',
+  'fmpz/is_strong_probabprime.c',
+  'fmpz/jacobi.c',
+  'fmpz/kronecker.c',
+  'fmpz/lcm.c',
+  'fmpz_lll/advance_check_babai.c',
+  'fmpz_lll/advance_check_babai_heuristic_d.c',
+  'fmpz_lll/babai.c',
+  'fmpz_lll/check_babai.c',
+  'fmpz_lll/check_babai_heuristic.c',
+  'fmpz_lll/check_babai_heuristic_d.c',
+  'fmpz_lll/context_init.c',
+  'fmpz_lll/context_init_default.c',
+  'fmpz_lll/d_lll.c',
+  'fmpz_lll/heuristic_dot.c',
+  'fmpz_lll/is_reduced.c',
+  'fmpz_lll/is_reduced_d.c',
+  'fmpz_lll/is_reduced_d_with_removal.c',
+  'fmpz_lll/is_reduced_mpfr.c',
+  'fmpz_lll/is_reduced_mpfr_with_removal.c',
+  'fmpz_lll/is_reduced_with_removal.c',
+  'fmpz_lll/lll.c',
+  'fmpz_lll/lll_d.c',
+  'fmpz_lll/lll_d_heuristic.c',
+  'fmpz_lll/lll_d_heuristic_with_removal.c',
+  'fmpz_lll/lll_d_with_removal.c',
+  'fmpz_lll/lll_d_with_removal_knapsack.c',
+  'fmpz_lll/lll_mpf2.c',
+  'fmpz_lll/lll_mpf2_with_removal.c',
+  'fmpz_lll/lll_mpf.c',
+  'fmpz_lll/lll_mpf_with_removal.c',
+  'fmpz_lll/lll_with_removal.c',
+  'fmpz_lll/lll_with_removal_ulll.c',
+  'fmpz_lll/mpf2_lll.c',
+  'fmpz_lll/mpf-impl.c',
+  'fmpz_lll/randtest.c',
+  'fmpz_lll/shift.c',
+  'fmpz_lll/storjohann_ulll.c',
+  'fmpz_lll/wrapper.c',
+  'fmpz_lll/wrapper_with_removal.c',
+  'fmpz_lll/wrapper_with_removal_knapsack.c',
+  'fmpz/logic.c',
+  'fmpz/lucas_chain.c',
+  'fmpz_mat/add.c',
+  'fmpz_mat/can_solve.c',
+  'fmpz_mat/can_solve_fflu.c',
+  'fmpz_mat/can_solve_multi_mod_den.c',
+  'fmpz_mat/charpoly.c',
+  'fmpz_mat/chol_d.c',
+  'fmpz_mat/clear.c',
+  'fmpz_mat/col_partition.c',
+  'fmpz_mat/concat.c',
+  'fmpz_mat/content.c',
+  'fmpz_mat/CRT_ui.c',
+  'fmpz_mat/det_bareiss.c',
+  'fmpz_mat/det_bound.c',
+  'fmpz_mat/det.c',
+  'fmpz_mat/det_cofactor.c',
+  'fmpz_mat/det_divisor.c',
+  'fmpz_mat/det_modular_accelerated.c',
+  'fmpz_mat/det_modular.c',
+  'fmpz_mat/det_modular_given_divisor.c',
+  'fmpz_mat/equal.c',
+  'fmpz_mat/fflu.c',
+  'fmpz_mat/find_pivot_any.c',
+  'fmpz_mat/find_pivot_smallest.c',
+  'fmpz_mat/fmpz_vec_mul.c',
+  'fmpz_mat/get.c',
+  'fmpz_mat/gram.c',
+  'fmpz_mat/hadamard.c',
+  'fmpz_mat/hnf.c',
+  'fmpz_mat/hnf_classical.c',
+  'fmpz_mat/hnf_minors.c',
+  'fmpz_mat/hnf_minors_transform.c',
+  'fmpz_mat/hnf_modular.c',
+  'fmpz_mat/hnf_modular_eldiv.c',
+  'fmpz_mat/hnf_pernet_stein.c',
+  'fmpz_mat/hnf_transform.c',
+  'fmpz_mat/hnf_xgcd.c',
+  'fmpz_mat/howell_form_mod.c',
+  'fmpz_mat/init.c',
+  'fmpz_mat/inlines.c',
+  'fmpz_mat/inv.c',
+  'fmpz_mat/invert.c',
+  'fmpz_mat/io.c',
+  'fmpz_mat/is_hadamard.c',
+  'fmpz_mat/is_in_hnf.c',
+  'fmpz_mat/is_in_rref_with_rank.c',
+  'fmpz_mat/is_in_snf.c',
+  'fmpz_mat/is_one.c',
+  'fmpz_mat/is_reduced.c',
+  'fmpz_mat/is_reduced_gram.c',
+  'fmpz_mat/is_reduced_gram_with_removal.c',
+  'fmpz_mat/is_reduced_with_removal.c',
+  'fmpz_mat/is_spd.c',
+  'fmpz_mat/is_zero.c',
+  'fmpz_mat/kronecker_product.c',
+  'fmpz_mat/lll_original.c',
+  'fmpz_mat/lll_storjohann.c',
+  'fmpz_mat/max_bits.c',
+  'fmpz_mat/minpoly_modular.c',
+  'fmpz_mat/mul_blas.c',
+  'fmpz_mat/mul.c',
+  'fmpz_mat/mul_classical.c',
+  'fmpz_mat/mul_double_word.c',
+  'fmpz_mat/mul_fft.c',
+  'fmpz_mat/mul_fmpz_vec.c',
+  'fmpz_mat/mul_multi_mod.c',
+  'fmpz_mat/mul_small.c',
+  'fmpz_mat/mul_strassen.c',
+  'fmpz_mat/multi_CRT_ui.c',
+  'fmpz_mat/multi_mod_ui.c',
+  'fmpz_mat/mul_waksman.c',
+  'fmpz_mat/neg.c',
+  'fmpz_mat/next_col_van_hoeij.c',
+  'fmpz_mat/nullspace.c',
+  'fmpz_mat/one.c',
+  'fmpz_mat/pow.c',
+  'fmpz_mat/randajtai.c',
+  'fmpz_mat/randbits.c',
+  'fmpz_mat/randdet.c',
+  'fmpz_mat/randintrel.c',
+  'fmpz_mat/randntrulike2.c',
+  'fmpz_mat/randntrulike.c',
+  'fmpz_mat/randops.c',
+  'fmpz_mat/randpermdiag.c',
+  'fmpz_mat/randrank.c',
+  'fmpz_mat/randsimdioph.c',
+  'fmpz_mat/randtest.c',
+  'fmpz_mat/randtest_unsigned.c',
+  'fmpz_mat/rank.c',
+  'fmpz_mat/rank_small_inplace.c',
+  'fmpz_mat/rref.c',
+  'fmpz_mat/rref_fflu.c',
+  'fmpz_mat/rref_mul.c',
+  'fmpz_mat/scalar.c',
+  'fmpz_mat/set.c',
+  'fmpz_mat/similarity.c',
+  'fmpz_mat/snf.c',
+  'fmpz_mat/snf_diagonal.c',
+  'fmpz_mat/snf_iliopoulos.c',
+  'fmpz_mat/snf_kannan_bachem.c',
+  'fmpz_mat/solve_bound.c',
+  'fmpz_mat/solve.c',
+  'fmpz_mat/solve_cramer.c',
+  'fmpz_mat/solve_dixon.c',
+  'fmpz_mat/solve_dixon_den.c',
+  'fmpz_mat/solve_fflu.c',
+  'fmpz_mat/solve_fflu_precomp.c',
+  'fmpz_mat/solve_multi_mod_den.c',
+  'fmpz_mat/sqr_bodrato.c',
+  'fmpz_mat/sqr.c',
+  'fmpz_mat/strong_echelon_form_mod.c',
+  'fmpz_mat/sub.c',
+  'fmpz_mat/swap.c',
+  'fmpz_mat/trace.c',
+  'fmpz_mat/transpose.c',
+  'fmpz_mat/window.c',
+  'fmpz_mat/zero.c',
+  'fmpz_mod/add.c',
+  'fmpz_mod/addmul.c',
+  'fmpz/mod.c',
+  'fmpz_mod/ctx.c',
+  'fmpz_mod/discrete_log_pohlig_hellman.c',
+  'fmpz_mod/divides.c',
+  'fmpz_mod/equal_fmpz.c',
+  'fmpz_mod/inlines.c',
+  'fmpz_mod/inv.c',
+  'fmpz_mod/is_canonical.c',
+  'fmpz_mod/is_invertible.c',
+  'fmpz_mod/is_one.c',
+  'fmpz_mod_mat/add.c',
+  'fmpz_mod_mat/can_solve.c',
+  'fmpz_mod_mat/charpoly_berkowitz.c',
+  'fmpz_mod_mat/clear.c',
+  'fmpz_mod_mat/comparison.c',
+  'fmpz_mod_mat/det.c',
+  'fmpz_mod_mat/fmpz_vec_mul.c',
+  'fmpz_mod_mat/fmpz_vec_mul_ptr.c',
+  'fmpz_mod_mat/howell_form.c',
+  'fmpz_mod_mat/init.c',
+  'fmpz_mod_mat/init_set.c',
+  'fmpz_mod_mat/inlines.c',
+  'fmpz_mod_mat/inv.c',
+  'fmpz_mod_mat/io.c',
+  'fmpz_mod_mat/lu.c',
+  'fmpz_mod_mat/minpoly.c',
+  'fmpz_mod_mat/mul.c',
+  'fmpz_mod_mat/mul_classical_threaded.c',
+  'fmpz_mod_mat/mul_fmpz_vec.c',
+  'fmpz_mod_mat/mul_fmpz_vec_ptr.c',
+  'fmpz_mod_mat/neg.c',
+  'fmpz_mod_mat/nullspace.c',
+  'fmpz_mod_mat/randrank.c',
+  'fmpz_mod_mat/randtest.c',
+  'fmpz_mod_mat/randtril.c',
+  'fmpz_mod_mat/randtriu.c',
+  'fmpz_mod_mat/rank.c',
+  'fmpz_mod_mat/reduce_row.c',
+  'fmpz_mod_mat/rref.c',
+  'fmpz_mod_mat/scalar_mul_fmpz.c',
+  'fmpz_mod_mat/scalar_mul_si.c',
+  'fmpz_mod_mat/scalar_mul_ui.c',
+  'fmpz_mod_mat/set_fmpz_mat.c',
+  'fmpz_mod_mat/set_get.c',
+  'fmpz_mod_mat/similarity.c',
+  'fmpz_mod_mat/solve.c',
+  'fmpz_mod_mat/solve_tril.c',
+  'fmpz_mod_mat/solve_triu.c',
+  'fmpz_mod_mat/sqr.c',
+  'fmpz_mod_mat/strong_echelon_form.c',
+  'fmpz_mod_mat/sub.c',
+  'fmpz_mod_mat/submul.c',
+  'fmpz_mod_mat/swap.c',
+  'fmpz_mod_mat/trace.c',
+  'fmpz_mod_mat/window_clear.c',
+  'fmpz_mod_mat/window_init.c',
+  'fmpz_mod_mpoly/add.c',
+  'fmpz_mod_mpoly/add_fmpz.c',
+  'fmpz_mod_mpoly/clear.c',
+  'fmpz_mod_mpoly/cmp.c',
+  'fmpz_mod_mpoly/combine_like_terms.c',
+  'fmpz_mod_mpoly/compose_fmpz_mod_mpoly.c',
+  'fmpz_mod_mpoly/compose_fmpz_mod_mpoly_geobucket.c',
+  'fmpz_mod_mpoly/compose_mat.c',
+  'fmpz_mod_mpoly/content_vars.c',
+  'fmpz_mod_mpoly/ctx_clear.c',
+  'fmpz_mod_mpoly/ctx_init.c',
+  'fmpz_mod_mpoly/ctx_init_rand.c',
+  'fmpz_mod_mpoly/deflate.c',
+  'fmpz_mod_mpoly/deflation.c',
+  'fmpz_mod_mpoly/degrees.c',
+  'fmpz_mod_mpoly/derivative.c',
+  'fmpz_mod_mpoly/discriminant.c',
+  'fmpz_mod_mpoly/div.c',
+  'fmpz_mod_mpoly/divides.c',
+  'fmpz_mod_mpoly/divides_dense.c',
+  'fmpz_mod_mpoly/divides_monagan_pearce.c',
+  'fmpz_mod_mpoly/div_monagan_pearce.c',
+  'fmpz_mod_mpoly/divrem.c',
+  'fmpz_mod_mpoly/divrem_ideal.c',
+  'fmpz_mod_mpoly/divrem_ideal_monagan_pearce.c',
+  'fmpz_mod_mpoly/divrem_monagan_pearce.c',
+  'fmpz_mod_mpoly/equal.c',
+  'fmpz_mod_mpoly/equal_fmpz.c',
+  'fmpz_mod_mpoly/evaluate_all_fmpz.c',
+  'fmpz_mod_mpoly/evaluate_one.c',
+  'fmpz_mod_mpoly_factor/bpoly_factor_smprime.c',
+  'fmpz_mod_mpoly_factor/bpoly_hlift.c',
+  'fmpz_mod_mpoly_factor/clear.c',
+  'fmpz_mod_mpoly_factor/cmp.c',
+  'fmpz_mod_mpoly_factor/compression.c',
+  'fmpz_mod_mpoly_factor/eval.c',
+  'fmpz_mod_mpoly_factor/expand.c',
+  'fmpz_mod_mpoly_factor/factor.c',
+  'fmpz_mod_mpoly_factor/factor_content.c',
+  'fmpz_mod_mpoly_factor/factor_squarefree.c',
+  'fmpz_mod_mpoly_factor/fit_length.c',
+  'fmpz_mod_mpoly_factor/fmpz_mod_bpoly.c',
+  'fmpz_mod_mpoly_factor/fmpz_mod_mat_extras.c',
+  'fmpz_mod_mpoly_factor/fmpz_mod_poly_extras.c',
+  'fmpz_mod_mpoly_factor/fmpz_mod_poly_vec.c',
+  'fmpz_mod_mpoly_factor/fmpz_mod_pow_cache.c',
+  'fmpz_mod_mpoly_factor/gcd_algo.c',
+  'fmpz_mod_mpoly_factor/gcd_brown.c',
+  'fmpz_mod_mpoly_factor/gcd_hensel.c',
+  'fmpz_mod_mpoly_factor/gcd_zippel2.c',
+  'fmpz_mod_mpoly_factor/gcd_zippel.c',
+  'fmpz_mod_mpoly_factor/get_set_lead0.c',
+  'fmpz_mod_mpoly_factor/inlines.c',
+  'fmpz_mod_mpoly_factor/interp.c',
+  'fmpz_mod_mpoly_factor/io.c',
+  'fmpz_mod_mpoly_factor/irred_smprime_wang.c',
+  'fmpz_mod_mpoly_factor/irred_smprime_zassenhaus.c',
+  'fmpz_mod_mpoly_factor/irred_smprime_zippel.c',
+  'fmpz_mod_mpoly_factor/lcc_wang.c',
+  'fmpz_mod_mpoly_factor/mpoly_hlift.c',
+  'fmpz_mod_mpoly_factor/mpoly_hlift_zippel.c',
+  'fmpz_mod_mpoly_factor/mpolyn.c',
+  'fmpz_mod_mpoly_factor/mpolyn_divides.c',
+  'fmpz_mod_mpoly_factor/mpoly_pfrac.c',
+  'fmpz_mod_mpoly_factor/mpolyu.c',
+  'fmpz_mod_mpoly_factor/mpolyv.c',
+  'fmpz_mod_mpoly_factor/polyu3_mod_hlift.c',
+  'fmpz_mod_mpoly_factor/polyun.c',
+  'fmpz_mod_mpoly_factor/realloc.c',
+  'fmpz_mod_mpoly_factor/set_nmod_mpoly_factor.c',
+  'fmpz_mod_mpoly_factor/sort.c',
+  'fmpz_mod_mpoly_factor/stack.c',
+  'fmpz_mod_mpoly_factor/zip_helpers.c',
+  'fmpz_mod_mpoly/fit_length.c',
+  'fmpz_mod_mpoly/fit_length_fit_bits.c',
+  'fmpz_mod_mpoly/fit_length_reset_bits.c',
+  'fmpz_mod_mpoly/gcd_brown.c',
+  'fmpz_mod_mpoly/gcd.c',
+  'fmpz_mod_mpoly/gcd_cofactors.c',
+  'fmpz_mod_mpoly/gcd_hensel.c',
+  'fmpz_mod_mpoly/gcd_subresultant.c',
+  'fmpz_mod_mpoly/gcd_zippel2.c',
+  'fmpz_mod_mpoly/gcd_zippel.c',
+  'fmpz_mod_mpoly/gen.c',
+  'fmpz_mod_mpoly/geobuckets.c',
+  'fmpz_mod_mpoly/get_coeff_fmpz_fmpz.c',
+  'fmpz_mod_mpoly/get_coeff_fmpz_monomial.c',
+  'fmpz_mod_mpoly/get_coeff_fmpz_ui.c',
+  'fmpz_mod_mpoly/get_coeff_vars_ui.c',
+  'fmpz_mod_mpoly/get_fmpz.c',
+  'fmpz_mod_mpoly/get_set_is_fmpz_mod_poly.c',
+  'fmpz_mod_mpoly/get_set_nmod_mpoly.c',
+  'fmpz_mod_mpoly/get_str_pretty.c',
+  'fmpz_mod_mpoly/get_term.c',
+  'fmpz_mod_mpoly/get_term_coeff_fmpz.c',
+  'fmpz_mod_mpoly/get_term_exp_fmpz.c',
+  'fmpz_mod_mpoly/get_term_exp_si.c',
+  'fmpz_mod_mpoly/get_term_exp_ui.c',
+  'fmpz_mod_mpoly/get_term_monomial.c',
+  'fmpz_mod_mpoly/get_term_var_exp_si.c',
+  'fmpz_mod_mpoly/get_term_var_exp_ui.c',
+  'fmpz_mod_mpoly/inflate.c',
+  'fmpz_mod_mpoly/init.c',
+  'fmpz_mod_mpoly/inlines.c',
+  'fmpz_mod_mpoly/io.c',
+  'fmpz_mod_mpoly/is_canonical.c',
+  'fmpz_mod_mpoly/is_fmpz.c',
+  'fmpz_mod_mpoly/is_gen.c',
+  'fmpz_mod_mpoly/lead_coeff_vars.c',
+  'fmpz_mod_mpoly/make_monic.c',
+  'fmpz_mod_mpoly/mul.c',
+  'fmpz_mod_mpoly/mul_dense.c',
+  'fmpz_mod_mpoly/mul_johnson.c',
+  'fmpz_mod_mpoly/neg.c',
+  'fmpz_mod_mpoly/pow_fmpz.c',
+  'fmpz_mod_mpoly/pow_rmul.c',
+  'fmpz_mod_mpoly/pow_ui.c',
+  'fmpz_mod_mpoly/push_term_fmpz_fmpz.c',
+  'fmpz_mod_mpoly/push_term_fmpz_ui.c',
+  'fmpz_mod_mpoly/quadratic_root.c',
+  'fmpz_mod_mpoly/randtest_bits.c',
+  'fmpz_mod_mpoly/randtest_bound.c',
+  'fmpz_mod_mpoly/randtest_bounds.c',
+  'fmpz_mod_mpoly/repack_bits.c',
+  'fmpz_mod_mpoly/resize.c',
+  'fmpz_mod_mpoly/resultant.c',
+  'fmpz_mod_mpoly/scalar_addmul_fmpz.c',
+  'fmpz_mod_mpoly/scalar_mul_fmpz.c',
+  'fmpz_mod_mpoly/set.c',
+  'fmpz_mod_mpoly/set_coeff_fmpz_fmpz.c',
+  'fmpz_mod_mpoly/set_coeff_fmpz_monomial.c',
+  'fmpz_mod_mpoly/set_coeff_fmpz_ui.c',
+  'fmpz_mod_mpoly/set_fmpz.c',
+  'fmpz_mod_mpoly/set_str_pretty.c',
+  'fmpz_mod_mpoly/set_term_coeff_fmpz.c',
+  'fmpz_mod_mpoly/set_term_exp_fmpz.c',
+  'fmpz_mod_mpoly/set_term_exp_ui.c',
+  'fmpz_mod_mpoly/sort_terms.c',
+  'fmpz_mod_mpoly/sqrt_heap.c',
+  'fmpz_mod_mpoly/sub.c',
+  'fmpz_mod_mpoly/sub_fmpz.c',
+  'fmpz_mod_mpoly/term_content.c',
+  'fmpz_mod_mpoly/term_exp_fits.c',
+  'fmpz_mod_mpoly/to_from_nmod_poly.c',
+  'fmpz_mod_mpoly/univar.c',
+  'fmpz_mod_mpoly/void_ring.c',
+  'fmpz_mod/mul.c',
+  'fmpz_mod/neg.c',
+  'fmpz_mod/next_smooth_prime.c',
+  'fmpz_mod_poly/add.c',
+  'fmpz_mod_poly/add_series.c',
+  'fmpz_mod_poly/attributes.c',
+  'fmpz_mod_poly/berlekamp_massey.c',
+  'fmpz_mod_poly/clear.c',
+  'fmpz_mod_poly/comparison.c',
+  'fmpz_mod_poly/compose.c',
+  'fmpz_mod_poly/compose_mod_brent_kung.c',
+  'fmpz_mod_poly/compose_mod_brent_kung_precomp_preinv.c',
+  'fmpz_mod_poly/compose_mod_brent_kung_preinv.c',
+  'fmpz_mod_poly/compose_mod_brent_kung_vec_preinv.c',
+  'fmpz_mod_poly/compose_mod_brent_kung_vec_preinv_threaded.c',
+  'fmpz_mod_poly/compose_mod.c',
+  'fmpz_mod_poly/compose_mod_horner.c',
+  'fmpz_mod_poly/deflate.c',
+  'fmpz_mod_poly/deflation.c',
+  'fmpz_mod_poly/derivative.c',
+  'fmpz_mod_poly/discriminant.c',
+  'fmpz_mod_poly/div.c',
+  'fmpz_mod_poly/divides.c',
+  'fmpz_mod_poly/divides_classical.c',
+  'fmpz_mod_poly/div_newton_n_preinv.c',
+  'fmpz_mod_poly/divrem_basecase.c',
+  'fmpz_mod_poly/divrem.c',
+  'fmpz_mod_poly/divrem_f.c',
+  'fmpz_mod_poly/divrem_newton_n_preinv.c',
+  'fmpz_mod_poly/div_series.c',
+  'fmpz_mod_poly/evaluate_fmpz.c',
+  'fmpz_mod_poly/evaluate_fmpz_vec.c',
+  'fmpz_mod_poly_factor/clear.c',
+  'fmpz_mod_poly_factor/concat.c',
+  'fmpz_mod_poly_factor/factor_berlekamp.c',
+  'fmpz_mod_poly_factor/factor.c',
+  'fmpz_mod_poly_factor/factor_cantor_zassenhaus.c',
+  'fmpz_mod_poly_factor/factor_distinct_deg.c',
+  'fmpz_mod_poly_factor/factor_distinct_deg_threaded.c',
+  'fmpz_mod_poly_factor/factor_equal_deg.c',
+  'fmpz_mod_poly_factor/factor_equal_deg_prob.c',
+  'fmpz_mod_poly_factor/factor_kaltofen_shoup.c',
+  'fmpz_mod_poly_factor/factor_squarefree.c',
+  'fmpz_mod_poly_factor/fit_length.c',
+  'fmpz_mod_poly_factor/get_poly.c',
+  'fmpz_mod_poly_factor/init.c',
+  'fmpz_mod_poly_factor/inlines.c',
+  'fmpz_mod_poly_factor/insert.c',
+  'fmpz_mod_poly_factor/is_irreducible.c',
+  'fmpz_mod_poly_factor/is_irreducible_ddf.c',
+  'fmpz_mod_poly_factor/is_irreducible_rabin.c',
+  'fmpz_mod_poly_factor/is_irreducible_rabin_f.c',
+  'fmpz_mod_poly_factor/is_squarefree.c',
+  'fmpz_mod_poly_factor/is_squarefree_f.c',
+  'fmpz_mod_poly_factor/pow.c',
+  'fmpz_mod_poly_factor/print.c',
+  'fmpz_mod_poly_factor/print_pretty.c',
+  'fmpz_mod_poly_factor/realloc.c',
+  'fmpz_mod_poly_factor/roots.c',
+  'fmpz_mod_poly_factor/roots_factored.c',
+  'fmpz_mod_poly_factor/set.c',
+  'fmpz_mod_poly/find_distinct_nonzero_roots.c',
+  'fmpz_mod_poly/fit_length.c',
+  'fmpz_mod_poly/frobenius_power.c',
+  'fmpz_mod_poly/frobenius_powers_2exp_clear.c',
+  'fmpz_mod_poly/frobenius_powers_2exp_precomp.c',
+  'fmpz_mod_poly/frobenius_powers_clear.c',
+  'fmpz_mod_poly/frobenius_powers_precomp.c',
+  'fmpz_mod_poly/gcd.c',
+  'fmpz_mod_poly/gcd_euclidean_f.c',
+  'fmpz_mod_poly/gcdinv.c',
+  'fmpz_mod_poly/gcdinv_euclidean.c',
+  'fmpz_mod_poly/gcdinv_euclidean_f.c',
+  'fmpz_mod_poly/gcdinv_f.c',
+  'fmpz_mod_poly/gen.c',
+  'fmpz_mod_poly/get.c',
+  'fmpz_mod_poly/get_str.c',
+  'fmpz_mod_poly/hamming_weight.c',
+  'fmpz_mod_poly/hgcd.c',
+  'fmpz_mod_poly/inflate.c',
+  'fmpz_mod_poly/init.c',
+  'fmpz_mod_poly/inlines.c',
+  'fmpz_mod_poly/invmod.c',
+  'fmpz_mod_poly/invmod_f.c',
+  'fmpz_mod_poly/inv_series.c',
+  'fmpz_mod_poly/inv_series_newton_f.c',
+  'fmpz_mod_poly/invsqrt_series.c',
+  'fmpz_mod_poly/io.c',
+  'fmpz_mod_poly/is_canonical.c',
+  'fmpz_mod_poly/make_monic.c',
+  'fmpz_mod_poly/make_monic_f.c',
+  'fmpz_mod_poly/minpoly.c',
+  'fmpz_mod_poly/mul.c',
+  'fmpz_mod_poly/mulhigh.c',
+  'fmpz_mod_poly/mullow.c',
+  'fmpz_mod_poly/mulmod.c',
+  'fmpz_mod_poly/mulmod_preinv.c',
+  'fmpz_mod_poly/neg.c',
+  'fmpz_mod_poly/one.c',
+  'fmpz_mod_poly/pow.c',
+  'fmpz_mod_poly/powers_mod_bsgs_threaded.c',
+  'fmpz_mod_poly/powers_mod_naive.c',
+  'fmpz_mod_poly/powmod_fmpz_binexp.c',
+  'fmpz_mod_poly/powmod_fmpz_binexp_preinv.c',
+  'fmpz_mod_poly/powmod_linear_fmpz_preinv.c',
+  'fmpz_mod_poly/powmod_ui_binexp.c',
+  'fmpz_mod_poly/powmod_ui_binexp_preinv.c',
+  'fmpz_mod_poly/powmod_x_fmpz_preinv.c',
+  'fmpz_mod_poly/pow_trunc_binexp.c',
+  'fmpz_mod_poly/pow_trunc.c',
+  'fmpz_mod_poly/product_roots_fmpz_vec.c',
+  'fmpz_mod_poly/radix.c',
+  'fmpz_mod_poly/randtest.c',
+  'fmpz_mod_poly/randtest_monic_primitive.c',
+  'fmpz_mod_poly/realloc.c',
+  'fmpz_mod_poly/rem_basecase.c',
+  'fmpz_mod_poly/rem.c',
+  'fmpz_mod_poly/remove.c',
+  'fmpz_mod_poly/resultant.c',
+  'fmpz_mod_poly/reverse.c',
+  'fmpz_mod_poly/scalar.c',
+  'fmpz_mod_poly/set.c',
+  'fmpz_mod_poly/set_get_coeff.c',
+  'fmpz_mod_poly/set_length.c',
+  'fmpz_mod_poly/set_trunc.c',
+  'fmpz_mod_poly/shift_left.c',
+  'fmpz_mod_poly/shift_right.c',
+  'fmpz_mod_poly/sqr.c',
+  'fmpz_mod_poly/sqrt.c',
+  'fmpz_mod_poly/sqrt_series.c',
+  'fmpz_mod_poly/sub.c',
+  'fmpz_mod_poly/sub_series.c',
+  'fmpz_mod_poly/tree.c',
+  'fmpz_mod_poly/truncate.c',
+  'fmpz_mod_poly/xgcd.c',
+  'fmpz_mod_poly/xgcd_euclidean_f.c',
+  'fmpz_mod_poly/zero_coeffs.c',
+  'fmpz_mod/pow.c',
+  'fmpz_mod/rand.c',
+  'fmpz_mod/set_fmpz.c',
+  'fmpz_mod/set_modulus.c',
+  'fmpz_mod/sub.c',
+  'fmpz_mod_vec/add.c',
+  'fmpz_mod_vec/dot.c',
+  'fmpz_mod_vec/mul.c',
+  'fmpz_mod_vec/neg.c',
+  'fmpz_mod_vec/scalar.c',
+  'fmpz_mod_vec/set_fmpz_vec.c',
+  'fmpz_mod_vec/sub.c',
+  'fmpz/moebius_mu.c',
+  'fmpz_mpoly/add.c',
+  'fmpz_mpoly/add_fmpz.c',
+  'fmpz_mpoly/buchberger_naive.c',
+  'fmpz_mpoly/clear.c',
+  'fmpz_mpoly/cmp.c',
+  'fmpz_mpoly/combine_like_terms.c',
+  'fmpz_mpoly/compose_fmpz_mpoly.c',
+  'fmpz_mpoly/compose_fmpz_mpoly_gen.c',
+  'fmpz_mpoly/compose_fmpz_mpoly_geobucket.c',
+  'fmpz_mpoly/compose_fmpz_mpoly_horner.c',
+  'fmpz_mpoly/compose_fmpz_poly.c',
+  'fmpz_mpoly/compose_mat.c',
+  'fmpz_mpoly/content_vars.c',
+  'fmpz_mpoly/ctx.c',
+  'fmpz_mpoly/deflate.c',
+  'fmpz_mpoly/deflation.c',
+  'fmpz_mpoly/degrees.c',
+  'fmpz_mpoly/derivative.c',
+  'fmpz_mpoly/discriminant.c',
+  'fmpz_mpoly/div.c',
+  'fmpz_mpoly/divides_array.c',
+  'fmpz_mpoly/divides.c',
+  'fmpz_mpoly/divides_heap_threaded.c',
+  'fmpz_mpoly/divides_monagan_pearce.c',
+  'fmpz_mpoly/div_monagan_pearce.c',
+  'fmpz_mpoly/divrem_array.c',
+  'fmpz_mpoly/divrem.c',
+  'fmpz_mpoly/divrem_ideal.c',
+  'fmpz_mpoly/equal.c',
+  'fmpz_mpoly/equal_fmpz.c',
+  'fmpz_mpoly/equal_si.c',
+  'fmpz_mpoly/equal_ui.c',
+  'fmpz_mpoly/evaluate_all.c',
+  'fmpz_mpoly/evaluate_all_fmpz_mod.c',
+  'fmpz_mpoly/evaluate_all_nmod.c',
+  'fmpz_mpoly/evaluate_one.c',
+  'fmpz_mpoly_factor/add.c',
+  'fmpz_mpoly_factor/bpoly.c',
+  'fmpz_mpoly_factor/bpoly_factor.c',
+  'fmpz_mpoly_factor/clear.c',
+  'fmpz_mpoly_factor/cmp.c',
+  'fmpz_mpoly_factor/compression.c',
+  'fmpz_mpoly_factor/eval.c',
+  'fmpz_mpoly_factor/expand.c',
+  'fmpz_mpoly_factor/factor_bound_si.c',
+  'fmpz_mpoly_factor/factor.c',
+  'fmpz_mpoly_factor/factor_content.c',
+  'fmpz_mpoly_factor/factor_squarefree.c',
+  'fmpz_mpoly_factor/fit_length.c',
+  'fmpz_mpoly_factor/gcd_algo.c',
+  'fmpz_mpoly_factor/gcd_brown.c',
+  'fmpz_mpoly_factor/gcd_brown_threaded.c',
+  'fmpz_mpoly_factor/gcd_hensel.c',
+  'fmpz_mpoly_factor/gcd_zippel2.c',
+  'fmpz_mpoly_factor/gcd_zippel.c',
+  'fmpz_mpoly_factor/get_set_lead0.c',
+  'fmpz_mpoly_factor/init.c',
+  'fmpz_mpoly_factor/inlines.c',
+  'fmpz_mpoly_factor/interp.c',
+  'fmpz_mpoly_factor/irred_wang.c',
+  'fmpz_mpoly_factor/irred_zassenhaus.c',
+  'fmpz_mpoly_factor/irred_zippel.c',
+  'fmpz_mpoly_factor/lcc_kaltofen.c',
+  'fmpz_mpoly_factor/lcc_wang.c',
+  'fmpz_mpoly_factor/misc.c',
+  'fmpz_mpoly_factor/mpoly_hlift.c',
+  'fmpz_mpoly_factor/mpolyl.c',
+  'fmpz_mpoly_factor/mpoly_pfrac.c',
+  'fmpz_mpoly_factor/mpolyv.c',
+  'fmpz_mpoly_factor/poly_pfrac.c',
+  'fmpz_mpoly_factor/print_pretty.c',
+  'fmpz_mpoly_factor/realloc.c',
+  'fmpz_mpoly_factor/set.c',
+  'fmpz_mpoly_factor/sort.c',
+  'fmpz_mpoly_factor/tpoly.c',
+  'fmpz_mpoly_factor/tuple.c',
+  'fmpz_mpoly/fit_bits.c',
+  'fmpz_mpoly/fit_length.c',
+  'fmpz_mpoly/fit_length_reset_bits.c',
+  'fmpz_mpoly/gcd_brown.c',
+  'fmpz_mpoly/gcd.c',
+  'fmpz_mpoly/gcd_cofactors.c',
+  'fmpz_mpoly/gcd_hensel.c',
+  'fmpz_mpoly/gcd_subresultant.c',
+  'fmpz_mpoly/gcd_zippel2.c',
+  'fmpz_mpoly/gcd_zippel.c',
+  'fmpz_mpoly/gen.c',
+  'fmpz_mpoly/geobuckets.c',
+  'fmpz_mpoly/get_coeff_fmpz_fmpz.c',
+  'fmpz_mpoly/get_coeff_fmpz_monomial.c',
+  'fmpz_mpoly/get_coeff_fmpz_ui.c',
+  'fmpz_mpoly/get_coeff_si_fmpz.c',
+  'fmpz_mpoly/get_coeff_si_ui.c',
+  'fmpz_mpoly/get_coeff_ui_fmpz.c',
+  'fmpz_mpoly/get_coeff_ui_ui.c',
+  'fmpz_mpoly/get_coeff_vars_ui.c',
+  'fmpz_mpoly/get_fmpz.c',
+  'fmpz_mpoly/get_set_is_fmpz_poly.c',
+  'fmpz_mpoly/get_str_pretty.c',
+  'fmpz_mpoly/get_term.c',
+  'fmpz_mpoly/get_term_coeff_fmpz.c',
+  'fmpz_mpoly/get_term_exp_fmpz.c',
+  'fmpz_mpoly/get_term_exp_si.c',
+  'fmpz_mpoly/get_term_exp_ui.c',
+  'fmpz_mpoly/get_term_monomial.c',
+  'fmpz_mpoly/get_term_var_exp_si.c',
+  'fmpz_mpoly/get_term_var_exp_ui.c',
+  'fmpz_mpoly/inflate.c',
+  'fmpz_mpoly/init.c',
+  'fmpz_mpoly/inlines.c',
+  'fmpz_mpoly/integral.c',
+  'fmpz_mpoly/io.c',
+  'fmpz_mpoly/is_canonical.c',
+  'fmpz_mpoly/is_fmpz.c',
+  'fmpz_mpoly/is_gen.c',
+  'fmpz_mpoly/lead_coeff_vars.c',
+  'fmpz_mpoly/misc.c',
+  'fmpz_mpoly/mpolyd.c',
+  'fmpz_mpoly/mul_array.c',
+  'fmpz_mpoly/mul_array_threaded.c',
+  'fmpz_mpoly/mul.c',
+  'fmpz_mpoly/mul_dense.c',
+  'fmpz_mpoly/mul_heap_threaded.c',
+  'fmpz_mpoly/mul_johnson.c',
+  'fmpz_mpoly/mul_monomial.c',
+  'fmpz_mpoly/neg.c',
+  'fmpz_mpoly/pow_fmpz.c',
+  'fmpz_mpoly/pow_fps.c',
+  'fmpz_mpoly/pow_ui.c',
+  'fmpz_mpoly/primitive_part.c',
+  'fmpz_mpoly/push_term_fmpz_fmpz.c',
+  'fmpz_mpoly/push_term_fmpz_ui.c',
+  'fmpz_mpoly_q/add.c',
+  'fmpz_mpoly_q/canonicalise.c',
+  'fmpz_mpoly_q/clear.c',
+  'fmpz_mpoly_q/div.c',
+  'fmpz_mpoly_q/equal.c',
+  'fmpz_mpoly_q/evaluate_acb.c',
+  'fmpz_mpoly_q/init.c',
+  'fmpz_mpoly_q/inlines.c',
+  'fmpz_mpoly_q/inv.c',
+  'fmpz_mpoly_q/is_canonical.c',
+  'fmpz_mpoly_q/mul.c',
+  'fmpz_mpoly_q/neg.c',
+  'fmpz_mpoly_q/print_pretty.c',
+  'fmpz_mpoly_q/randtest.c',
+  'fmpz_mpoly_q/set.c',
+  'fmpz_mpoly_q/sub.c',
+  'fmpz_mpoly_q/swap.c',
+  'fmpz_mpoly/quasidiv.c',
+  'fmpz_mpoly/quasidiv_heap.c',
+  'fmpz_mpoly/quasidivrem.c',
+  'fmpz_mpoly/quasidivrem_heap.c',
+  'fmpz_mpoly/quasidivrem_ideal.c',
+  'fmpz_mpoly/quasidivrem_ideal_heap.c',
+  'fmpz_mpoly_q/used_vars.c',
+  'fmpz_mpoly/randtest_bits.c',
+  'fmpz_mpoly/randtest_bound.c',
+  'fmpz_mpoly/randtest_bounds.c',
+  'fmpz_mpoly/realloc.c',
+  'fmpz_mpoly/reduction_primitive_part.c',
+  'fmpz_mpoly/repack_bits.c',
+  'fmpz_mpoly/resize.c',
+  'fmpz_mpoly/resultant.c',
+  'fmpz_mpoly/reverse.c',
+  'fmpz_mpoly/scalar_divexact_fmpz.c',
+  'fmpz_mpoly/scalar_divides_fmpz.c',
+  'fmpz_mpoly/scalar_fmma.c',
+  'fmpz_mpoly/scalar_mul_fmpz.c',
+  'fmpz_mpoly/select_exps.c',
+  'fmpz_mpoly/set.c',
+  'fmpz_mpoly/set_coeff_fmpz_fmpz.c',
+  'fmpz_mpoly/set_coeff_fmpz_monomial.c',
+  'fmpz_mpoly/set_coeff_fmpz_ui.c',
+  'fmpz_mpoly/set_coeff_si_fmpz.c',
+  'fmpz_mpoly/set_coeff_si_ui.c',
+  'fmpz_mpoly/set_coeff_ui_fmpz.c',
+  'fmpz_mpoly/set_coeff_ui_ui.c',
+  'fmpz_mpoly/set_fmpz.c',
+  'fmpz_mpoly/set_si.c',
+  'fmpz_mpoly/set_str_pretty.c',
+  'fmpz_mpoly/set_term_coeff_fmpz.c',
+  'fmpz_mpoly/set_term_exp_fmpz.c',
+  'fmpz_mpoly/set_term_exp_ui.c',
+  'fmpz_mpoly/set_ui.c',
+  'fmpz_mpoly/sort_terms.c',
+  'fmpz_mpoly/spoly.c',
+  'fmpz_mpoly/sqrt_heap.c',
+  'fmpz_mpoly/sub.c',
+  'fmpz_mpoly/sub_fmpz.c',
+  'fmpz_mpoly/symmetric.c',
+  'fmpz_mpoly/term_content.c',
+  'fmpz_mpoly/term_exp_fits.c',
+  'fmpz_mpoly/to_from_fmpz_poly.c',
+  'fmpz_mpoly/univar.c',
+  'fmpz_mpoly/vec_autoreduction.c',
+  'fmpz_mpoly/vec_autoreduction_groebner.c',
+  'fmpz_mpoly/vec.c',
+  'fmpz_mpoly/vec_is_autoreduced.c',
+  'fmpz_mpoly/vec_is_groebner.c',
+  'fmpz_mpoly/vec_set_length.c',
+  'fmpz_mpoly/vec_set_primitive_unique.c',
+  'fmpz_mpoly/void_ring.c',
+  'fmpz/mpz_readonly.c',
+  'fmpz/mul_2exp.c',
+  'fmpz/mul.c',
+  'fmpz/mul_si_tdiv_q_2exp.c',
+  'fmpz/mul_tdiv_q_2exp.c',
+  'fmpz/multi_CRT.c',
+  'fmpz/multi_mod.c',
+  'fmpz/ndiv_qr.c',
+  'fmpz/neg.c',
+  'fmpz/nextprime.c',
+  'fmpz/one_2exp.c',
+  'fmpz_poly/2norm.c',
+  'fmpz_poly/2norm_normalised_bits.c',
+  'fmpz_poly/add.c',
+  'fmpz_poly/add_series.c',
+  'fmpz_poly/bit_pack.c',
+  'fmpz_poly/bit_unpack.c',
+  'fmpz_poly/bound_roots.c',
+  'fmpz_poly/chebyshev_t.c',
+  'fmpz_poly/chebyshev_u.c',
+  'fmpz_poly/CLD_bound.c',
+  'fmpz_poly/clear.c',
+  'fmpz_poly/compose.c',
+  'fmpz_poly/compose_divconquer.c',
+  'fmpz_poly/compose_horner.c',
+  'fmpz_poly/compose_series.c',
+  'fmpz_poly/content.c',
+  'fmpz_poly/cos_minpoly.c',
+  'fmpz_poly/CRT_ui.c',
+  'fmpz_poly/cyclotomic.c',
+  'fmpz_poly/deflate.c',
+  'fmpz_poly/deflation.c',
+  'fmpz_poly/derivative.c',
+  'fmpz_poly/discriminant.c',
+  'fmpz_poly/div_basecase.c',
+  'fmpz_poly/div.c',
+  'fmpz_poly/div_divconquer.c',
+  'fmpz_poly/div_divconquer_recursive.c',
+  'fmpz_poly/divexact.c',
+  'fmpz_poly/divhigh_smodp.c',
+  'fmpz_poly/divides.c',
+  'fmpz_poly/divlow_smodp.c',
+  'fmpz_poly/div_preinv.c',
+  'fmpz_poly/divrem_basecase.c',
+  'fmpz_poly/divrem.c',
+  'fmpz_poly/divrem_divconquer.c',
+  'fmpz_poly/divrem_divconquer_recursive.c',
+  'fmpz_poly/divremlow_divconquer_recursive.c',
+  'fmpz_poly/divrem_preinv.c',
+  'fmpz_poly/div_root.c',
+  'fmpz_poly/div_series_basecase.c',
+  'fmpz_poly/div_series.c',
+  'fmpz_poly/div_series_divconquer.c',
+  'fmpz_poly/equal.c',
+  'fmpz_poly/equal_trunc.c',
+  'fmpz_poly/eta_qexp.c',
+  'fmpz_poly/eulerian_polynomial.c',
+  'fmpz_poly/evaluate_divconquer_fmpq.c',
+  'fmpz_poly/evaluate_divconquer_fmpz.c',
+  'fmpz_poly/evaluate_fmpq.c',
+  'fmpz_poly/evaluate_fmpz.c',
+  'fmpz_poly/evaluate_fmpz_vec.c',
+  'fmpz_poly/evaluate_horner_d_2exp.c',
+  'fmpz_poly/evaluate_horner_d.c',
+  'fmpz_poly/evaluate_horner_fmpq.c',
+  'fmpz_poly/evaluate_horner_fmpz.c',
+  'fmpz_poly/evaluate_mod.c',
+  'fmpz_poly_factor/CLD_mat.c',
+  'fmpz_poly_factor/clear.c',
+  'fmpz_poly_factor/concat.c',
+  'fmpz_poly_factor/factor.c',
+  'fmpz_poly_factor/factor_cubic.c',
+  'fmpz_poly_factor/factor_quadratic.c',
+  'fmpz_poly_factor/factor_squarefree.c',
+  'fmpz_poly_factor/factor_van_hoeij.c',
+  'fmpz_poly_factor/factor_zassenhaus.c',
+  'fmpz_poly_factor/factor_zassenhaus_recombination.c',
+  'fmpz_poly_factor/fit_length.c',
+  'fmpz_poly_factor/init.c',
+  'fmpz_poly_factor/inlines.c',
+  'fmpz_poly_factor/insert.c',
+  'fmpz_poly_factor/print.c',
+  'fmpz_poly_factor/realloc.c',
+  'fmpz_poly_factor/set.c',
+  'fmpz_poly_factor/van_hoeij_check_if_solved.c',
+  'fmpz_poly_factor/zassenhaus_prune.c',
+  'fmpz_poly_factor/zassenhaus_subset.c',
+  'fmpz_poly/fibonacci.c',
+  'fmpz_poly/fit_length.c',
+  'fmpz_poly/gcd.c',
+  'fmpz_poly/gcd_heuristic.c',
+  'fmpz_poly/gcd_modular.c',
+  'fmpz_poly/gcd_subresultant.c',
+  'fmpz_poly/get_coeff.c',
+  'fmpz_poly/get_nmod_poly.c',
+  'fmpz_poly/get_str.c',
+  'fmpz_poly/hensel_build_tree.c',
+  'fmpz_poly/hensel_continue_lift.c',
+  'fmpz_poly/hensel_lift.c',
+  'fmpz_poly/hensel_lift_once.c',
+  'fmpz_poly/hensel_lift_only_inverse.c',
+  'fmpz_poly/hensel_lift_tree.c',
+  'fmpz_poly/hensel_lift_tree_recursive.c',
+  'fmpz_poly/hensel_lift_without_inverse.c',
+  'fmpz_poly/hensel_start_lift.c',
+  'fmpz_poly/hermite_h.c',
+  'fmpz_poly/hermite_he.c',
+  'fmpz_poly/inflate.c',
+  'fmpz_poly/init.c',
+  'fmpz_poly/inlines.c',
+  'fmpz_poly/interpolate_fmpz_vec.c',
+  'fmpz_poly/inv_series.c',
+  'fmpz_poly/io.c',
+  'fmpz_poly/is_cyclotomic.c',
+  'fmpz_poly/is_one.c',
+  'fmpz_poly/is_squarefree.c',
+  'fmpz_poly/lcm.c',
+  'fmpz_poly/legendre_pt.c',
+  'fmpz_poly_mat/add.c',
+  'fmpz_poly_mat/clear.c',
+  'fmpz_poly_mat/concat.c',
+  'fmpz_poly_mat/det.c',
+  'fmpz_poly_mat/det_fflu.c',
+  'fmpz_poly_mat/det_interpolate.c',
+  'fmpz_poly_mat/equal.c',
+  'fmpz_poly_mat/evaluate_fmpz.c',
+  'fmpz_poly_mat/fflu.c',
+  'fmpz_poly_mat/find_pivot_any.c',
+  'fmpz_poly_mat/find_pivot_partial.c',
+  'fmpz_poly_mat/init.c',
+  'fmpz_poly_mat/inlines.c',
+  'fmpz_poly_mat/inv.c',
+  'fmpz_poly_mat/is_one.c',
+  'fmpz_poly_mat/is_zero.c',
+  'fmpz_poly_mat/max_bits.c',
+  'fmpz_poly_mat/max_length.c',
+  'fmpz_poly_mat/mul.c',
+  'fmpz_poly_mat/mul_classical.c',
+  'fmpz_poly_mat/mul_KS.c',
+  'fmpz_poly_mat/mullow.c',
+  'fmpz_poly_mat/neg.c',
+  'fmpz_poly_mat/nullspace.c',
+  'fmpz_poly_mat/one.c',
+  'fmpz_poly_mat/pow.c',
+  'fmpz_poly_mat/pow_trunc.c',
+  'fmpz_poly_mat/print.c',
+  'fmpz_poly_mat/prod.c',
+  'fmpz_poly_mat/rand.c',
+  'fmpz_poly_mat/rank.c',
+  'fmpz_poly_mat/rref.c',
+  'fmpz_poly_mat/scalar.c',
+  'fmpz_poly_mat/set.c',
+  'fmpz_poly_mat/solve.c',
+  'fmpz_poly_mat/solve_fflu.c',
+  'fmpz_poly_mat/solve_fflu_precomp.c',
+  'fmpz_poly_mat/sqr.c',
+  'fmpz_poly_mat/sqr_classical.c',
+  'fmpz_poly_mat/sqr_KS.c',
+  'fmpz_poly_mat/sqrlow.c',
+  'fmpz_poly_mat/sub.c',
+  'fmpz_poly_mat/swap.c',
+  'fmpz_poly_mat/trace.c',
+  'fmpz_poly_mat/transpose.c',
+  'fmpz_poly_mat/truncate.c',
+  'fmpz_poly_mat/window.c',
+  'fmpz_poly_mat/zero.c',
+  'fmpz_poly/monomial_to_newton.c',
+  'fmpz_poly/mul.c',
+  'fmpz_poly/mul_classical.c',
+  'fmpz_poly/mulhigh.c',
+  'fmpz_poly/mulhigh_classical.c',
+  'fmpz_poly/mulhigh_karatsuba_n.c',
+  'fmpz_poly/mulhigh_n.c',
+  'fmpz_poly/mul_karatsuba.c',
+  'fmpz_poly/mul_KS.c',
+  'fmpz_poly/mullow.c',
+  'fmpz_poly/mullow_classical.c',
+  'fmpz_poly/mullow_karatsuba_n.c',
+  'fmpz_poly/mullow_KS.c',
+  'fmpz_poly/mullow_SS.c',
+  'fmpz_poly/mullow_SS_precache.c',
+  'fmpz_poly/mulmid_classical.c',
+  'fmpz_poly/mul_SS.c',
+  'fmpz_poly/neg.c',
+  'fmpz_poly/newton_to_monomial.c',
+  'fmpz_poly/normalise.c',
+  'fmpz_poly/norms.c',
+  'fmpz_poly/nth_derivative.c',
+  'fmpz_poly/num_real_roots.c',
+  'fmpz_poly/num_real_roots_sturm.c',
+  'fmpz_poly/pow_addchains.c',
+  'fmpz_poly/pow_binexp.c',
+  'fmpz_poly/pow_binomial.c',
+  'fmpz_poly/pow.c',
+  'fmpz_poly/powers_clear.c',
+  'fmpz_poly/powers_precompute.c',
+  'fmpz_poly/power_sums.c',
+  'fmpz_poly/power_sums_naive.c',
+  'fmpz_poly/power_sums_to_poly.c',
+  'fmpz_poly/pow_multinomial.c',
+  'fmpz_poly/pow_small.c',
+  'fmpz_poly/pow_trunc.c',
+  'fmpz_poly/preinvert.c',
+  'fmpz_poly/primitive_part.c',
+  'fmpz_poly/product_roots_fmpq_vec.c',
+  'fmpz_poly/product_roots_fmpz_vec.c',
+  'fmpz_poly/pseudo_div.c',
+  'fmpz_poly/pseudo_divrem_basecase.c',
+  'fmpz_poly/pseudo_divrem_cohen.c',
+  'fmpz_poly/pseudo_divrem_divconquer.c',
+  'fmpz_poly/pseudo_rem.c',
+  'fmpz_poly/pseudo_rem_cohen.c',
+  'fmpz_poly_q/add.c',
+  'fmpz_poly_q/addmul.c',
+  'fmpz_poly_q/canonicalise.c',
+  'fmpz_poly_q/clear.c',
+  'fmpz_poly_q/derivative.c',
+  'fmpz_poly_q/div.c',
+  'fmpz_poly_q/evaluate_fmpq.c',
+  'fmpz_poly_q/get_str.c',
+  'fmpz_poly_q/get_str_pretty.c',
+  'fmpz_poly_q/init.c',
+  'fmpz_poly_q/inlines.c',
+  'fmpz_poly_q/inv.c',
+  'fmpz_poly_q/is_canonical.c',
+  'fmpz_poly_q/mul.c',
+  'fmpz_poly_q/pow.c',
+  'fmpz_poly_q/print.c',
+  'fmpz_poly_q/print_pretty.c',
+  'fmpz_poly_q/randtest.c',
+  'fmpz_poly_q/scalar.c',
+  'fmpz_poly_q/set.c',
+  'fmpz_poly_q/set_str.c',
+  'fmpz_poly_q/sub.c',
+  'fmpz_poly_q/submul.c',
+  'fmpz_poly_q/swap.c',
+  'fmpz_poly/randtest.c',
+  'fmpz_poly/randtest_no_real_root.c',
+  'fmpz_poly/realloc.c',
+  'fmpz_poly/rem_basecase.c',
+  'fmpz_poly/rem.c',
+  'fmpz_poly/remove.c',
+  'fmpz_poly/remove_content_2exp.c',
+  'fmpz_poly/rem_powers_precomp.c',
+  'fmpz_poly/resultant.c',
+  'fmpz_poly/resultant_euclidean.c',
+  'fmpz_poly/resultant_modular.c',
+  'fmpz_poly/resultant_modular_div.c',
+  'fmpz_poly/reverse.c',
+  'fmpz_poly/revert_series.c',
+  'fmpz_poly/scalar.c',
+  'fmpz_poly/scale_2exp.c',
+  'fmpz_poly/set.c',
+  'fmpz_poly/set_coeff.c',
+  'fmpz_poly/set_length.c',
+  'fmpz_poly/set_str.c',
+  'fmpz_poly/set_trunc.c',
+  'fmpz_poly/shift_left.c',
+  'fmpz_poly/shift_right.c',
+  'fmpz_poly/signature.c',
+  'fmpz_poly/sqr.c',
+  'fmpz_poly/sqr_classical.c',
+  'fmpz_poly/sqr_karatsuba.c',
+  'fmpz_poly/sqr_KS.c',
+  'fmpz_poly/sqrlow.c',
+  'fmpz_poly/sqrlow_classical.c',
+  'fmpz_poly/sqrlow_karatsuba_n.c',
+  'fmpz_poly/sqrlow_KS.c',
+  'fmpz_poly/sqrt.c',
+  'fmpz_poly/sqrt_classical.c',
+  'fmpz_poly/sqrt_divconquer.c',
+  'fmpz_poly/sqrt_KS.c',
+  'fmpz_poly/sqrtrem_classical.c',
+  'fmpz_poly/sqrtrem_divconquer.c',
+  'fmpz_poly/sqrt_series.c',
+  'fmpz_poly/sub.c',
+  'fmpz_poly/sub_series.c',
+  'fmpz_poly/swap.c',
+  'fmpz_poly/swinnerton_dyer.c',
+  'fmpz_poly/taylor_shift.c',
+  'fmpz_poly/taylor_shift_divconquer.c',
+  'fmpz_poly/taylor_shift_horner.c',
+  'fmpz_poly/taylor_shift_multi_mod_threaded.c',
+  'fmpz_poly/theta_qexp.c',
+  'fmpz_poly/truncate.c',
+  'fmpz_poly/xgcd_modular.c',
+  'fmpz_poly/zero_coeffs.c',
+  'fmpz/pow.c',
+  'fmpz/powm.c',
+  'fmpz/powmod2_fmpz_preinv.c',
+  'fmpz/preinvn.c',
+  'fmpz/primorial.c',
+  'fmpz/rand.c',
+  'fmpz/remove.c',
+  'fmpz/rfac.c',
+  'fmpz/root.c',
+  'fmpz/setbit.c',
+  'fmpz/set.c',
+  'fmpz/set_str.c',
+  'fmpz/sgn.c',
+  'fmpz/size.c',
+  'fmpz/sizeinbase.c',
+  'fmpz/smod.c',
+  'fmpz/sqrt.c',
+  'fmpz/sqrtmod.c',
+  'fmpz/sqrtrem.c',
+  'fmpz/sub.c',
+  'fmpz/submul.c',
+  'fmpz/tdiv.c',
+  'fmpz/tstbit.c',
+  'fmpz/val2.c',
+  'fmpz_vec/add.c',
+  'fmpz_vec/clear.c',
+  'fmpz_vec/content.c',
+  'fmpz_vec/content_chained.c',
+  'fmpz_vec/dot.c',
+  'fmpz_vec/equal.c',
+  'fmpz_vec/get_d_vec_2exp.c',
+  'fmpz_vec/get_fft.c',
+  'fmpz_vec/get_nmod_vec.c',
+  'fmpz_vec/height.c',
+  'fmpz_vec/height_index.c',
+  'fmpz_vec/inlines.c',
+  'fmpz_vec/io.c',
+  'fmpz_vec/is_zero.c',
+  'fmpz_vec/lcm.c',
+  'fmpz_vec/max_bits.c',
+  'fmpz_vec/max.c',
+  'fmpz_vec/max_limbs.c',
+  'fmpz_vec/min.c',
+  'fmpz_vec/neg.c',
+  'fmpz_vec/prod.c',
+  'fmpz_vec/randtest.c',
+  'fmpz_vec/scalar.c',
+  'fmpz_vec/set.c',
+  'fmpz_vec/set_fft.c',
+  'fmpz_vec/set_nmod_vec.c',
+  'fmpz_vec/sort.c',
+  'fmpz_vec/sub.c',
+  'fmpz_vec/sum.c',
+  'fmpz_vec/sum_max_bits.c',
+  'fmpz_vec/swap.c',
+  'fmpz_vec/zero.c',
+  'fmpz/xgcd.c',
+  'fmpz/xgcd_partial.c',
+  'fq/add.c',
+  'fq/assignments.c',
+  'fq/bit_pack.c',
+  'fq/bit_unpack.c',
+  'fq/clear.c',
+  'fq/comparisons.c',
+  'fq/ctx_clear.c',
+  'fq/ctx_init.c',
+  'fq/ctx_init_modulus.c',
+  'fq/ctx_order.c',
+  'fq_default/ctx.c',
+  'fq_default/get_set.c',
+  'fq_default/inlines.c',
+  'fq_default/io.c',
+  'fq_default_mat/inlines.c',
+  'fq_default_mat/io.c',
+  'fq_default_poly_factor/inlines.c',
+  'fq_default_poly/inlines.c',
+  'fq_default_poly/io.c',
+  'fq_default_poly/set_fmpz_poly.c',
+  'fq_embed/derivative_inv.c',
+  'fq_embed/embed.c',
+  'fq_embed/matrices.c',
+  'fq_embed/mul_matrix.c',
+  'fq_embed/pow_series_inv.c',
+  'fq/embed_templates.c',
+  'fq_embed_templates/composition_matrix.c',
+  'fq_embed_templates/embed.c',
+  'fq_embed_templates/matrices.c',
+  'fq/frobenius.c',
+  'fq/gcdinv.c',
+  'fq/gen.c',
+  'fq/get_fmpz.c',
+  'fq/get_fmpz_mod_poly.c',
+  'fq/get_fmpz_poly.c',
+  'fq/get_set_fmpz_mod_mat.c',
+  'fq/get_str.c',
+  'fq/get_str_pretty.c',
+  'fq/init.c',
+  'fq/inlines.c',
+  'fq/inv.c',
+  'fq/io.c',
+  'fq_mat/inlines.c',
+  'fq_mat/mul_ks_cutoff.c',
+  'fq_mat/reduce_row.c',
+  'fq_mat_templates/add.c',
+  'fq/mat_templates.c',
+  'fq_mat_templates/can_solve.c',
+  'fq_mat_templates/charpoly.c',
+  'fq_mat_templates/clear.c',
+  'fq_mat_templates/concat_horizontal.c',
+  'fq_mat_templates/concat_vertical.c',
+  'fq_mat_templates/equal.c',
+  'fq_mat_templates/init.c',
+  'fq_mat_templates/init_set.c',
+  'fq_mat_templates/inv.c',
+  'fq_mat_templates/io.c',
+  'fq_mat_templates/is_one.c',
+  'fq_mat_templates/is_zero.c',
+  'fq_mat_templates/lu.c',
+  'fq_mat_templates/lu_classical.c',
+  'fq_mat_templates/lu_recursive.c',
+  'fq_mat_templates/mat_entry_set.c',
+  'fq_mat_templates/mat_invert_cols.c',
+  'fq_mat_templates/mat_swap_cols.c',
+  'fq_mat_templates/mat_swap_entrywise.c',
+  'fq_mat_templates/minpoly.c',
+  'fq_mat_templates/mul.c',
+  'fq_mat_templates/mul_classical.c',
+  'fq_mat_templates/mul_KS.c',
+  'fq_mat_templates/mul_vec.c',
+  'fq_mat_templates/neg.c',
+  'fq_mat_templates/nullspace.c',
+  'fq_mat_templates/one.c',
+  'fq_mat_templates/randops.c',
+  'fq_mat_templates/randpermdiag.c',
+  'fq_mat_templates/randrank.c',
+  'fq_mat_templates/randtest.c',
+  'fq_mat_templates/randtril.c',
+  'fq_mat_templates/randtriu.c',
+  'fq_mat_templates/rank.c',
+  'fq_mat_templates/reduce_row.c',
+  'fq_mat_templates/rref.c',
+  'fq_mat_templates/set.c',
+  'fq_mat_templates/set_fmpz_mod_mat.c',
+  'fq_mat_templates/set_nmod_mat.c',
+  'fq_mat_templates/similarity.c',
+  'fq_mat_templates/solve.c',
+  'fq_mat_templates/solve_tril.c',
+  'fq_mat_templates/solve_tril_classical.c',
+  'fq_mat_templates/solve_tril_recursive.c',
+  'fq_mat_templates/solve_triu.c',
+  'fq_mat_templates/solve_triu_classical.c',
+  'fq_mat_templates/solve_triu_recursive.c',
+  'fq_mat_templates/sub.c',
+  'fq_mat_templates/submul.c',
+  'fq_mat_templates/swap.c',
+  'fq_mat_templates/vec_mul.c',
+  'fq_mat_templates/window_clear.c',
+  'fq_mat_templates/window_init.c',
+  'fq_mat_templates/zero.c',
+  'fq/mul.c',
+  'fq/mul_fmpz.c',
+  'fq/mul_si.c',
+  'fq/mul_ui.c',
+  'fq/neg.c',
+  'fq_nmod/add.c',
+  'fq_nmod/assignments.c',
+  'fq_nmod/bit_pack.c',
+  'fq_nmod/bit_unpack.c',
+  'fq_nmod/comparisons.c',
+  'fq_nmod/ctx_clear.c',
+  'fq_nmod/ctx_init.c',
+  'fq_nmod/ctx_init_modulus.c',
+  'fq_nmod/ctx_order.c',
+  'fq_nmod_embed/modulus_derivative_inv.c',
+  'fq_nmod_embed/modulus_pow_series_inv.c',
+  'fq_nmod_embed/mul_matrix.c',
+  'fq_nmod/embed_templates.c',
+  'fq_nmod/frobenius.c',
+  'fq_nmod/gcdinv.c',
+  'fq_nmod/get_fmpz.c',
+  'fq_nmod/get_nmod_poly.c',
+  'fq_nmod/get_set_fmpz_mod_mat.c',
+  'fq_nmod/get_str.c',
+  'fq_nmod/get_str_pretty.c',
+  'fq_nmod/init.c',
+  'fq_nmod/inlines.c',
+  'fq_nmod/inv.c',
+  'fq_nmod/io.c',
+  'fq_nmod_mat/inlines.c',
+  'fq_nmod_mat/mul_ks_cutoff.c',
+  'fq_nmod_mat/reduce_row.c',
+  'fq_nmod/mat_templates.c',
+  'fq_nmod_mpoly/add.c',
+  'fq_nmod_mpoly/add_fq_nmod.c',
+  'fq_nmod_mpoly/cmp.c',
+  'fq_nmod_mpoly/combine_like_terms.c',
+  'fq_nmod_mpoly/compose_fq_nmod_mpoly.c',
+  'fq_nmod_mpoly/compose_fq_nmod_mpoly_gen.c',
+  'fq_nmod_mpoly/compose_fq_nmod_mpoly_geobucket.c',
+  'fq_nmod_mpoly/compose_fq_nmod_mpoly_horner.c',
+  'fq_nmod_mpoly/compose_fq_nmod_poly.c',
+  'fq_nmod_mpoly/compose_mat.c',
+  'fq_nmod_mpoly/content_vars.c',
+  'fq_nmod_mpoly/ctx_change_modulus.c',
+  'fq_nmod_mpoly/ctx_clear.c',
+  'fq_nmod_mpoly/ctx_init.c',
+  'fq_nmod_mpoly/ctx_init_rand.c',
+  'fq_nmod_mpoly/deflate.c',
+  'fq_nmod_mpoly/deflation.c',
+  'fq_nmod_mpoly/degrees.c',
+  'fq_nmod_mpoly/derivative.c',
+  'fq_nmod_mpoly/discriminant.c',
+  'fq_nmod_mpoly/div.c',
+  'fq_nmod_mpoly/divides.c',
+  'fq_nmod_mpoly/divides_monagan_pearce.c',
+  'fq_nmod_mpoly/div_monagan_pearce.c',
+  'fq_nmod_mpoly/divrem.c',
+  'fq_nmod_mpoly/divrem_ideal.c',
+  'fq_nmod_mpoly/divrem_ideal_monagan_pearce.c',
+  'fq_nmod_mpoly/divrem_monagan_pearce.c',
+  'fq_nmod_mpoly/equal.c',
+  'fq_nmod_mpoly/equal_fq_nmod.c',
+  'fq_nmod_mpoly/evaluate_all.c',
+  'fq_nmod_mpoly/evaluate_one.c',
+  'fq_nmod_mpoly_factor/append.c',
+  'fq_nmod_mpoly_factor/clear.c',
+  'fq_nmod_mpoly_factor/cmp.c',
+  'fq_nmod_mpoly_factor/compression.c',
+  'fq_nmod_mpoly_factor/eval.c',
+  'fq_nmod_mpoly_factor/expand.c',
+  'fq_nmod_mpoly_factor/factor.c',
+  'fq_nmod_mpoly_factor/factor_content.c',
+  'fq_nmod_mpoly_factor/factor_squarefree.c',
+  'fq_nmod_mpoly_factor/fit_length.c',
+  'fq_nmod_mpoly_factor/get_constant_fq_nmod.c',
+  'fq_nmod_mpoly_factor/get_exp_si.c',
+  'fq_nmod_mpoly_factor/get_set_lead0.c',
+  'fq_nmod_mpoly_factor/init.c',
+  'fq_nmod_mpoly_factor/inlines.c',
+  'fq_nmod_mpoly_factor/io.c',
+  'fq_nmod_mpoly_factor/irred_lgprime.c',
+  'fq_nmod_mpoly_factor/irred_smprime_wang.c',
+  'fq_nmod_mpoly_factor/irred_smprime_zassenhaus.c',
+  'fq_nmod_mpoly_factor/irred_smprime_zippel.c',
+  'fq_nmod_mpoly_factor/lcc_wang.c',
+  'fq_nmod_mpoly_factor/mpoly_hlift.c',
+  'fq_nmod_mpoly_factor/mpoly_pfrac.c',
+  'fq_nmod_mpoly_factor/mpolyv.c',
+  'fq_nmod_mpoly_factor/n_bpoly_fq.c',
+  'fq_nmod_mpoly_factor/n_bpoly_fq_factor_lgprime.c',
+  'fq_nmod_mpoly_factor/n_bpoly_fq_factor_smprime.c',
+  'fq_nmod_mpoly_factor/n_bpoly_hlift.c',
+  'fq_nmod_mpoly_factor/one.c',
+  'fq_nmod_mpoly_factor/polyu3_hlift.c',
+  'fq_nmod_mpoly_factor/polyu.c',
+  'fq_nmod_mpoly_factor/polyun.c',
+  'fq_nmod_mpoly_factor/realloc.c',
+  'fq_nmod_mpoly_factor/set.c',
+  'fq_nmod_mpoly_factor/sort.c',
+  'fq_nmod_mpoly/fit_length.c',
+  'fq_nmod_mpoly/fit_length_fit_bits.c',
+  'fq_nmod_mpoly/fit_length_reset_bits.c',
+  'fq_nmod_mpoly/fq_nmod_embed.c',
+  'fq_nmod_mpoly/gcd_brown.c',
+  'fq_nmod_mpoly/gcd.c',
+  'fq_nmod_mpoly/gcd_cofactors.c',
+  'fq_nmod_mpoly/gcd_hensel.c',
+  'fq_nmod_mpoly/gcd_zippel2.c',
+  'fq_nmod_mpoly/gcd_zippel.c',
+  'fq_nmod_mpoly/gen.c',
+  'fq_nmod_mpoly/geobuckets.c',
+  'fq_nmod_mpoly/get_coeff_fq_nmod_fmpz.c',
+  'fq_nmod_mpoly/get_coeff_fq_nmod_monomial.c',
+  'fq_nmod_mpoly/get_coeff_fq_nmod_ui.c',
+  'fq_nmod_mpoly/get_coeff_vars_ui.c',
+  'fq_nmod_mpoly/get_fq_nmod.c',
+  'fq_nmod_mpoly/get_set_is_fq_nmod_poly.c',
+  'fq_nmod_mpoly/get_str_pretty.c',
+  'fq_nmod_mpoly/get_term.c',
+  'fq_nmod_mpoly/get_term_coeff_fq_nmod.c',
+  'fq_nmod_mpoly/get_term_exp_fmpz.c',
+  'fq_nmod_mpoly/get_term_exp_si.c',
+  'fq_nmod_mpoly/get_term_exp_ui.c',
+  'fq_nmod_mpoly/get_term_monomial.c',
+  'fq_nmod_mpoly/get_term_var_exp_si.c',
+  'fq_nmod_mpoly/get_term_var_exp_ui.c',
+  'fq_nmod_mpoly/inflate.c',
+  'fq_nmod_mpoly/init.c',
+  'fq_nmod_mpoly/inlines.c',
+  'fq_nmod_mpoly/interp.c',
+  'fq_nmod_mpoly/io.c',
+  'fq_nmod_mpoly/is_canonical.c',
+  'fq_nmod_mpoly/is_fq_nmod.c',
+  'fq_nmod_mpoly/is_gen.c',
+  'fq_nmod_mpoly/is_monic.c',
+  'fq_nmod_mpoly/is_one.c',
+  'fq_nmod_mpoly/lead_coeff_vars.c',
+  'fq_nmod_mpoly/make_monic.c',
+  'fq_nmod_mpoly/mpolyn.c',
+  'fq_nmod_mpoly/mpolyn_gcd_brown.c',
+  'fq_nmod_mpoly/mpolyu.c',
+  'fq_nmod_mpoly/mpolyu_divides.c',
+  'fq_nmod_mpoly/mpolyu_gcdp_zippel.c',
+  'fq_nmod_mpoly/mpolyun.c',
+  'fq_nmod_mpoly/mul.c',
+  'fq_nmod_mpoly/mul_johnson.c',
+  'fq_nmod_mpoly/neg.c',
+  'fq_nmod_mpoly/one.c',
+  'fq_nmod_mpoly/pow_fmpz.c',
+  'fq_nmod_mpoly/pow_rmul.c',
+  'fq_nmod_mpoly/pow_ui.c',
+  'fq_nmod_mpoly/push_term_fq_nmod_fmpz.c',
+  'fq_nmod_mpoly/push_term_fq_nmod_ui.c',
+  'fq_nmod_mpoly/quadratic_root.c',
+  'fq_nmod_mpoly/randtest_bits.c',
+  'fq_nmod_mpoly/randtest_bound.c',
+  'fq_nmod_mpoly/randtest_bounds.c',
+  'fq_nmod_mpoly/realloc.c',
+  'fq_nmod_mpoly/repack_bits.c',
+  'fq_nmod_mpoly/resize.c',
+  'fq_nmod_mpoly/resultant.c',
+  'fq_nmod_mpoly/reverse.c',
+  'fq_nmod_mpoly/scalar_addmul_fq_nmod.c',
+  'fq_nmod_mpoly/scalar_mul_fq_nmod.c',
+  'fq_nmod_mpoly/set.c',
+  'fq_nmod_mpoly/set_coeff_fq_nmod_fmpz.c',
+  'fq_nmod_mpoly/set_coeff_fq_nmod_monomial.c',
+  'fq_nmod_mpoly/set_coeff_fq_nmod_ui.c',
+  'fq_nmod_mpoly/set_fmpz.c',
+  'fq_nmod_mpoly/setform.c',
+  'fq_nmod_mpoly/set_fq_nmod.c',
+  'fq_nmod_mpoly/set_fq_nmod_gen.c',
+  'fq_nmod_mpoly/set_str_pretty.c',
+  'fq_nmod_mpoly/set_term_coeff_fq_nmod.c',
+  'fq_nmod_mpoly/set_term_exp_fmpz.c',
+  'fq_nmod_mpoly/set_term_exp_ui.c',
+  'fq_nmod_mpoly/sort_terms.c',
+  'fq_nmod_mpoly/sqrt_heap.c',
+  'fq_nmod_mpoly/sub.c',
+  'fq_nmod_mpoly/sub_fq_nmod.c',
+  'fq_nmod_mpoly/term_content.c',
+  'fq_nmod_mpoly/term_exp_fits.c',
+  'fq_nmod_mpoly/to_from_fq_nmod_poly.c',
+  'fq_nmod_mpoly/univar.c',
+  'fq_nmod_mpoly/void_ring.c',
+  'fq_nmod/mul.c',
+  'fq_nmod/mul_fmpz.c',
+  'fq_nmod/mul_si.c',
+  'fq_nmod/mul_ui.c',
+  'fq_nmod/neg.c',
+  'fq_nmod/norm.c',
+  'fq_nmod_poly_factor/inlines.c',
+  'fq_nmod_poly_factor/iterated_frobenius_cutoff.c',
+  'fq_nmod/poly_factor_templates.c',
+  'fq_nmod_poly/inlines.c',
+  'fq_nmod_poly/mul.c',
+  'fq_nmod_poly/mul_classical.c',
+  'fq_nmod_poly/mullow_univariate.c',
+  'fq_nmod_poly/mul_univariate.c',
+  'fq_nmod/poly_templates.c',
+  'fq_nmod/pow.c',
+  'fq_nmod/pth_root.c',
+  'fq_nmod/rand.c',
+  'fq_nmod/randtest.c',
+  'fq_nmod/reduce.c',
+  'fq_nmod/set_fmpz.c',
+  'fq_nmod/set_nmod_poly.c',
+  'fq_nmod/sqr.c',
+  'fq_nmod/sub.c',
+  'fq_nmod/sub_one.c',
+  'fq_nmod/templates.c',
+  'fq_nmod/trace.c',
+  'fq_nmod_vec/dot.c',
+  'fq_nmod_vec/inlines.c',
+  'fq_nmod/vec_templates.c',
+  'fq/norm.c',
+  'fq_poly_factor/inlines.c',
+  'fq_poly_factor/iterated_frobenius_cutoff.c',
+  'fq/poly_factor_templates.c',
+  'fq_poly_factor_templates/clear.c',
+  'fq_poly_factor_templates/concat.c',
+  'fq_poly_factor_templates/factor_berlekamp.c',
+  'fq_poly_factor_templates/factor.c',
+  'fq_poly_factor_templates/factor_cantor_zassenhaus.c',
+  'fq_poly_factor_templates/factor_distinct_deg.c',
+  'fq_poly_factor_templates/factor_equal_deg.c',
+  'fq_poly_factor_templates/factor_equal_deg_prob.c',
+  'fq_poly_factor_templates/factor_kaltofen_shoup.c',
+  'fq_poly_factor_templates/factor_split_single.c',
+  'fq_poly_factor_templates/factor_squarefree.c',
+  'fq_poly_factor_templates/fit_length.c',
+  'fq_poly_factor_templates/init.c',
+  'fq_poly_factor_templates/insert.c',
+  'fq_poly_factor_templates/is_irreducible_ben_or.c',
+  'fq_poly_factor_templates/is_irreducible.c',
+  'fq_poly_factor_templates/is_irreducible_ddf.c',
+  'fq_poly_factor_templates/is_squarefree.c',
+  'fq_poly_factor_templates/iterated_frobenius_preinv.c',
+  'fq_poly_factor_templates/pow.c',
+  'fq_poly_factor_templates/print.c',
+  'fq_poly_factor_templates/print_pretty.c',
+  'fq_poly_factor_templates/realloc.c',
+  'fq_poly_factor_templates/roots.c',
+  'fq_poly_factor_templates/set.c',
+  'fq_poly/inlines.c',
+  'fq_poly/mul_classical.c',
+  'fq_poly/mullow_univariate.c',
+  'fq_poly/mul_univariate.c',
+  'fq_poly_templates/add.c',
+  'fq_poly_templates/add_series.c',
+  'fq_poly_templates/add_si.c',
+  'fq/poly_templates.c',
+  'fq_poly_templates/clear.c',
+  'fq_poly_templates/comparisons.c',
+  'fq_poly_templates/compose.c',
+  'fq_poly_templates/compose_mod_brent_kung.c',
+  'fq_poly_templates/compose_mod_brent_kung_precomp_preinv.c',
+  'fq_poly_templates/compose_mod_brent_kung_preinv.c',
+  'fq_poly_templates/compose_mod.c',
+  'fq_poly_templates/compose_mod_horner.c',
+  'fq_poly_templates/compose_mod_horner_preinv.c',
+  'fq_poly_templates/compose_mod_preinv.c',
+  'fq_poly_templates/deflate.c',
+  'fq_poly_templates/deflation.c',
+  'fq_poly_templates/derivative.c',
+  'fq_poly_templates/div.c',
+  'fq_poly_templates/divides.c',
+  'fq_poly_templates/div_newton_n_preinv.c',
+  'fq_poly_templates/divrem.c',
+  'fq_poly_templates/divrem_f.c',
+  'fq_poly_templates/divrem_newton_n_preinv.c',
+  'fq_poly_templates/div_series.c',
+  'fq_poly_templates/equal.c',
+  'fq_poly_templates/equal_trunc.c',
+  'fq_poly_templates/evaluate_fq.c',
+  'fq_poly_templates/evaluate_fq_vec.c',
+  'fq_poly_templates/evaluate_fq_vec_fast.c',
+  'fq_poly_templates/evaluate_fq_vec_iter.c',
+  'fq_poly_templates/fit_length.c',
+  'fq_poly_templates/gcd.c',
+  'fq_poly_templates/gcd_euclidean_f.c',
+  'fq_poly_templates/gen.c',
+  'fq_poly_templates/get_coeff.c',
+  'fq_poly_templates/get_str.c',
+  'fq_poly_templates/get_str_pretty.c',
+  'fq_poly_templates/hamming_weight.c',
+  'fq_poly_templates/inflate.c',
+  'fq_poly_templates/init.c',
+  'fq_poly_templates/inv_series_newton.c',
+  'fq_poly_templates/invsqrt_series.c',
+  'fq_poly_templates/io.c',
+  'fq_poly_templates/is_gen.c',
+  'fq_poly_templates/make_monic.c',
+  'fq_poly_templates/mul.c',
+  'fq_poly_templates/mul_classical.c',
+  'fq_poly_templates/mulhigh.c',
+  'fq_poly_templates/mulhigh_classical.c',
+  'fq_poly_templates/mul_KS.c',
+  'fq_poly_templates/mullow.c',
+  'fq_poly_templates/mullow_classical.c',
+  'fq_poly_templates/mullow_KS.c',
+  'fq_poly_templates/mulmod.c',
+  'fq_poly_templates/mulmod_preinv.c',
+  'fq_poly_templates/mul_reorder.c',
+  'fq_poly_templates/neg.c',
+  'fq_poly_templates/normalise.c',
+  'fq_poly_templates/one.c',
+  'fq_poly_templates/pow.c',
+  'fq_poly_templates/powmod_fmpz_binexp.c',
+  'fq_poly_templates/powmod_fmpz_binexp_preinv.c',
+  'fq_poly_templates/powmod_fmpz_sliding_preinv.c',
+  'fq_poly_templates/powmod_ui_binexp.c',
+  'fq_poly_templates/powmod_ui_binexp_preinv.c',
+  'fq_poly_templates/powmod_x_fmpz_preinv.c',
+  'fq_poly_templates/pow_trunc_binexp.c',
+  'fq_poly_templates/pow_trunc.c',
+  'fq_poly_templates/randtest.c',
+  'fq_poly_templates/randtest_irreducible.c',
+  'fq_poly_templates/randtest_monic.c',
+  'fq_poly_templates/realloc.c',
+  'fq_poly_templates/rem.c',
+  'fq_poly_templates/remove.c',
+  'fq_poly_templates/reverse.c',
+  'fq_poly_templates/scalar_addmul_fq.c',
+  'fq_poly_templates/scalar_div_fq.c',
+  'fq_poly_templates/scalar_mul_fq.c',
+  'fq_poly_templates/scalar_submul_fq.c',
+  'fq_poly_templates/set.c',
+  'fq_poly_templates/set_coeff.c',
+  'fq_poly_templates/set_fmpz_mod_poly.c',
+  'fq_poly_templates/set_fq.c',
+  'fq_poly_templates/set_length.c',
+  'fq_poly_templates/set_nmod_poly.c',
+  'fq_poly_templates/set_trunc.c',
+  'fq_poly_templates/shift_left.c',
+  'fq_poly_templates/shift_right.c',
+  'fq_poly_templates/sqr.c',
+  'fq_poly_templates/sqr_classical.c',
+  'fq_poly_templates/sqr_KS.c',
+  'fq_poly_templates/sqr_reorder.c',
+  'fq_poly_templates/sqrt.c',
+  'fq_poly_templates/sqrt_series.c',
+  'fq_poly_templates/sub.c',
+  'fq_poly_templates/sub_series.c',
+  'fq_poly_templates/swap.c',
+  'fq_poly_templates/tree.c',
+  'fq_poly_templates/truncate.c',
+  'fq_poly_templates/xgcd.c',
+  'fq_poly_templates/xgcd_euclidean_f.c',
+  'fq_poly_templates/zero.c',
+  'fq/pow.c',
+  'fq/pow_ui.c',
+  'fq/pth_root.c',
+  'fq/rand.c',
+  'fq/randtest.c',
+  'fq/reduce.c',
+  'fq/set_fmpz_mod_poly.c',
+  'fq/set_fmpz_poly.c',
+  'fq/sqr.c',
+  'fq/sub.c',
+  'fq/sub_one.c',
+  'fq/swap.c',
+  'fq/templates.c',
+  'fq_templates/div.c',
+  'fq_templates/is_invertible.c',
+  'fq_templates/is_invertible_f.c',
+  'fq_templates/is_square.c',
+  'fq_templates/multiplicative_order.c',
+  'fq_templates/sqrt.c',
+  'fq/trace.c',
+  'fq_vec/dot.c',
+  'fq_vec/inlines.c',
+  'fq_vec_templates/add.c',
+  'fq/vec_templates.c',
+  'fq_vec_templates/clear.c',
+  'fq_vec_templates/dot.c',
+  'fq_vec_templates/equal.c',
+  'fq_vec_templates/init.c',
+  'fq_vec_templates/io.c',
+  'fq_vec_templates/is_zero.c',
+  'fq_vec_templates/neg.c',
+  'fq_vec_templates/randtest.c',
+  'fq_vec_templates/scalar_addmul_fq.c',
+  'fq_vec_templates/scalar_mul_fq.c',
+  'fq_vec_templates/scalar_submul_fq.c',
+  'fq_vec_templates/set.c',
+  'fq_vec_templates/sub.c',
+  'fq_vec_templates/swap.c',
+  'fq_vec_templates/zero.c',
+  'fq_zech/add.c',
+  'fq_zech/bit_pack.c',
+  'fq_zech/bit_unpack.c',
+  'fq_zech/ctx.c',
+  'fq_zech_embed/composition_matrix.c',
+  'fq_zech_embed/modulus_derivative_inv.c',
+  'fq_zech_embed/mul_matrix.c',
+  'fq_zech/embed_templates.c',
+  'fq_zech/frobenius.c',
+  'fq_zech/gcdinv.c',
+  'fq_zech/get_fmpz.c',
+  'fq_zech/get_fq_nmod.c',
+  'fq_zech/get_nmod_poly.c',
+  'fq_zech/get_set_fmpz_mod_mat.c',
+  'fq_zech/get_str.c',
+  'fq_zech/inlines.c',
+  'fq_zech/inv.c',
+  'fq_zech/io.c',
+  'fq_zech/is_square.c',
+  'fq_zech_mat/inlines.c',
+  'fq_zech_mat/mul_ks_cutoff.c',
+  'fq_zech/mat_templates.c',
+  'fq_zech/modulus_pow_series_inv.c',
+  'fq_zech_mpoly/add.c',
+  'fq_zech_mpoly/clear.c',
+  'fq_zech_mpoly/combine_like_terms.c',
+  'fq_zech_mpoly/ctx.c',
+  'fq_zech_mpoly/degrees.c',
+  'fq_zech_mpoly/derivative.c',
+  'fq_zech_mpoly/divides.c',
+  'fq_zech_mpoly/divides_monagan_pearce.c',
+  'fq_zech_mpoly/divrem.c',
+  'fq_zech_mpoly/divrem_monagan_pearce.c',
+  'fq_zech_mpoly/equal.c',
+  'fq_zech_mpoly/evaluate_all.c',
+  'fq_zech_mpoly/evaluate_one.c',
+  'fq_zech_mpoly_factor/bpoly.c',
+  'fq_zech_mpoly_factor/bpoly_factor_smprime.c',
+  'fq_zech_mpoly_factor/bpoly_hlift.c',
+  'fq_zech_mpoly_factor/clear.c',
+  'fq_zech_mpoly_factor/eval.c',
+  'fq_zech_mpoly_factor/factor.c',
+  'fq_zech_mpoly_factor/fit_length.c',
+  'fq_zech_mpoly_factor/get_set_is_fq_nmod_poly.c',
+  'fq_zech_mpoly_factor/get_set_lead0.c',
+  'fq_zech_mpoly_factor/init.c',
+  'fq_zech_mpoly_factor/io.c',
+  'fq_zech_mpoly_factor/irred_smprime_wang.c',
+  'fq_zech_mpoly_factor/irred_smprime_zassenhaus.c',
+  'fq_zech_mpoly_factor/irred_smprime_zippel.c',
+  'fq_zech_mpoly_factor/lcc_wang.c',
+  'fq_zech_mpoly_factor/mpoly_hlift.c',
+  'fq_zech_mpoly_factor/mpoly_pfrac.c',
+  'fq_zech_mpoly_factor/mpoly_univar.c',
+  'fq_zech_mpoly_factor/mpolyv.c',
+  'fq_zech_mpoly_factor/polyu3_hlift.c',
+  'fq_zech_mpoly_factor/polyu.c',
+  'fq_zech_mpoly_factor/polyun.c',
+  'fq_zech_mpoly_factor/realloc.c',
+  'fq_zech_mpoly_factor/tpoly.c',
+  'fq_zech_mpoly/fit_bits.c',
+  'fq_zech_mpoly/fit_length.c',
+  'fq_zech_mpoly/gcd.c',
+  'fq_zech_mpoly/gcd_cofactors.c',
+  'fq_zech_mpoly/gen.c',
+  'fq_zech_mpoly/get_coeff_vars_ui.c',
+  'fq_zech_mpoly/get_set_fq_nmod_mpoly.c',
+  'fq_zech_mpoly/get_set_nmod_mpoly.c',
+  'fq_zech_mpoly/init.c',
+  'fq_zech_mpoly/io.c',
+  'fq_zech_mpoly/is_canonical.c',
+  'fq_zech_mpoly/is_fq_zech.c',
+  'fq_zech_mpoly/is_one.c',
+  'fq_zech_mpoly/lead_coeff_vars.c',
+  'fq_zech_mpoly/make_monic.c',
+  'fq_zech_mpoly/mpolyu.c',
+  'fq_zech_mpoly/mul.c',
+  'fq_zech_mpoly/mul_johnson.c',
+  'fq_zech_mpoly/neg.c',
+  'fq_zech_mpoly/pow_rmul.c',
+  'fq_zech_mpoly/pow_ui.c',
+  'fq_zech_mpoly/repack_bits.c',
+  'fq_zech_mpoly/scalar.c',
+  'fq_zech_mpoly/set.c',
+  'fq_zech_mpoly/set_fq_zech.c',
+  'fq_zech_mpoly/set_ui.c',
+  'fq_zech_mpoly/sort_terms.c',
+  'fq_zech_mpoly/sub.c',
+  'fq_zech_mpoly/sub_fq_zech.c',
+  'fq_zech_mpoly/term_exp_fits.c',
+  'fq_zech_mpoly/univar.c',
+  'fq_zech/mul.c',
+  'fq_zech/neg.c',
+  'fq_zech/norm.c',
+  'fq_zech_poly_factor/inlines.c',
+  'fq_zech_poly_factor/iterated_frobenius_cutoff.c',
+  'fq_zech/poly_factor_templates.c',
+  'fq_zech_poly/inlines.c',
+  'fq_zech/poly_templates.c',
+  'fq_zech/pow.c',
+  'fq_zech/pth_root.c',
+  'fq_zech/rand.c',
+  'fq_zech/randtest.c',
+  'fq_zech/set.c',
+  'fq_zech/set_fmpz.c',
+  'fq_zech/set_fq_nmod.c',
+  'fq_zech/set_nmod_poly.c',
+  'fq_zech/sqr.c',
+  'fq_zech/sqrt.c',
+  'fq_zech/sub.c',
+  'fq_zech/sub_one.c',
+  'fq_zech/templates.c',
+  'fq_zech/trace.c',
+  'fq_zech_vec/inlines.c',
+  'fq_zech/vec_templates.c',
+  'generic_files/clz_tab.c',
+  'generic_files/exception.c',
+  'generic_files/fscanf.c',
+  'generic_files/gettimeofday.c',
+  'generic_files/inlines.c',
+  'generic_files/io.c',
+  'generic_files/memory_manager.c',
+  'generic_files/profiler.c',
+  'generic_files/scanf.c',
+  'generic_files/sprintf.c',
+  'generic_files/sscanf.c',
+  'generic_files/test_helpers.c',
+  'generic_files/version.c',
+  'gr/acb.c',
+  'gr/acf.c',
+  'gr/arb.c',
+  'gr/arf.c',
+  'gr/ca.c',
+  'gr/cmp_coercion.c',
+  'gr/dirichlet.c',
+  'gr/fexpr.c',
+  'gr/fmpq.c',
+  'gr/fmpq_poly.c',
+  'gr/fmpz.c',
+  'gr/fmpzi.c',
+  'gr/fmpz_mod.c',
+  'gr/fmpz_mpoly.c',
+  'gr/fmpz_mpoly_q.c',
+  'gr/fmpz_poly.c',
+  'gr/fq.c',
+  'gr/fq_nmod.c',
+  'gr/fq_zech.c',
+  'gr_generic/fmpz_mpoly_evaluate.c',
+  'gr_generic/fmpz_poly_evaluate.c',
+  'gr_generic/fmpz_poly_evaluate_horner.c',
+  'gr_generic/fmpz_poly_evaluate_rectangular.c',
+  'gr_generic/generic.c',
+  'gr_generic/generic_pow.c',
+  'gr_generic/set_fexpr.c',
+  'gr_generic/set_str_expr.c',
+  'gr/init_random.c',
+  'gr/inlines.c',
+  'gr/io.c',
+  'gr_mat/add.c',
+  'gr_mat/addmul_scalar.c',
+  'gr_mat/add_scalar.c',
+  'gr_mat/adjugate.c',
+  'gr_mat/adjugate_charpoly.c',
+  'gr_mat/adjugate_cofactor.c',
+  'gr_mat/apply_row_similarity.c',
+  'gr_mat/charpoly_berkowitz.c',
+  'gr_mat/charpoly.c',
+  'gr_mat/charpoly_danilevsky.c',
+  'gr_mat/charpoly_faddeev_bsgs.c',
+  'gr_mat/charpoly_faddeev.c',
+  'gr_mat/charpoly_hessenberg.c',
+  'gr_mat/clear.c',
+  'gr_mat/concat_horizontal.c',
+  'gr_mat/concat_vertical.c',
+  'gr_mat/det_berkowitz.c',
+  'gr_mat/det.c',
+  'gr_mat/det_cofactor.c',
+  'gr_mat/det_fflu.c',
+  'gr_mat/det_lu.c',
+  'gr_mat/diag_mul.c',
+  'gr_mat/diagonalization.c',
+  'gr_mat/div_scalar.c',
+  'gr_mat/eigenvalues.c',
+  'gr_mat/equal.c',
+  'gr_mat/exp.c',
+  'gr_mat/fflu.c',
+  'gr_mat/find_nonzero_pivot.c',
+  'gr_mat/gr_poly_evaluate.c',
+  'gr_mat/hadamard.c',
+  'gr_mat/hessenberg.c',
+  'gr_mat/hessenberg_gauss.c',
+  'gr_mat/hessenberg_householder.c',
+  'gr_mat/hilbert.c',
+  'gr_mat/init.c',
+  'gr_mat/init_set.c',
+  'gr_mat/inlines.c',
+  'gr_mat/inv.c',
+  'gr_mat/invert_cols.c',
+  'gr_mat/invert_rows.c',
+  'gr_mat/io.c',
+  'gr_mat/is_diagonal.c',
+  'gr_mat/is_hessenberg.c',
+  'gr_mat/is_lower_triangular.c',
+  'gr_mat/is_neg_one.c',
+  'gr_mat/is_one.c',
+  'gr_mat/is_scalar.c',
+  'gr_mat/is_upper_triangular.c',
+  'gr_mat/is_zero.c',
+  'gr_mat/jordan_blocks.c',
+  'gr_mat/jordan_form.c',
+  'gr_mat/jordan_transformation.c',
+  'gr_mat/log.c',
+  'gr_mat/lu.c',
+  'gr_mat/lu_classical.c',
+  'gr_mat/lu_recursive.c',
+  'gr_mat/minpoly_field.c',
+  'gr_mat/mul.c',
+  'gr_mat/mul_classical.c',
+  'gr_mat/mul_diag.c',
+  'gr_mat/mul_scalar.c',
+  'gr_mat/mul_strassen.c',
+  'gr_mat/neg.c',
+  'gr_mat/nonsingular_solve.c',
+  'gr_mat/nonsingular_solve_den.c',
+  'gr_mat/nonsingular_solve_den_fflu.c',
+  'gr_mat/nonsingular_solve_fflu.c',
+  'gr_mat/nonsingular_solve_fflu_precomp.c',
+  'gr_mat/nonsingular_solve_lu.c',
+  'gr_mat/nonsingular_solve_lu_precomp.c',
+  'gr_mat/nonsingular_solve_tril.c',
+  'gr_mat/nonsingular_solve_triu.c',
+  'gr_mat/nullspace.c',
+  'gr_mat/one.c',
+  'gr_mat/ones.c',
+  'gr_mat/pascal.c',
+  'gr_mat/randops.c',
+  'gr_mat/randpermdiag.c',
+  'gr_mat/randrank.c',
+  'gr_mat/randtest.c',
+  'gr_mat/rank.c',
+  'gr_mat/rank_fflu.c',
+  'gr_mat/rank_lu.c',
+  'gr_mat/reduce_row.c',
+  'gr/matrix.c',
+  'gr_mat/rref.c',
+  'gr_mat/rref_den.c',
+  'gr_mat/rref_fflu.c',
+  'gr_mat/rref_lu.c',
+  'gr_mat/set.c',
+  'gr_mat/set_fmpq.c',
+  'gr_mat/set_fmpq_mat.c',
+  'gr_mat/set_fmpz.c',
+  'gr_mat/set_fmpz_mat.c',
+  'gr_mat/set_scalar.c',
+  'gr_mat/set_si.c',
+  'gr_mat/set_ui.c',
+  'gr_mat/solve_field.c',
+  'gr_mat/stirling.c',
+  'gr_mat/sub.c',
+  'gr_mat/submul_scalar.c',
+  'gr_mat/sub_scalar.c',
+  'gr_mat/swap_cols.c',
+  'gr_mat/swap_entrywise.c',
+  'gr_mat/swap_rows.c',
+  'gr_mat/trace.c',
+  'gr_mat/transpose.c',
+  'gr_mat/window_init.c',
+  'gr_mat/write.c',
+  'gr_mat/zero.c',
+  'gr_mpoly/add.c',
+  'gr/mpoly.c',
+  'gr_mpoly/combine_like_terms.c',
+  'gr_mpoly/equal.c',
+  'gr_mpoly/fit_bits.c',
+  'gr_mpoly/fit_length.c',
+  'gr_mpoly/fit_length_fit_bits.c',
+  'gr_mpoly/fit_length_reset_bits.c',
+  'gr_mpoly/gen.c',
+  'gr_mpoly/get_coeff_scalar_fmpz.c',
+  'gr_mpoly/get_coeff_scalar_ui.c',
+  'gr_mpoly/init.c',
+  'gr_mpoly/inlines.c',
+  'gr_mpoly/is_canonical.c',
+  'gr_mpoly/mul.c',
+  'gr_mpoly/mul_johnson.c',
+  'gr_mpoly/mul_monomial.c',
+  'gr_mpoly/mul_scalar.c',
+  'gr_mpoly/neg.c',
+  'gr_mpoly/push_term.c',
+  'gr_mpoly/randtest_bits.c',
+  'gr_mpoly/randtest_bound.c',
+  'gr_mpoly/set.c',
+  'gr_mpoly/set_coeff_scalar_fmpz.c',
+  'gr_mpoly/set_coeff_scalar_ui.c',
+  'gr_mpoly/set_scalar.c',
+  'gr_mpoly/sort_terms.c',
+  'gr_mpoly/sub.c',
+  'gr_mpoly/write.c',
+  'gr/nf.c',
+  'gr/nmod32.c',
+  'gr/nmod8.c',
+  'gr/nmod.c',
+  'gr/perm.c',
+  'gr_poly/add.c',
+  'gr_poly/asin_series.c',
+  'gr_poly/clear.c',
+  'gr_poly/compose.c',
+  'gr_poly/compose_divconquer.c',
+  'gr_poly/compose_horner.c',
+  'gr_poly/compose_series_brent_kung.c',
+  'gr_poly/compose_series.c',
+  'gr_poly/compose_series_divconquer.c',
+  'gr_poly/compose_series_horner.c',
+  'gr_poly/derivative.c',
+  'gr_poly/div_basecase.c',
+  'gr_poly/div.c',
+  'gr_poly/div_divconquer.c',
+  'gr_poly/divexact_basecase.c',
+  'gr_poly/divexact_bidirectional.c',
+  'gr_poly/divexact.c',
+  'gr_poly/divexact_series_basecase.c',
+  'gr_poly/div_newton.c',
+  'gr_poly/divrem_basecase.c',
+  'gr_poly/divrem.c',
+  'gr_poly/divrem_divconquer.c',
+  'gr_poly/divrem_newton.c',
+  'gr_poly/div_scalar.c',
+  'gr_poly/div_series_basecase.c',
+  'gr_poly/div_series.c',
+  'gr_poly/div_series_divconquer.c',
+  'gr_poly/div_series_invmul.c',
+  'gr_poly/div_series_newton.c',
+  'gr_poly/equal.c',
+  'gr_poly/evaluate.c',
+  'gr_poly/evaluate_horner.c',
+  'gr_poly/evaluate_modular.c',
+  'gr_poly/evaluate_other.c',
+  'gr_poly/evaluate_other_horner.c',
+  'gr_poly/evaluate_other_rectangular.c',
+  'gr_poly/evaluate_rectangular.c',
+  'gr_poly/evaluate_vec_fast.c',
+  'gr_poly/evaluate_vec_iter.c',
+  'gr_poly/exp_series_basecase.c',
+  'gr_poly/exp_series_basecase_mul.c',
+  'gr_poly/exp_series.c',
+  'gr_poly/exp_series_newton.c',
+  'gr_poly/factor_squarefree.c',
+  'gr_poly/fit_length.c',
+  'gr_poly/gcd.c',
+  'gr_poly/gcd_euclidean.c',
+  'gr_poly/gcd_hgcd.c',
+  'gr_poly/gen.c',
+  'gr_poly/get_coeff_scalar.c',
+  'gr_poly/hgcd.c',
+  'gr_poly/init.c',
+  'gr_poly/inlines.c',
+  'gr_poly/integral.c',
+  'gr_poly/inv.c',
+  'gr_poly/inv_series_basecase.c',
+  'gr_poly/inv_series.c',
+  'gr_poly/inv_series_newton.c',
+  'gr_poly/is_gen.c',
+  'gr_poly/is_monic.c',
+  'gr_poly/is_one.c',
+  'gr_poly/is_scalar.c',
+  'gr_poly/is_zero.c',
+  'gr_poly/log1p_series.c',
+  'gr_poly/log_series.c',
+  'gr_poly/make_monic.c',
+  'gr_poly/mul.c',
+  'gr_poly/mullow.c',
+  'gr_poly/mul_scalar.c',
+  'gr_poly/neg.c',
+  'gr_poly/neg_one.c',
+  'gr/polynomial.c',
+  'gr_poly/normalise.c',
+  'gr_poly/nth_derivative.c',
+  'gr_poly/one.c',
+  'gr_poly/pow_fmpz.c',
+  'gr_poly/pow_series_fmpq_recurrence.c',
+  'gr_poly/pow_series_ui_binexp.c',
+  'gr_poly/pow_series_ui.c',
+  'gr_poly/pow_ui_binexp.c',
+  'gr_poly/pow_ui.c',
+  'gr_poly/randtest.c',
+  'gr_poly/rem.c',
+  'gr_poly/resultant.c',
+  'gr_poly/resultant_euclidean.c',
+  'gr_poly/resultant_hgcd.c',
+  'gr_poly/resultant_small.c',
+  'gr_poly/resultant_sylvester.c',
+  'gr_poly/reverse.c',
+  'gr_poly/revert_series.c',
+  'gr_poly/rsqrt_series_basecase.c',
+  'gr_poly/rsqrt_series.c',
+  'gr_poly/rsqrt_series_miller.c',
+  'gr_poly/rsqrt_series_newton.c',
+  'gr_poly/set.c',
+  'gr_poly/set_coeff_scalar.c',
+  'gr_poly/set_fmpq_poly.c',
+  'gr_poly/set_fmpz_poly.c',
+  'gr_poly/set_gr_poly_other.c',
+  'gr_poly/set_length.c',
+  'gr_poly/set_scalar.c',
+  'gr_poly/shift_left.c',
+  'gr_poly/shift_right.c',
+  'gr_poly/sin_cos_series_basecase.c',
+  'gr_poly/sin_cos_series_tangent.c',
+  'gr_poly/sqrt_series_basecase.c',
+  'gr_poly/sqrt_series.c',
+  'gr_poly/sqrt_series_miller.c',
+  'gr_poly/sqrt_series_newton.c',
+  'gr_poly/squarefree_part.c',
+  'gr_poly/sub.c',
+  'gr_poly/tan_series_basecase.c',
+  'gr_poly/tan_series.c',
+  'gr_poly/tan_series_newton.c',
+  'gr_poly/taylor_shift.c',
+  'gr_poly/taylor_shift_convolution.c',
+  'gr_poly/taylor_shift_divconquer.c',
+  'gr_poly/taylor_shift_horner.c',
+  'gr_poly/truncate.c',
+  'gr_poly/write.c',
+  'gr_poly/xgcd_euclidean.c',
+  'gr_poly/xgcd_hgcd.c',
+  'gr/psl2z.c',
+  'gr/qqbar.c',
+  'gr/series.c',
+  'gr/series_mod.c',
+  'gr_special/bellnum.c',
+  'gr_special/bin.c',
+  'gr_special/chebyshev_t.c',
+  'gr_special/chebyshev_u.c',
+  'gr_special/dirichlet.c',
+  'gr_special/elementary.c',
+  'gr_special/erf.c',
+  'gr_special/fac.c',
+  'gr_special/fib.c',
+  'gr_special/inlines.c',
+  'gr_special/modular.c',
+  'gr_special/partitions.c',
+  'gr/test_ring.c',
+  'gr_vec/append.c',
+  'gr_vec/clear.c',
+  'gr_vec/fit_length.c',
+  'gr_vec/init.c',
+  'gr_vec/inlines.c',
+  'gr_vec/product.c',
+  'gr_vec/randtest.c',
+  'gr_vec/set.c',
+  'gr_vec/set_length.c',
+  'gr_vec/step.c',
+  'gr_vec/sum.c',
+  'gr/vector.c',
+  'gr_vec/write.c',
+  'hypgeom/bound.c',
+  'hypgeom/estimate_terms_d.c',
+  'hypgeom/init.c',
+  'hypgeom/precompute.c',
+  'hypgeom/sum.c',
+  'long_extras/inlines.c',
+  'long_extras/kronecker.c',
+  'long_extras/randint.c',
+  'long_extras/randtest.c',
+  'long_extras/sizeinbase.c',
+  'mag/add_2exp_fmpz.c',
+  'mag/add.c',
+  'mag/addmul.c',
+  'mag/add_ui_2exp_si.c',
+  'mag/add_ui.c',
+  'mag/atan.c',
+  'mag/bernoulli_div_fac_ui.c',
+  'mag/binpow_uiui.c',
+  'mag/bin_uiui.c',
+  'mag/clear.c',
+  'mag/cmp_2exp_si.c',
+  'mag/cmp.c',
+  'mag/const_pi.c',
+  'mag/cosh.c',
+  'mag/div.c',
+  'mag/div_lower.c',
+  'mag/d_log.c',
+  'mag/exp.c',
+  'mag/expinv.c',
+  'mag/expm1.c',
+  'mag/exp_tail.c',
+  'mag/fac_ui.c',
+  'mag/geom_series.c',
+  'mag/get_d.c',
+  'mag/get_d_log2_approx.c',
+  'mag/get_fmpq.c',
+  'mag/get_fmpz.c',
+  'mag/hurwitz_zeta_uiui.c',
+  'mag/hypot.c',
+  'mag/inlines.c',
+  'mag/io.c',
+  'mag/log1p.c',
+  'mag/log.c',
+  'mag/log_ui.c',
+  'mag/mul_2exp_fmpz.c',
+  'mag/mul_2exp_si.c',
+  'mag/mul.c',
+  'mag/polylog_tail.c',
+  'mag/pow_fmpz.c',
+  'mag/pow_ui.c',
+  'mag/randtest.c',
+  'mag/root.c',
+  'mag/rsqrt.c',
+  'mag/set_d_2exp_fmpz.c',
+  'mag/set_d.c',
+  'mag/set_fmpz_2exp_fmpz.c',
+  'mag/set_ui_2exp_si.c',
+  'mag/set_ui.c',
+  'mag/sinh.c',
+  'mag/sqrt.c',
+  'mag/sub.c',
+  'mag/sub_lower.c',
+  'mpfr_mat/clear.c',
+  'mpfr_mat/equal.c',
+  'mpfr_mat/init.c',
+  'mpfr_mat/mul_classical.c',
+  'mpfr_mat/randtest.c',
+  'mpfr_mat/set.c',
+  'mpfr_mat/swap.c',
+  'mpfr_mat/zero.c',
+  'mpfr_vec/add.c',
+  'mpfr_vec/clear.c',
+  'mpfr_vec/equal.c',
+  'mpfr_vec/init.c',
+  'mpfr_vec/randtest.c',
+  'mpfr_vec/scalar_mul_2exp.c',
+  'mpfr_vec/scalar_mul_mpfr.c',
+  'mpfr_vec/scalar_product.c',
+  'mpfr_vec/set.c',
+  'mpfr_vec/zero.c',
+  'mpn_extras/debug.c',
+  'mpn_extras/divides.c',
+  'mpn_extras/divrem_preinv1.c',
+  'mpn_extras/divrem_preinvn.c',
+  'mpn_extras/factor_trial.c',
+  'mpn_extras/factor_trial_tree.c',
+  'mpn_extras/fmms1.c',
+  'mpn_extras/gcd_full.c',
+  'mpn_extras/get_d.c',
+  'mpn_extras/mod_preinvn.c',
+  'mpn_extras/mul_basecase.c',
+  'mpn_extras/mul.c',
+  'mpn_extras/mulhigh_basecase.c',
+  'mpn_extras/mulhigh.c',
+  'mpn_extras/mulmod_2expp1_basecase.c',
+  'mpn_extras/mulmod_preinv1.c',
+  'mpn_extras/mulmod_preinvn.c',
+  'mpn_extras/mul_toom22.c',
+  'mpn_extras/mul_toom32.c',
+  'mpn_extras/preinv1.c',
+  'mpn_extras/preinvn.c',
+  'mpn_extras/remove_2exp.c',
+  'mpn_extras/remove_power.c',
+  'mpn_extras/sqr_basecase.c',
+  'mpn_extras/sqrhigh.c',
+  'mpn_extras/sumdiff_n.c',
+  'mpoly/bidegree.c',
+  'mpoly/bivar_cld_bounds.c',
+  'mpoly/cmp_general.c',
+  'mpoly/compose_mat.c',
+  'mpoly/compression.c',
+  'mpoly/ctx.c',
+  'mpoly/degrees.c',
+  'mpoly/exp_bits_required.c',
+  'mpoly/fill_marks.c',
+  'mpoly/gcd_info.c',
+  'mpoly/gen_bits_required.c',
+  'mpoly/gen_fields.c',
+  'mpoly/gen_monomial_offset_shift.c',
+  'mpoly/gen_shift_left_right.c',
+  'mpoly/get_cmpmask.c',
+  'mpoly/get_monomial.c',
+  'mpoly/get_monomial_var.c',
+  'mpoly/heap_insert1.c',
+  'mpoly/heap_insert.c',
+  'mpoly/heap_pop1.c',
+  'mpoly/heap_pop.c',
+  'mpoly/inlines.c',
+  'mpoly/io.c',
+  'mpoly/is_gen.c',
+  'mpoly/is_poly.c',
+  'mpoly/is_proved_not_square.c',
+  'mpoly/main_variable_split.c',
+  'mpoly/max_fields.c',
+  'mpoly/min_fields.c',
+  'mpoly/monomial_cofactors.c',
+  'mpoly/monomial_exists.c',
+  'mpoly/monomial_index.c',
+  'mpoly/monomial_mul_fmpz.c',
+  'mpoly/monomials_cmp.c',
+  'mpoly/monomials_deflate.c',
+  'mpoly/monomials_deflation.c',
+  'mpoly/monomials_inflate.c',
+  'mpoly/monomials_inorder_test.c',
+  'mpoly/monomials_overflow_test.c',
+  'mpoly/monomials_shift_right_ui.c',
+  'mpoly/monomials_valid_test.c',
+  'mpoly/pack_monomials_tight.c',
+  'mpoly/pack_vec.c',
+  'mpoly/parse_pretty.c',
+  'mpoly/randbits_fmpz.c',
+  'mpoly/rbtree.c',
+  'mpoly/remove_var_powers.c',
+  'mpoly/repack_monomials.c',
+  'mpoly/reverse.c',
+  'mpoly/search_monomials.c',
+  'mpoly/set_monomial.c',
+  'mpoly/term_exp_fits.c',
+  'mpoly/test_irreducible.c',
+  'mpoly/to_from_mpolyl.c',
+  'mpoly/total_degree.c',
+  'mpoly/univar.c',
+  'mpoly/unpack_monomials_tight.c',
+  'mpoly/unpack_vec.c',
+  'mpoly/used_vars.c',
+  'nf/clear.c',
+  'nf_elem/add.c',
+  'nf_elem/clear.c',
+  'nf_elem/div.c',
+  'nf_elem/equal.c',
+  'nf_elem/gen.c',
+  'nf_elem/get_coeff_fmpq.c',
+  'nf_elem/get_coeff_fmpz.c',
+  'nf_elem/get_fmpq_poly.c',
+  'nf_elem/get_fmpz_mat_row.c',
+  'nf_elem/get_fmpz_mod_poly.c',
+  'nf_elem/get_nmod_poly.c',
+  'nf_elem/get_str_pretty.c',
+  'nf_elem/init.c',
+  'nf_elem/inlines.c',
+  'nf_elem/inv.c',
+  'nf_elem/invertible_check.c',
+  'nf_elem/io.c',
+  'nf_elem/is_gen.c',
+  'nf_elem/mod_fmpz.c',
+  'nf_elem/mul.c',
+  'nf_elem/mul_gen.c',
+  'nf_elem/neg.c',
+  'nf_elem/norm.c',
+  'nf_elem/norm_div.c',
+  'nf_elem/one.c',
+  'nf_elem/pow.c',
+  'nf_elem/randtest.c',
+  'nf_elem/reduce.c',
+  'nf_elem/rep_mat.c',
+  'nf_elem/rep_mat_fmpz_mat_den.c',
+  'nf_elem/scalar_div.c',
+  'nf_elem/scalar_mul.c',
+  'nf_elem/set.c',
+  'nf_elem/set_coeff_num_fmpz.c',
+  'nf_elem/set_fmpq_poly.c',
+  'nf_elem/set_fmpz_mat_row.c',
+  'nf_elem/sub.c',
+  'nf_elem/swap.c',
+  'nf_elem/trace.c',
+  'nf_elem/zero.c',
+  'nf/init.c',
+  'nf/init_randtest.c',
+  'nf/print.c',
+  'nmod/divides.c',
+  'nmod/inlines.c',
+  'nmod_mat/add.c',
+  'nmod_mat/addmul.c',
+  'nmod_mat/can_solve.c',
+  'nmod_mat/charpoly.c',
+  'nmod_mat/clear.c',
+  'nmod_mat/concat.c',
+  'nmod_mat/det.c',
+  'nmod_mat/det_howell.c',
+  'nmod_mat/equal.c',
+  'nmod_mat/howell_form.c',
+  'nmod_mat/init.c',
+  'nmod_mat/inlines.c',
+  'nmod_mat/inv.c',
+  'nmod_mat/io.c',
+  'nmod_mat/is_one.c',
+  'nmod_mat/is_zero.c',
+  'nmod_mat/is_zero_row.c',
+  'nmod_mat/lu.c',
+  'nmod_mat/lu_classical.c',
+  'nmod_mat/lu_classical_delayed.c',
+  'nmod_mat/lu_recursive.c',
+  'nmod_mat/minpoly.c',
+  'nmod_mat/mul_blas.c',
+  'nmod_mat/mul.c',
+  'nmod_mat/mul_classical.c',
+  'nmod_mat/mul_classical_threaded.c',
+  'nmod_mat/mul_nmod_vec.c',
+  'nmod_mat/mul_strassen.c',
+  'nmod_mat/neg.c',
+  'nmod_mat/nmod_vec_mul.c',
+  'nmod_mat/nullspace.c',
+  'nmod_mat/one.c',
+  'nmod_mat/permute_rows.c',
+  'nmod_mat/pow.c',
+  'nmod_mat/randfull.c',
+  'nmod_mat/randops.c',
+  'nmod_mat/randpermdiag.c',
+  'nmod_mat/randrank.c',
+  'nmod_mat/randtest.c',
+  'nmod_mat/randtril.c',
+  'nmod_mat/randtriu.c',
+  'nmod_mat/rank.c',
+  'nmod_mat/reduce_row.c',
+  'nmod_mat/rref.c',
+  'nmod_mat/scalar.c',
+  'nmod_mat/set.c',
+  'nmod_mat/set_mod.c',
+  'nmod_mat/similarity.c',
+  'nmod_mat/solve.c',
+  'nmod_mat/solve_tril.c',
+  'nmod_mat/solve_triu.c',
+  'nmod_mat/solve_vec.c',
+  'nmod_mat/strong_echelon_form.c',
+  'nmod_mat/sub.c',
+  'nmod_mat/submul.c',
+  'nmod_mat/swap.c',
+  'nmod_mat/trace.c',
+  'nmod_mat/transpose.c',
+  'nmod_mat/window.c',
+  'nmod_mat/zero.c',
+  'nmod_mpoly/add.c',
+  'nmod_mpoly/add_ui.c',
+  'nmod_mpoly/cmp.c',
+  'nmod_mpoly/combine_like_terms.c',
+  'nmod_mpoly/compose_mat.c',
+  'nmod_mpoly/compose_nmod_mpoly.c',
+  'nmod_mpoly/compose_nmod_mpoly_gen.c',
+  'nmod_mpoly/compose_nmod_mpoly_geobucket.c',
+  'nmod_mpoly/compose_nmod_mpoly_horner.c',
+  'nmod_mpoly/compose_nmod_poly.c',
+  'nmod_mpoly/content_vars.c',
+  'nmod_mpoly/ctx.c',
+  'nmod_mpoly/deflate.c',
+  'nmod_mpoly/deflation.c',
+  'nmod_mpoly/degrees.c',
+  'nmod_mpoly/derivative.c',
+  'nmod_mpoly/discriminant.c',
+  'nmod_mpoly/div.c',
+  'nmod_mpoly/divides.c',
+  'nmod_mpoly/divides_dense.c',
+  'nmod_mpoly/divides_heap_threaded.c',
+  'nmod_mpoly/divides_monagan_pearce.c',
+  'nmod_mpoly/div_monagan_pearce.c',
+  'nmod_mpoly/divrem.c',
+  'nmod_mpoly/divrem_ideal.c',
+  'nmod_mpoly/divrem_ideal_monagan_pearce.c',
+  'nmod_mpoly/divrem_monagan_pearce.c',
+  'nmod_mpoly/equal.c',
+  'nmod_mpoly/evaluate_all.c',
+  'nmod_mpoly/evaluate_one.c',
+  'nmod_mpoly_factor/append.c',
+  'nmod_mpoly_factor/clear.c',
+  'nmod_mpoly_factor/cmp.c',
+  'nmod_mpoly_factor/compression.c',
+  'nmod_mpoly_factor/eval.c',
+  'nmod_mpoly_factor/expand.c',
+  'nmod_mpoly_factor/factor.c',
+  'nmod_mpoly_factor/factor_content.c',
+  'nmod_mpoly_factor/factor_squarefree.c',
+  'nmod_mpoly_factor/fit_length.c',
+  'nmod_mpoly_factor/gcd_zippel.c',
+  'nmod_mpoly_factor/get_set.c',
+  'nmod_mpoly_factor/init.c',
+  'nmod_mpoly_factor/inlines.c',
+  'nmod_mpoly_factor/io.c',
+  'nmod_mpoly_factor/irred_lgprime.c',
+  'nmod_mpoly_factor/irred_medprime.c',
+  'nmod_mpoly_factor/irred_smprime_wang.c',
+  'nmod_mpoly_factor/irred_smprime_zassenhaus.c',
+  'nmod_mpoly_factor/irred_smprime_zippel.c',
+  'nmod_mpoly_factor/lcc_wang.c',
+  'nmod_mpoly_factor/mpoly_hlift.c',
+  'nmod_mpoly_factor/mpoly_hlift_zippel.c',
+  'nmod_mpoly_factor/mpoly_pfrac.c',
+  'nmod_mpoly_factor/mpolyu.c',
+  'nmod_mpoly_factor/mpolyv.c',
+  'nmod_mpoly_factor/n_bpoly_mod.c',
+  'nmod_mpoly_factor/n_bpoly_mod_factor_lgprime.c',
+  'nmod_mpoly_factor/n_bpoly_mod_factor_smprime.c',
+  'nmod_mpoly_factor/n_bpoly_mod_hlift.c',
+  'nmod_mpoly_factor/n_bpoly_mod_pfrac.c',
+  'nmod_mpoly_factor/nmod_mat_extras.c',
+  'nmod_mpoly_factor/n_poly_vec.c',
+  'nmod_mpoly_factor/polyu3_mod_hlift.c',
+  'nmod_mpoly_factor/polyun.c',
+  'nmod_mpoly_factor/realloc.c',
+  'nmod_mpoly_factor/sort.c',
+  'nmod_mpoly_factor/zip_helpers.c',
+  'nmod_mpoly/fit_length.c',
+  'nmod_mpoly/gcd_brown.c',
+  'nmod_mpoly/gcd.c',
+  'nmod_mpoly/gcd_cofactors.c',
+  'nmod_mpoly/gcd_hensel.c',
+  'nmod_mpoly/gcd_zippel2.c',
+  'nmod_mpoly/gcd_zippel.c',
+  'nmod_mpoly/gen.c',
+  'nmod_mpoly/geobuckets.c',
+  'nmod_mpoly/get_coeff.c',
+  'nmod_mpoly/get_set_is_nmod_poly.c',
+  'nmod_mpoly/get_str_pretty.c',
+  'nmod_mpoly/get_term.c',
+  'nmod_mpoly/get_term_coeff_ui.c',
+  'nmod_mpoly/get_term_exp.c',
+  'nmod_mpoly/get_term_monomial.c',
+  'nmod_mpoly/get_term_ui_fmpz.c',
+  'nmod_mpoly/get_term_ui_ui.c',
+  'nmod_mpoly/get_term_var_exp.c',
+  'nmod_mpoly/get_ui.c',
+  'nmod_mpoly/inflate.c',
+  'nmod_mpoly/init.c',
+  'nmod_mpoly/inlines.c',
+  'nmod_mpoly/interp.c',
+  'nmod_mpoly/io.c',
+  'nmod_mpoly/is_canonical.c',
+  'nmod_mpoly/is_gen.c',
+  'nmod_mpoly/is_ui.c',
+  'nmod_mpoly/lead_coeff_vars.c',
+  'nmod_mpoly/make_monic.c',
+  'nmod_mpoly/mpolyd.c',
+  'nmod_mpoly/mpolyn.c',
+  'nmod_mpoly/mpolyn_divides_threaded.c',
+  'nmod_mpoly/mpolyn_gcd_brown.c',
+  'nmod_mpoly/mpolyu.c',
+  'nmod_mpoly/mpolyu_divides.c',
+  'nmod_mpoly/mpolyu_gcdp_zippel.c',
+  'nmod_mpoly/mpolyun.c',
+  'nmod_mpoly/mpolyun_divides.c',
+  'nmod_mpoly/mul_array.c',
+  'nmod_mpoly/mul_array_threaded.c',
+  'nmod_mpoly/mul.c',
+  'nmod_mpoly/mul_dense.c',
+  'nmod_mpoly/mul_heap_threaded.c',
+  'nmod_mpoly/mul_johnson.c',
+  'nmod_mpoly/neg.c',
+  'nmod_mpoly/pow_fmpz.c',
+  'nmod_mpoly/pow_rmul.c',
+  'nmod_mpoly/pow_ui.c',
+  'nmod_mpoly/push_term.c',
+  'nmod_mpoly/quadratic_root.c',
+  'nmod_mpoly/randtest.c',
+  'nmod_mpoly/realloc.c',
+  'nmod_mpoly/repack_bits.c',
+  'nmod_mpoly/resize.c',
+  'nmod_mpoly/resultant.c',
+  'nmod_mpoly/reverse.c',
+  'nmod_mpoly/scalar.c',
+  'nmod_mpoly/set.c',
+  'nmod_mpoly/set_coeff.c',
+  'nmod_mpoly/set_fmpz.c',
+  'nmod_mpoly/setform.c',
+  'nmod_mpoly/set_str_pretty.c',
+  'nmod_mpoly/set_term_coeff_ui.c',
+  'nmod_mpoly/set_term_exp.c',
+  'nmod_mpoly/sort_terms.c',
+  'nmod_mpoly/sqrt_heap.c',
+  'nmod_mpoly/stack.c',
+  'nmod_mpoly/sub.c',
+  'nmod_mpoly/sub_ui.c',
+  'nmod_mpoly/term_content.c',
+  'nmod_mpoly/term_exp_fits.c',
+  'nmod_mpoly/to_from_nmod_poly.c',
+  'nmod_mpoly/univar.c',
+  'nmod_mpoly/void_ring.c',
+  'nmod_poly/add.c',
+  'nmod_poly/add_series.c',
+  'nmod_poly/add_ui.c',
+  'nmod_poly/asinh_series.c',
+  'nmod_poly/asin_series.c',
+  'nmod_poly/atanh_series.c',
+  'nmod_poly/atan_series.c',
+  'nmod_poly/berlekamp_massey.c',
+  'nmod_poly/bit_pack.c',
+  'nmod_poly/bit_unpack.c',
+  'nmod_poly/clear.c',
+  'nmod_poly/compose.c',
+  'nmod_poly/compose_horner.c',
+  'nmod_poly/compose_mod_brent_kung.c',
+  'nmod_poly/compose_mod_brent_kung_precomp_preinv.c',
+  'nmod_poly/compose_mod_brent_kung_preinv.c',
+  'nmod_poly/compose_mod_brent_kung_vec_preinv.c',
+  'nmod_poly/compose_mod_brent_kung_vec_preinv_threaded.c',
+  'nmod_poly/compose_mod.c',
+  'nmod_poly/compose_mod_horner.c',
+  'nmod_poly/compose_series.c',
+  'nmod_poly/conway.c',
+  'nmod_poly/conway_polynomial_data.c',
+  'nmod_poly/cosh_series.c',
+  'nmod_poly/cos_series.c',
+  'nmod_poly/deflate.c',
+  'nmod_poly/deflation.c',
+  'nmod_poly/derivative.c',
+  'nmod_poly/discriminant.c',
+  'nmod_poly/div.c',
+  'nmod_poly/divexact.c',
+  'nmod_poly/divides.c',
+  'nmod_poly/div_newton_n_preinv.c',
+  'nmod_poly/divrem_basecase.c',
+  'nmod_poly/divrem.c',
+  'nmod_poly/divrem_newton_n_preinv.c',
+  'nmod_poly/div_root.c',
+  'nmod_poly/div_series.c',
+  'nmod_poly/equal.c',
+  'nmod_poly/equal_trunc.c',
+  'nmod_poly/evaluate_mat.c',
+  'nmod_poly/evaluate_nmod.c',
+  'nmod_poly/evaluate_nmod_vec.c',
+  'nmod_poly/exp_series.c',
+  'nmod_poly_factor/clear.c',
+  'nmod_poly_factor/concat.c',
+  'nmod_poly_factor/factor_berlekamp.c',
+  'nmod_poly_factor/factor.c',
+  'nmod_poly_factor/factor_cantor_zassenhaus.c',
+  'nmod_poly_factor/factor_distinct_deg.c',
+  'nmod_poly_factor/factor_distinct_deg_threaded.c',
+  'nmod_poly_factor/factor_equal_deg.c',
+  'nmod_poly_factor/factor_equal_deg_prob.c',
+  'nmod_poly_factor/factor_kaltofen_shoup.c',
+  'nmod_poly_factor/factor_squarefree.c',
+  'nmod_poly_factor/fit_length.c',
+  'nmod_poly_factor/get_poly.c',
+  'nmod_poly_factor/init.c',
+  'nmod_poly_factor/inlines.c',
+  'nmod_poly_factor/insert.c',
+  'nmod_poly_factor/is_irreducible.c',
+  'nmod_poly_factor/is_squarefree.c',
+  'nmod_poly_factor/pow.c',
+  'nmod_poly_factor/print.c',
+  'nmod_poly_factor/realloc.c',
+  'nmod_poly_factor/roots.c',
+  'nmod_poly_factor/roots_factored.c',
+  'nmod_poly_factor/set.c',
+  'nmod_poly/find_distinct_nonzero_roots.c',
+  'nmod_poly/fit_length.c',
+  'nmod_poly/gcd.c',
+  'nmod_poly/gcdinv.c',
+  'nmod_poly/get_str.c',
+  'nmod_poly/hgcd.c',
+  'nmod_poly/inflate.c',
+  'nmod_poly/init.c',
+  'nmod_poly/inlines.c',
+  'nmod_poly/integral.c',
+  'nmod_poly/interpolate_nmod_vec.c',
+  'nmod_poly/invmod.c',
+  'nmod_poly/inv_series.c',
+  'nmod_poly/inv_series_newton.c',
+  'nmod_poly/invsqrt_series.c',
+  'nmod_poly/io.c',
+  'nmod_poly/KS2_pack.c',
+  'nmod_poly/KS2_reduce.c',
+  'nmod_poly/KS2_unpack.c',
+  'nmod_poly/log_series.c',
+  'nmod_poly/make_monic.c',
+  'nmod_poly_mat/add.c',
+  'nmod_poly_mat/clear.c',
+  'nmod_poly_mat/concat.c',
+  'nmod_poly_mat/det.c',
+  'nmod_poly_mat/equal.c',
+  'nmod_poly_mat/evaluate_nmod.c',
+  'nmod_poly_mat/fflu.c',
+  'nmod_poly_mat/find_pivot_any.c',
+  'nmod_poly_mat/find_pivot_partial.c',
+  'nmod_poly_mat/get_set_coeff_mat.c',
+  'nmod_poly_mat/init.c',
+  'nmod_poly_mat/init_set.c',
+  'nmod_poly_mat/inlines.c',
+  'nmod_poly_mat/inv.c',
+  'nmod_poly_mat/is_one.c',
+  'nmod_poly_mat/is_zero.c',
+  'nmod_poly_mat/max_length.c',
+  'nmod_poly_mat/mul.c',
+  'nmod_poly_mat/mul_classical.c',
+  'nmod_poly_mat/mul_interpolate.c',
+  'nmod_poly_mat/mul_KS.c',
+  'nmod_poly_mat/neg.c',
+  'nmod_poly_mat/nullspace.c',
+  'nmod_poly_mat/one.c',
+  'nmod_poly_mat/pow.c',
+  'nmod_poly_mat/print.c',
+  'nmod_poly_mat/rand.c',
+  'nmod_poly_mat/rank.c',
+  'nmod_poly_mat/rref.c',
+  'nmod_poly_mat/scalar.c',
+  'nmod_poly_mat/set.c',
+  'nmod_poly_mat/set_trunc.c',
+  'nmod_poly_mat/shift_left_right.c',
+  'nmod_poly_mat/solve.c',
+  'nmod_poly_mat/solve_fflu.c',
+  'nmod_poly_mat/solve_fflu_precomp.c',
+  'nmod_poly_mat/sqr.c',
+  'nmod_poly_mat/sub.c',
+  'nmod_poly_mat/trace.c',
+  'nmod_poly_mat/window.c',
+  'nmod_poly_mat/zero.c',
+  'nmod_poly/max_bits.c',
+  'nmod_poly/mul.c',
+  'nmod_poly/mul_classical.c',
+  'nmod_poly/mulhigh.c',
+  'nmod_poly/mulhigh_classical.c',
+  'nmod_poly/mul_KS2.c',
+  'nmod_poly/mul_KS4.c',
+  'nmod_poly/mul_KS.c',
+  'nmod_poly/mullow.c',
+  'nmod_poly/mullow_classical.c',
+  'nmod_poly/mullow_KS.c',
+  'nmod_poly/mulmod.c',
+  'nmod_poly/mulmod_preinv.c',
+  'nmod_poly/multi_crt.c',
+  'nmod_poly/neg.c',
+  'nmod_poly/pow_binexp.c',
+  'nmod_poly/pow.c',
+  'nmod_poly/powers_mod.c',
+  'nmod_poly/power_sums.c',
+  'nmod_poly/power_sums_to_poly.c',
+  'nmod_poly/powmod_binexp.c',
+  'nmod_poly/powmod_binexp_preinv.c',
+  'nmod_poly/powmod_x_preinv.c',
+  'nmod_poly/pow_trunc.c',
+  'nmod_poly/product_roots_nmod_vec.c',
+  'nmod_poly/randtest.c',
+  'nmod_poly/randtest_monic_primitive.c',
+  'nmod_poly/realloc.c',
+  'nmod_poly/rem.c',
+  'nmod_poly/remove.c',
+  'nmod_poly/resultant.c',
+  'nmod_poly/reverse.c',
+  'nmod_poly/revert_series.c',
+  'nmod_poly/scalar.c',
+  'nmod_poly/set_coeff_ui.c',
+  'nmod_poly/set_str.c',
+  'nmod_poly/set_trunc.c',
+  'nmod_poly/shift_left_right.c',
+  'nmod_poly/sinh_series.c',
+  'nmod_poly/sin_series.c',
+  'nmod_poly/sqrt.c',
+  'nmod_poly/sqrt_series.c',
+  'nmod_poly/sub.c',
+  'nmod_poly/sub_series.c',
+  'nmod_poly/sub_ui.c',
+  'nmod_poly/tanh_series.c',
+  'nmod_poly/tan_series.c',
+  'nmod_poly/taylor_shift.c',
+  'nmod_poly/tree.c',
+  'nmod_poly/xgcd.c',
+  'nmod_vec/add.c',
+  'nmod_vec/discrete_log_pohlig_hellman.c',
+  'nmod_vec/dot.c',
+  'nmod_vec/inlines.c',
+  'nmod_vec/io.c',
+  'nmod_vec/max_bits.c',
+  'nmod_vec/neg.c',
+  'nmod_vec/randtest.c',
+  'nmod_vec/reduce.c',
+  'nmod_vec/scalar.c',
+  'nmod_vec/sub.c',
+  'n_poly/io.c',
+  'n_poly/n_bpoly.c',
+  'n_poly/n_bpoly_mod.c',
+  'n_poly/n_bpoly_mod_gcd.c',
+  'n_poly/n_bpoly_stack.c',
+  'n_poly/n_fq_bpoly.c',
+  'n_poly/n_fq_bpoly_gcd.c',
+  'n_poly/n_fq_bpoly_taylor_shift.c',
+  'n_poly/n_fq.c',
+  'n_poly/n_fq_poly_add.c',
+  'n_poly/n_fq_poly_add_si.c',
+  'n_poly/n_fq_poly.c',
+  'n_poly/n_fq_poly_divrem.c',
+  'n_poly/n_fq_poly_gcd.c',
+  'n_poly/n_fq_poly_inv_series.c',
+  'n_poly/n_fq_poly_mul.c',
+  'n_poly/n_fq_poly_mullow.c',
+  'n_poly/n_fq_poly_mulmod.c',
+  'n_poly/n_fq_poly_neg.c',
+  'n_poly/n_fq_poly_pow.c',
+  'n_poly/n_fq_poly_rem.c',
+  'n_poly/n_fq_poly_sub.c',
+  'n_poly/n_fq_polyun.c',
+  'n_poly/n_fq_poly_xgcd.c',
+  'n_poly/n_fq_pow_cache.c',
+  'n_poly/nmod_n_fq_interp.c',
+  'n_poly/nmod_pow_cache.c',
+  'n_poly/n_poly.c',
+  'n_poly/n_poly_mod.c',
+  'n_poly/n_poly_stack.c',
+  'n_poly/n_polyu1n_gcd.c',
+  'n_poly/n_polyu.c',
+  'n_poly/n_polyun.c',
+  'n_poly/n_polyun_stack.c',
+  'n_poly/n_tpoly.c',
+  'n_poly/zippel_helpers.c',
+  'padic/add.c',
+  'padic/clear.c',
+  'padic/ctx_clear.c',
+  'padic/ctx_init.c',
+  'padic/div.c',
+  'padic/exp_balanced.c',
+  'padic/exp.c',
+  'padic/exp_rectangular.c',
+  'padic/get_fmpq.c',
+  'padic/get_fmpz.c',
+  'padic/get_mpq.c',
+  'padic/get_mpz.c',
+  'padic/get_str.c',
+  'padic/init.c',
+  'padic/inlines.c',
+  'padic/inv.c',
+  'padic/io.c',
+  'padic/lifts.c',
+  'padic/log_balanced.c',
+  'padic/log.c',
+  'padic/log_rectangular.c',
+  'padic/log_satoh.c',
+  'padic_mat/add.c',
+  'padic_mat/canonicalise.c',
+  'padic_mat/clear.c',
+  'padic_mat/equal.c',
+  'padic_mat/get_entry_padic.c',
+  'padic_mat/get_fmpq_mat.c',
+  'padic_mat/init.c',
+  'padic_mat/inlines.c',
+  'padic_mat/io.c',
+  'padic_mat/is_canonical.c',
+  'padic_mat/is_reduced.c',
+  'padic_mat/is_zero.c',
+  'padic_mat/mul.c',
+  'padic_mat/neg.c',
+  'padic_mat/one.c',
+  'padic_mat/randtest.c',
+  'padic_mat/reduce.c',
+  'padic_mat/scalar.c',
+  'padic_mat/set.c',
+  'padic_mat/set_entry_padic.c',
+  'padic_mat/set_fmpq_mat.c',
+  'padic_mat/sub.c',
+  'padic_mat/swap.c',
+  'padic_mat/transpose.c',
+  'padic_mat/zero.c',
+  'padic/mul.c',
+  'padic/neg.c',
+  'padic_poly/add.c',
+  'padic_poly/canonicalise.c',
+  'padic_poly/clear.c',
+  'padic_poly/compose.c',
+  'padic_poly/compose_pow.c',
+  'padic_poly/derivative.c',
+  'padic_poly/equal.c',
+  'padic_poly/evaluate_padic.c',
+  'padic_poly/fit_length.c',
+  'padic_poly/get_coeff_padic.c',
+  'padic_poly/get_fmpq_poly.c',
+  'padic_poly/get_fmpz_poly.c',
+  'padic_poly/init.c',
+  'padic_poly/inlines.c',
+  'padic_poly/inv_series.c',
+  'padic_poly/io.c',
+  'padic_poly/is_canonical.c',
+  'padic_poly/is_reduced.c',
+  'padic_poly/mul.c',
+  'padic_poly/neg.c',
+  'padic_poly/normalise.c',
+  'padic_poly/pow.c',
+  'padic_poly/randtest.c',
+  'padic_poly/realloc.c',
+  'padic_poly/reduce.c',
+  'padic_poly/scalar_mul_padic.c',
+  'padic_poly/set.c',
+  'padic_poly/set_coeff_padic.c',
+  'padic_poly/set_fmpq.c',
+  'padic_poly/set_fmpq_poly.c',
+  'padic_poly/set_fmpz.c',
+  'padic_poly/set_fmpz_poly.c',
+  'padic_poly/set_padic.c',
+  'padic_poly/set_si.c',
+  'padic_poly/set_ui.c',
+  'padic_poly/shift_left.c',
+  'padic_poly/shift_right.c',
+  'padic_poly/sub.c',
+  'padic_poly/swap.c',
+  'padic/pow_si.c',
+  'padic/randtest.c',
+  'padic/reduce.c',
+  'padic/set.c',
+  'padic/set_fmpq.c',
+  'padic/set_fmpz.c',
+  'padic/set_mpq.c',
+  'padic/set_mpz.c',
+  'padic/set_si.c',
+  'padic/set_ui.c',
+  'padic/shift.c',
+  'padic/sqrt.c',
+  'padic/sub.c',
+  'padic/teichmuller.c',
+  'padic/val_fac.c',
+  'partitions/fmpz_fmpz.c',
+  'partitions/hrr_sum_arb.c',
+  'partitions/leading_fmpz.c',
+  'partitions/rademacher_bound.c',
+  'perm/inlines.c',
+  'perm/parity.c',
+  'perm/randtest.c',
+  'qadic/ctx_clear.c',
+  'qadic/ctx_init.c',
+  'qadic/exp_balanced.c',
+  'qadic/exp.c',
+  'qadic/exp_rectangular.c',
+  'qadic/frobenius.c',
+  'qadic/inlines.c',
+  'qadic/inv.c',
+  'qadic/io.c',
+  'qadic/log_balanced.c',
+  'qadic/log.c',
+  'qadic/log_rectangular.c',
+  'qadic/mul.c',
+  'qadic/norm_analytic.c',
+  'qadic/norm.c',
+  'qadic/norm_resultant.c',
+  'qadic/pow.c',
+  'qadic/set_fmpz_poly.c',
+  'qadic/sqrt.c',
+  'qadic/teichmuller.c',
+  'qadic/trace.c',
+  'qfb/exponent.c',
+  'qfb/exponent_element.c',
+  'qfb/exponent_grh.c',
+  'qfb/hash_clear.c',
+  'qfb/hash_find.c',
+  'qfb/hash_init.c',
+  'qfb/hash_insert.c',
+  'qfb/inlines.c',
+  'qfb/io.c',
+  'qfb/is_reduced.c',
+  'qfb/nucomp.c',
+  'qfb/nudupl.c',
+  'qfb/pow.c',
+  'qfb/pow_ui.c',
+  'qfb/prime_form.c',
+  'qfb/reduce.c',
+  'qfb/reduced_forms.c',
+  'qqbar/abs2.c',
+  'qqbar/abs.c',
+  'qqbar/acb_lindep.c',
+  'qqbar/acos_pi.c',
+  'qqbar/acot_pi.c',
+  'qqbar/acsc_pi.c',
+  'qqbar/add.c',
+  'qqbar/affine_transform.c',
+  'qqbar/asec_pi.c',
+  'qqbar/asin_pi.c',
+  'qqbar/atan_pi.c',
+  'qqbar/cache_enclosure.c',
+  'qqbar/ceil.c',
+  'qqbar/clear.c',
+  'qqbar/cmpabs.c',
+  'qqbar/cmpabs_im.c',
+  'qqbar/cmpabs_re.c',
+  'qqbar/cmp_im.c',
+  'qqbar/cmp_re.c',
+  'qqbar/cmp_root_order.c',
+  'qqbar/composed_op.c',
+  'qqbar/conj.c',
+  'qqbar/conjugates.c',
+  'qqbar/cos_pi.c',
+  'qqbar/cot_pi.c',
+  'qqbar/csc_pi.c',
+  'qqbar/csgn.c',
+  'qqbar/denominator.c',
+  'qqbar/div.c',
+  'qqbar/eigenvalues_fmpq_mat.c',
+  'qqbar/eigenvalues_fmpz_mat.c',
+  'qqbar/enclosure_raw.c',
+  'qqbar/equal.c',
+  'qqbar/equal_fmpq_poly_val.c',
+  'qqbar/evaluate_fmpq_poly.c',
+  'qqbar/evaluate_fmpz_mpoly.c',
+  'qqbar/evaluate_fmpz_poly.c',
+  'qqbar/exp_pi_i.c',
+  'qqbar/express_in_field.c',
+  'qqbar/floor.c',
+  'qqbar/fmpq_pow_si_ui.c',
+  'qqbar/fmpq_root_ui.c',
+  'qqbar/get_acb.c',
+  'qqbar/get_arb.c',
+  'qqbar/get_arb_im.c',
+  'qqbar/get_arb_re.c',
+  'qqbar/get_fexpr.c',
+  'qqbar/get_fmpq.c',
+  'qqbar/get_fmpz.c',
+  'qqbar/get_quadratic.c',
+  'qqbar/guess.c',
+  'qqbar/hash.c',
+  'qqbar/height_bits.c',
+  'qqbar/height.c',
+  'qqbar/i.c',
+  'qqbar/im.c',
+  'qqbar/init.c',
+  'qqbar/inlines.c',
+  'qqbar/inv.c',
+  'qqbar/log_pi_i.c',
+  'qqbar/mul_2exp_si.c',
+  'qqbar/mul.c',
+  'qqbar/neg.c',
+  'qqbar/numerator.c',
+  'qqbar/phi.c',
+  'qqbar/pow.c',
+  'qqbar/print.c',
+  'qqbar/printn.c',
+  'qqbar/randtest.c',
+  'qqbar/re.c',
+  'qqbar/re_im.c',
+  'qqbar/root_of_unity.c',
+  'qqbar/roots_fmpq_poly.c',
+  'qqbar/roots_fmpz_poly.c',
+  'qqbar/roots_poly_squarefree.c',
+  'qqbar/root_ui.c',
+  'qqbar/sec_pi.c',
+  'qqbar/set.c',
+  'qqbar/set_d.c',
+  'qqbar/set_fexpr.c',
+  'qqbar/set_fmpq.c',
+  'qqbar/set_fmpz.c',
+  'qqbar/set_re_im.c',
+  'qqbar/set_re_im_d.c',
+  'qqbar/set_si.c',
+  'qqbar/set_ui.c',
+  'qqbar/sgn.c',
+  'qqbar/sgn_im.c',
+  'qqbar/sgn_re.c',
+  'qqbar/sin_pi.c',
+  'qqbar/sub.c',
+  'qqbar/swap.c',
+  'qqbar/tan_pi.c',
+  'qqbar/validate_enclosure.c',
+  'qqbar/write.c',
+  'qsieve/block_lanczos.c',
+  'qsieve/clear.c',
+  'qsieve/collect_relations.c',
+  'qsieve/compute_poly_data.c',
+  'qsieve/factor.c',
+  'qsieve/init.c',
+  'qsieve/knuth_schroeppel.c',
+  'qsieve/large_prime_variant.c',
+  'qsieve/linalg.c',
+  'qsieve/poly.c',
+  'qsieve/primes_init.c',
+  'qsieve/square_root.c',
+  'test/main.c',
+  'thread_pool/clear.c',
+  'thread_pool/distribute_work.c',
+  'thread_pool/find_work.c',
+  'thread_pool/get_size.c',
+  'thread_pool/give_back.c',
+  'thread_pool/init.c',
+  'thread_pool/request.c',
+  'thread_pool/restore_affinity.c',
+  'thread_pool/set_affinity.c',
+  'thread_pool/set_size.c',
+  'thread_pool/wait.c',
+  'thread_pool/wake.c',
+  'thread_support/get_num_available_threads.c',
+  'thread_support/thread_support.c',
+  'ulong_extras/cbrt.c',
+  'ulong_extras/cleanup_primes.c',
+  'ulong_extras/clog.c',
+  'ulong_extras/compute_primes.c',
+  'ulong_extras/CRT.c',
+  'ulong_extras/discrete_log_bsgs.c',
+  'ulong_extras/div2_preinv.c',
+  'ulong_extras/divides.c',
+  'ulong_extras/divrem2_precomp.c',
+  'ulong_extras/divrem2_preinv.c',
+  'ulong_extras/euler_phi.c',
+  'ulong_extras/factor.c',
+  'ulong_extras/factor_ecm.c',
+  'ulong_extras/factorial_fast_mod2_preinv.c',
+  'ulong_extras/factorial_mod2_preinv.c',
+  'ulong_extras/factor_insert.c',
+  'ulong_extras/factor_lehman.c',
+  'ulong_extras/factor_one_line.c',
+  'ulong_extras/factor_partial.c',
+  'ulong_extras/factor_pollard_brent.c',
+  'ulong_extras/factor_power235.c',
+  'ulong_extras/factor_pp1.c',
+  'ulong_extras/factor_SQUFOF.c',
+  'ulong_extras/factor_trial.c',
+  'ulong_extras/flog.c',
+  'ulong_extras/gcdinv.c',
+  'ulong_extras/inlines.c',
+  'ulong_extras/is_oddprime.c',
+  'ulong_extras/is_perfect_power235.c',
+  'ulong_extras/is_perfect_power.c',
+  'ulong_extras/is_prime.c',
+  'ulong_extras/is_probabprime.c',
+  'ulong_extras/is_square.c',
+  'ulong_extras/is_squarefree.c',
+  'ulong_extras/is_strong_probabprime2_preinv.c',
+  'ulong_extras/is_strong_probabprime_precomp.c',
+  'ulong_extras/jacobi.c',
+  'ulong_extras/lll_mod_preinv.c',
+  'ulong_extras/ll_mod_preinv.c',
+  'ulong_extras/mod2_precomp.c',
+  'ulong_extras/mod2_preinv.c',
+  'ulong_extras/mod_precomp.c',
+  'ulong_extras/moebius_mu.c',
+  'ulong_extras/mulmod_precomp.c',
+  'ulong_extras/mulmod_precomp_shoup.c',
+  'ulong_extras/mulmod_preinv.c',
+  'ulong_extras/nextprime.c',
+  'ulong_extras/nth_prime.c',
+  'ulong_extras/pow.c',
+  'ulong_extras/powmod2_preinv.c',
+  'ulong_extras/powmod2_ui_preinv.c',
+  'ulong_extras/powmod_precomp.c',
+  'ulong_extras/powmod_ui_preinv.c',
+  'ulong_extras/preinvert_limb.c',
+  'ulong_extras/prime_inverses_arr_readonly.c',
+  'ulong_extras/prime_pi_bounds.c',
+  'ulong_extras/prime_pi.c',
+  'ulong_extras/primes_arr_readonly.c',
+  'ulong_extras/primes_clear.c',
+  'ulong_extras/primes_extend_small.c',
+  'ulong_extras/primes_init.c',
+  'ulong_extras/primes_jump_after.c',
+  'ulong_extras/primes_next.c',
+  'ulong_extras/primes_sieve_range.c',
+  'ulong_extras/primitive_root_prime.c',
+  'ulong_extras/randomisation.c',
+  'ulong_extras/remove2_precomp.c',
+  'ulong_extras/remove.c',
+  'ulong_extras/revbin.c',
+  'ulong_extras/root.c',
+  'ulong_extras/root_estimate.c',
+  'ulong_extras/rootrem.c',
+  'ulong_extras/sizeinbase.c',
+  'ulong_extras/sqrt.c',
+  'ulong_extras/sqrtmod.c',
+  'ulong_extras/sqrtmodn.c',
+  'ulong_extras/sqrtmod_primepow.c',
+  'ulong_extras/sqrtrem.c',
+  'ulong_extras/xgcd.c',
+]

From ebf835e4f32623441a79958168cdfa853ced2344 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Mon, 8 Apr 2024 01:29:59 +0100
Subject: [PATCH 02/36] Add missing headers

---
 src/meson.build | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/meson.build b/src/meson.build
index 5349ceac93..66c0451ab9 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,4 +1,8 @@
 headers = [
+  'flint.h',
+  'flint-config.h',
+  'gmpcompat.h',
+  #
   'acb_calc.h',
   'acb_dft.h',
   'acb_dirichlet.h',

From de1b284bc9c97f59753b15a593c47de70e9581e8 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Mon, 8 Apr 2024 16:08:38 +0100
Subject: [PATCH 03/36] build: actually install libflint

---
 meson.build | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meson.build b/meson.build
index ae7cd95a15..1169a801be 100644
--- a/meson.build
+++ b/meson.build
@@ -28,6 +28,7 @@ install_headers(headers_all, subdir: 'flint')
 libflint = library('flint', c_files_all,
   dependencies: flint_deps,
   include_directories: include_directories('src'),
+  install: true
 )
 
 pkg_mod = import('pkgconfig')

From 6ae01167cd985605a5a40e7c8b83793a30b6244f Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Mon, 8 Apr 2024 17:46:36 +0100
Subject: [PATCH 04/36] build: use release as the default buildtype

---
 meson.build | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/meson.build b/meson.build
index 1169a801be..6a73b0dbea 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,7 @@
 project('FLINT', 'c',
   version: '3.1.0',
-  license: 'LGPL3+'
+  license: 'LGPL3+',
+  default_options: ['buildtype=release'],
 )
 
 cc = meson.get_compiler('c')

From 8de98ab52f4126d20237bf519ccf357694476c7b Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Thu, 11 Apr 2024 18:45:02 +0100
Subject: [PATCH 05/36] build: build fft_small and assembly with meson

---
 detection/meson.build | 133 ++++++++++++++++++++++++++++++++++++++++++
 meson.build           |  21 ++++++-
 meson.options         |   4 ++
 src/meson.build       |   3 +-
 4 files changed, 159 insertions(+), 2 deletions(-)
 create mode 100644 detection/meson.build
 create mode 100644 meson.options

diff --git a/detection/meson.build b/detection/meson.build
new file mode 100644
index 0000000000..9310f76348
--- /dev/null
+++ b/detection/meson.build
@@ -0,0 +1,133 @@
+
+fft_small_opt = get_option('fft_small')
+
+# check for headers used by fft_small
+has_avx = cc.has_header('immintrin.h')
+has_neon = cc.has_header('arm_neon.h')
+
+fft_small_supported = has_avx or has_neon
+
+# Error if fft_small enabled but not possible, otherwise disable if auto
+fft_small_opt = fft_small_opt.require(fft_small_supported,
+    error_message: 'host CPU does not support AVX/NEON. Set fft_small to disabled or auto')
+
+# If fft_small was auto we enable it if possible
+fft_small_opt = fft_small_opt.enable_auto_if(fft_small_supported)
+have_fft_small = fft_small_opt.enabled()
+
+message('FFT_SMALL: ', have_fft_small ? 'enabled' : 'disabled')
+
+if have_fft_small
+    cfg_data.set('FLINT_HAVE_FFT_SMALL', 1,
+        description: 'Define to use the fft_small module')
+endif
+
+if have_fft_small
+  c_files_all += [
+    'src/fft_small/default_ctx.c',
+    'src/fft_small/fmpz_poly_mul.c',
+    'src/fft_small/mpn_helpers.c',
+    'src/fft_small/mpn_mul.c',
+    'src/fft_small/mulmod_statisfies_bounds.c',
+    'src/fft_small/nmod_poly_mul.c',
+    'src/fft_small/sd_fft.c',
+    'src/fft_small/sd_fft_ctx.c',
+    'src/fft_small/sd_ifft.c',
+  ]
+  # Maybe fft_small.h should only be added conditionally as well...
+  # headers_all += ['src/fft_small.h']
+endif
+
+assembly_opt = get_option('assembly')
+
+# Might be better to check for known good operating systems rather than
+# exclude known bad ones.
+assembly_opt = assembly_opt.require(host_machine.system() != 'windows',
+    error_message: 'No assembly support for Windows')
+
+# Checking for assembly support needs to be more complicated than this. ARM
+# needs to be v8 and not sure exactly what to check for x86_64. For now
+# the checks below would attempt to build assembly on some systems that do not
+# support it. The feature can be disabled with -Dassembly=disabled to build on
+# those systems.
+if host_machine.cpu_family() == 'aarch64'
+  assembly_cpu_supported = true
+  assembly_dir = 'arm64'
+  # FLINT_HAVE_ASSEMBLY_armv8
+elif host_machine.cpu_family() == 'x86_64'
+  assembly_cpu_supported = true
+  assembly_dir = 'x86_64/broadwell'
+  # FLINT_HAVE_ASSEMBLY_x86_64_adx
+else
+  assembly_cpu_supported = false
+endif
+
+assembly_opt = assembly_opt.require(assembly_cpu_supported,
+    error_message: 'No assembly support for host CPU')
+
+assembly_opt = assembly_opt.enable_auto_if(true)
+have_assembly = assembly_opt.enabled()
+
+message('ASSEMBLY: ', have_assembly ? 'enabled' : 'disabled')
+
+if have_assembly
+
+  asm_deps = [
+    '../config.m4',
+    '../src/mpn_extras/asm-defs.m4',
+  ]
+
+  if assembly_dir == 'arm64'
+    asm_files = [
+      'src/mpn_extras/arm64/mul_2.asm',
+      'src/mpn_extras/arm64/mulhigh_hard.asm',
+      'src/mpn_extras/arm64/mul_hard.asm',
+      'src/mpn_extras/arm64/sqrhigh_hard.asm',
+      'src/mpn_extras/arm64/mulhigh_basecase.asm',
+      'src/mpn_extras/arm64/sqr_hard.asm',
+    ]
+    asm_deps += [
+      '../src/mpn_extras/arm64/darwin.m4',
+      '../src/mpn_extras/arm64/arm64-defs.m4',
+    ]
+  elif assembly_dir == 'x86_64/broadwell'
+    asm_files = [
+      'src/mpn_extras/x86_64/broadwell/mullow_hard.asm',
+      'src/mpn_extras/x86_64/broadwell/2add_n_inplace.asm',
+      'src/mpn_extras/x86_64/broadwell/mulhigh_hard.asm',
+      'src/mpn_extras/x86_64/broadwell/sqrhigh_basecase_odd.asm',
+      'src/mpn_extras/x86_64/broadwell/mul_hard.asm',
+      'src/mpn_extras/x86_64/broadwell/mulhigh_normalised_hard.asm',
+      'src/mpn_extras/x86_64/broadwell/sqrhigh_hard.asm',
+      'src/mpn_extras/x86_64/broadwell/mullow_basecase.asm',
+      'src/mpn_extras/x86_64/broadwell/mulhigh_basecase.asm',
+      'src/mpn_extras/x86_64/broadwell/sqrhigh_basecase_even.asm',
+      'src/mpn_extras/x86_64/broadwell/sqr_hard.asm',
+    ]
+    asm_deps += [
+      '../src/mpn_extras/x86_64/broadwell/x86_64-defs.m4',
+    ]
+    if host_machine.system() == 'darwin'
+      asm_deps += [
+        '../src/mpn_extras/x86_64/broadwell/darwin.m4',
+      ]
+    endif
+  else
+    error('Unknown assembly_dir: ', assembly_dir)
+  endif
+
+  m4_prog = find_program('m4', native: true)
+
+  s_files = []
+  foreach asm_file: asm_files
+    s_filename = fs.stem(asm_file) + '.s'
+    s_file = custom_target(s_filename,
+      input: ['..' / asm_file] + asm_deps,
+      output: s_filename,
+      command: [m4_prog, '-I..', '@INPUT0@'],
+      capture: true,
+    )
+    s_files += [s_file]
+  endforeach
+
+endif
diff --git a/meson.build b/meson.build
index 6a73b0dbea..6499d81f46 100644
--- a/meson.build
+++ b/meson.build
@@ -1,10 +1,16 @@
 project('FLINT', 'c',
   version: '3.1.0',
   license: 'LGPL3+',
-  default_options: ['buildtype=release'],
+  default_options: [
+    'buildtype=release',
+    'c_std=c11',
+  ],
 )
 
 cc = meson.get_compiler('c')
+cfg_data = configuration_data()
+fs = import('fs')
+
 m_dep = cc.find_library('m', required: false)
 
 gmp_dep = dependency('gmp', version: '>= 6.2.1')
@@ -12,6 +18,13 @@ mpfr_dep = dependency('mpfr', version: '>= 4.1.0')
 
 flint_deps = [gmp_dep, mpfr_dep, m_dep]
 
+add_project_arguments(
+  '-DBUILDING_FLINT',
+  '-DFLINT_NOSTDIO',
+  '-DFLINT_NOSTDARG',
+  '-Werror=implicit-function-declaration',
+  language: 'c')
+
 subdir('src')
 
 headers_all = []
@@ -24,6 +37,12 @@ foreach file : c_files_all_subdir
   c_files_all += ['src' / file]
 endforeach
 
+subdir('detection')
+
+if have_assembly
+  c_files_all += s_files
+endif
+
 install_headers(headers_all, subdir: 'flint')
 
 libflint = library('flint', c_files_all,
diff --git a/meson.options b/meson.options
new file mode 100644
index 0000000000..7ccdc8e452
--- /dev/null
+++ b/meson.options
@@ -0,0 +1,4 @@
+option('fft_small', type : 'feature', value : 'auto',
+        description: 'Build the fft_small module')
+option('assembly', type : 'feature', value : 'auto',
+        description: 'Use assembly code')
diff --git a/src/meson.build b/src/meson.build
index 66c0451ab9..d9d2ee86d3 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1947,6 +1947,7 @@ c_files_all_subdir = [
   'fft/mul_truncate_sqrt2.c',
   'fft/negmod_2expp1.c',
   'fft/normmod_2expp1.c',
+  # These are added by detection/meson.build conditionally.
   #'fft_small/default_ctx.c',
   #'fft_small/fmpz_poly_mul.c',
   #'fft_small/mpn_helpers.c',
@@ -5275,7 +5276,7 @@ c_files_all_subdir = [
   'qsieve/poly.c',
   'qsieve/primes_init.c',
   'qsieve/square_root.c',
-  'test/main.c',
+  #'test/main.c',
   'thread_pool/clear.c',
   'thread_pool/distribute_work.c',
   'thread_pool/find_work.c',

From d0e2f7056dce010345df9a29e1b983003f12c050 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Thu, 11 Apr 2024 21:23:00 +0100
Subject: [PATCH 06/36] build: build some tests with meson

---
 meson.build                       | 13 +++++++++++--
 src/fmpq/test/meson.build         |  8 ++++++++
 src/fmpz/test/meson.build         |  8 ++++++++
 src/meson.build                   |  2 ++
 src/ulong_extras/test/meson.build |  8 ++++++++
 5 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 src/fmpq/test/meson.build
 create mode 100644 src/fmpz/test/meson.build
 create mode 100644 src/ulong_extras/test/meson.build

diff --git a/meson.build b/meson.build
index 6499d81f46..614097dbab 100644
--- a/meson.build
+++ b/meson.build
@@ -23,7 +23,8 @@ add_project_arguments(
   '-DFLINT_NOSTDIO',
   '-DFLINT_NOSTDARG',
   '-Werror=implicit-function-declaration',
-  language: 'c')
+  language: 'c',
+)
 
 subdir('src')
 
@@ -48,9 +49,17 @@ install_headers(headers_all, subdir: 'flint')
 libflint = library('flint', c_files_all,
   dependencies: flint_deps,
   include_directories: include_directories('src'),
-  install: true
+  install: true,
 )
 
+subdir('src/fmpz/test')
+subdir('src/fmpq/test')
+# ulong_extras tests fails with linker error:
+# Undefined symbols for architecture arm64:
+#  "_n_factor_evaluate", referenced from:
+#      _test_n_factor in main.c.o
+#subdir('src/ulong_extras/test')
+
 pkg_mod = import('pkgconfig')
 pkg_mod.generate(
   libraries: libflint,
diff --git a/src/fmpq/test/meson.build b/src/fmpq/test/meson.build
new file mode 100644
index 0000000000..fb6be84a32
--- /dev/null
+++ b/src/fmpq/test/meson.build
@@ -0,0 +1,8 @@
+test_exe = executable('main',
+  'main.c',
+  dependencies: flint_deps,
+  link_with: libflint,
+  include_directories: src_inc,
+  install: false,
+)
+test(file, test_exe)
diff --git a/src/fmpz/test/meson.build b/src/fmpz/test/meson.build
new file mode 100644
index 0000000000..fb6be84a32
--- /dev/null
+++ b/src/fmpz/test/meson.build
@@ -0,0 +1,8 @@
+test_exe = executable('main',
+  'main.c',
+  dependencies: flint_deps,
+  link_with: libflint,
+  include_directories: src_inc,
+  install: false,
+)
+test(file, test_exe)
diff --git a/src/meson.build b/src/meson.build
index d9d2ee86d3..7df02fb882 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,3 +1,5 @@
+src_inc = include_directories('.')
+
 headers = [
   'flint.h',
   'flint-config.h',
diff --git a/src/ulong_extras/test/meson.build b/src/ulong_extras/test/meson.build
new file mode 100644
index 0000000000..fb6be84a32
--- /dev/null
+++ b/src/ulong_extras/test/meson.build
@@ -0,0 +1,8 @@
+test_exe = executable('main',
+  'main.c',
+  dependencies: flint_deps,
+  link_with: libflint,
+  include_directories: src_inc,
+  install: false,
+)
+test(file, test_exe)

From 15542236499e055d613d129ca3dfd52e27f16116 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Fri, 12 Apr 2024 01:01:47 +0100
Subject: [PATCH 07/36] build: fix tests and add -Dtests=enabled option

---
 meson.build                       | 24 ++++++++++++++----------
 meson.options                     |  2 ++
 src/fmpq/test/meson.build         |  2 +-
 src/fmpz/test/meson.build         |  2 +-
 src/meson.build                   |  1 +
 src/ulong_extras/test/meson.build |  2 +-
 6 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/meson.build b/meson.build
index 614097dbab..4ce35d0cd8 100644
--- a/meson.build
+++ b/meson.build
@@ -19,9 +19,6 @@ mpfr_dep = dependency('mpfr', version: '>= 4.1.0')
 flint_deps = [gmp_dep, mpfr_dep, m_dep]
 
 add_project_arguments(
-  '-DBUILDING_FLINT',
-  '-DFLINT_NOSTDIO',
-  '-DFLINT_NOSTDARG',
   '-Werror=implicit-function-declaration',
   language: 'c',
 )
@@ -50,15 +47,22 @@ libflint = library('flint', c_files_all,
   dependencies: flint_deps,
   include_directories: include_directories('src'),
   install: true,
+  c_args: [
+    '-DBUILDING_FLINT',
+    '-DFLINT_NOSTDIO',
+    '-DFLINT_NOSTDARG',
+  ]
 )
 
-subdir('src/fmpz/test')
-subdir('src/fmpq/test')
-# ulong_extras tests fails with linker error:
-# Undefined symbols for architecture arm64:
-#  "_n_factor_evaluate", referenced from:
-#      _test_n_factor in main.c.o
-#subdir('src/ulong_extras/test')
+tests_opt = get_option('tests')
+if tests_opt.enabled()
+  subdir('src/fmpz/test')
+  subdir('src/fmpq/test')
+  subdir('src/ulong_extras/test')
+else
+  bad_test_exe = executable('bad_test', 'bad_test.c')
+  test('Need to build tests with -Dtests=enabled', bad_test_exe)
+endif
 
 pkg_mod = import('pkgconfig')
 pkg_mod.generate(
diff --git a/meson.options b/meson.options
index 7ccdc8e452..64a30b276c 100644
--- a/meson.options
+++ b/meson.options
@@ -1,3 +1,5 @@
+option('tests', type : 'feature', value : 'disabled',
+        description: 'Build the tests')
 option('fft_small', type : 'feature', value : 'auto',
         description: 'Build the fft_small module')
 option('assembly', type : 'feature', value : 'auto',
diff --git a/src/fmpq/test/meson.build b/src/fmpq/test/meson.build
index fb6be84a32..83d3d4e26f 100644
--- a/src/fmpq/test/meson.build
+++ b/src/fmpq/test/meson.build
@@ -5,4 +5,4 @@ test_exe = executable('main',
   include_directories: src_inc,
   install: false,
 )
-test(file, test_exe)
+test('fmpq', test_exe)
diff --git a/src/fmpz/test/meson.build b/src/fmpz/test/meson.build
index fb6be84a32..16a97f6a1f 100644
--- a/src/fmpz/test/meson.build
+++ b/src/fmpz/test/meson.build
@@ -5,4 +5,4 @@ test_exe = executable('main',
   include_directories: src_inc,
   install: false,
 )
-test(file, test_exe)
+test('fmpz', test_exe)
diff --git a/src/meson.build b/src/meson.build
index 7df02fb882..ace3589521 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -5306,6 +5306,7 @@ c_files_all_subdir = [
   'ulong_extras/euler_phi.c',
   'ulong_extras/factor.c',
   'ulong_extras/factor_ecm.c',
+  'ulong_extras/factor_misc.c',
   'ulong_extras/factorial_fast_mod2_preinv.c',
   'ulong_extras/factorial_mod2_preinv.c',
   'ulong_extras/factor_insert.c',
diff --git a/src/ulong_extras/test/meson.build b/src/ulong_extras/test/meson.build
index fb6be84a32..d9ae8dd9a1 100644
--- a/src/ulong_extras/test/meson.build
+++ b/src/ulong_extras/test/meson.build
@@ -5,4 +5,4 @@ test_exe = executable('main',
   include_directories: src_inc,
   install: false,
 )
-test(file, test_exe)
+test('ulong_extras', test_exe)

From d6f1e87fa5036d09fe0922c503496b4593dc5438 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 13 Apr 2024 20:12:21 +0100
Subject: [PATCH 08/36] build: make meson build files with meson_boostrap

---
 .gitignore                                  |    3 +
 _meson_build/Makefile                       |   20 +
 _meson_build/bad_test.c                     |   10 +
 _meson_build/generate_meson_build.py        |  276 +
 meson.build => _meson_build/meson.build     |   19 +-
 meson.options => _meson_build/meson.options |    0
 meson_bootstrap.py                          |   10 +
 src/fmpq/test/meson.build                   |    8 -
 src/fmpz/test/meson.build                   |    8 -
 src/meson.build                             | 5376 -------------------
 src/ulong_extras/test/meson.build           |    8 -
 11 files changed, 323 insertions(+), 5415 deletions(-)
 create mode 100644 _meson_build/Makefile
 create mode 100644 _meson_build/bad_test.c
 create mode 100644 _meson_build/generate_meson_build.py
 rename meson.build => _meson_build/meson.build (78%)
 rename meson.options => _meson_build/meson.options (100%)
 create mode 100755 meson_bootstrap.py
 delete mode 100644 src/fmpq/test/meson.build
 delete mode 100644 src/fmpz/test/meson.build
 delete mode 100644 src/meson.build
 delete mode 100644 src/ulong_extras/test/meson.build

diff --git a/.gitignore b/.gitignore
index ce3195baac..846ed9711e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -66,3 +66,6 @@ config.m4
 src/flint-mparam.h
 .gdb_history
 vgcore.*
+meson
+meson.build
+meson.options
diff --git a/_meson_build/Makefile b/_meson_build/Makefile
new file mode 100644
index 0000000000..e7f05671e9
--- /dev/null
+++ b/_meson_build/Makefile
@@ -0,0 +1,20 @@
+BUILDDIR = build2
+
+all: setup
+	meson compile -C $(BUILDDIR)
+
+setup: $(BUILDDIR)/.build-dir-created
+
+$(BUILDDIR)/.build-dir-created:
+	meson setup $(BUILDDIR)
+	touch $(BUILDDIR)/.build-dir-created
+
+clean:
+	rm -rf $(BUILDDIR)
+
+install: compile
+	meson install -C $(BUILDDIR)
+
+test: setup
+	meson configure $(BUILDDIR) -Dtests=enabled
+	meson test -C $(BUILDDIR)
diff --git a/_meson_build/bad_test.c b/_meson_build/bad_test.c
new file mode 100644
index 0000000000..3af1103e33
--- /dev/null
+++ b/_meson_build/bad_test.c
@@ -0,0 +1,10 @@
+/*
+ * This is used to fail the build tests of someone tries to run them without
+ * enabling them in the build first.
+ */
+#include <stdio.h>
+
+int main() {
+    printf("No tests run. Need to enable building tests with meson configure -Dtests=enabled\n");
+    return 1;
+}
diff --git a/_meson_build/generate_meson_build.py b/_meson_build/generate_meson_build.py
new file mode 100644
index 0000000000..a6d79513b7
--- /dev/null
+++ b/_meson_build/generate_meson_build.py
@@ -0,0 +1,276 @@
+import sys
+from os import listdir
+from os.path import join, dirname, abspath, isdir
+from shutil import copyfile
+from argparse import ArgumentParser
+
+this_dir = dirname(abspath(__file__))
+
+files = [
+    'configure',
+    'Makefile',
+    'meson.build',
+    'meson.options',
+]
+
+# Directories in src that are not modules to be built as part of libflint
+exclude_mod_dirs = [
+    'test',
+    'profile',
+    'interfaces',
+    'python',
+]
+
+# Modules that do not have a corresponding header file
+mod_no_header = [
+    'generic_files',
+]
+
+# Headers that do not have a corresponding module
+head_no_dir = [
+    'NTL-interface',
+    'acb_types',
+    'acf_types',
+    'arb_types',
+    'arf_types',
+    'config',
+    'crt_helpers',
+    'flint',
+    'flint-config',
+    'flint-mparam',
+    'fmpq_types',
+    'fmpz_mod_types',
+    'fmpz_types',
+    'fq_nmod_types',
+    'fq_types',
+    'fq_zech_types',
+    'gettimeofday',
+    'gmpcompat',
+    'limb_types',
+    'longlong',
+    'longlong_asm_clang',
+    'longlong_asm_gcc',
+    'longlong_asm_gnu',
+    'longlong_div_gnu',
+    'longlong_msc_arm64',
+    'longlong_msc_x86',
+    'machine_vectors',
+    'mpf-impl',
+    'mpoly_types',
+    'n_poly_types',
+    'nmod_types',
+    'padic_types',
+    'profiler',
+    'templates',
+    'test_helpers',
+]
+
+mod_no_tests = [
+    'ca_vec',
+    'calcium',
+    'fexpr_builtin',
+    'fmpz_mod_vec',
+    'fq_zech_mpoly',
+    'fq_zech_mpoly_factor',
+    'generic_files',
+    'hypgeom',
+    # XXX: Templates...
+    'fq_templates',
+    'fq_embed_templates',
+    'fq_poly_templates',
+    'fq_poly_factor_templates',
+    'fq_mat_templates',
+    'fq_vec_templates',
+]
+
+src_meson_build = '''\
+#
+# This file is generated automatically.
+#
+# To regenerate it, run:
+#   python _meson_build/generate_meson_build.py
+#
+
+src_dir_inc = include_directories('.')
+
+modules = [
+%s
+]
+
+modules_no_header = [
+%s
+]
+
+modules_no_tests = [
+%s
+]
+
+headers_no_dir = [
+%s
+]
+
+headers_all = []
+c_files_all = []
+mod_tests = []
+
+foreach mod : modules
+  subdir(mod)
+  if mod not in modules_no_tests
+    mod_tests += [mod / 'test']
+  endif
+endforeach
+
+foreach mod : modules + headers_no_dir
+  if mod not in modules_no_header
+    headers_all += [mod + '.h']
+  endif
+endforeach
+
+headers_all = files(headers_all)
+'''
+
+src_mod_meson_build = '''\
+#
+# This file is generated automatically.
+#
+# To regenerate it, run:
+#   python _meson_build/generate_meson_build.py
+#
+
+c_files_all += files(
+%s
+)
+'''
+
+test_mod_meson_build = '''\
+# This file is generated automatically.
+#
+# To regenerate it, run:
+#   python _meson_build/generate_meson_build.py
+#
+
+test_exe = executable('main',
+  'main.c',
+  dependencies: flint_deps,
+  link_with: libflint,
+  include_directories: src_dir_inc,
+  install: false,
+)
+
+test('%s', test_exe)
+'''
+
+def get_flint_modules(flint_root):
+    src_path = join(flint_root, 'src')
+    is_mod = lambda p: isdir(join(src_path, p)) and p not in exclude_mod_dirs
+    subdirs = [p for p in listdir(src_path) if is_mod(p)]
+    headers = [p[:-2] for p in listdir(src_path) if p.endswith('.h')]
+
+    # Check for mismatches between subdirs and headers apart from the
+    # known exceptions (exclude_mod_dirs, mod_no_header, head_no_dir)
+    extra_dirs = set(subdirs) - set(headers) != set(mod_no_header)
+    extra_headers = set(headers) - set(subdirs) != set(head_no_dir)
+    if extra_dirs or extra_headers:
+        print('Mismatch between subdirs and headers in src')
+        print('Extra headers:\n', '\n'.join(sorted(extra_headers)))
+        print('Extra subdirs:\n', '\n'.join(sorted(extra_dirs)))
+        sys.exit(1)
+    missing_dirs = set(mod_no_header) - set(subdirs)
+    missing_headers = (set(head_no_dir) - set(headers))
+    if missing_dirs or missing_headers:
+        print('Missing subdirs:\n', '\n'.join(sorted(missing_dirs)))
+        print('Missing headers:\n', '\n'.join(sorted(missing_headers)))
+        sys.exit(1)
+
+    return subdirs
+
+parser = ArgumentParser(description='Generate Meson build files')
+
+parser.add_argument('-q', '--quiet', action='store_true',
+                    help='Do not print anything')
+parser.add_argument('--error-if-changed', action='store_true',
+                    help='Exit with error code 1 if the files have changed')
+parser.add_argument('output_dir', default='.', help='Output directory')
+
+def main(args):
+    args = parser.parse_args(args)
+
+    for fname in files:
+        src_path = join(this_dir, fname)
+        dst_path = join(args.output_dir, fname)
+        if not args.quiet:
+            print('Copying {} to {}'.format(src_path, dst_path))
+        if args.error_if_changed:
+            if not same_files(src_path, dst_path):
+                print('File {} has changed'.format(dst))
+                return 1
+        copyfile(src_path, dst_path)
+
+    modules = get_flint_modules(args.output_dir)
+
+    modules_str = '\n'.join(f"  '{m}'," for m in sorted(modules))
+    mod_no_head_str = '\n'.join(f"  '{m}'," for m in sorted(mod_no_header))
+    mod_no_test_str = '\n'.join(f"  '{m}'," for m in sorted(mod_no_tests))
+    head_no_dir_str = '\n'.join(f"  '{m}'," for m in sorted(head_no_dir))
+
+    src_meson_build_text = src_meson_build % (
+        modules_str, mod_no_head_str, mod_no_test_str, head_no_dir_str)
+
+    dst_path = join(args.output_dir, 'src', 'meson.build')
+
+    if not args.quiet:
+        print('Writing meson.build to {}'.format(src_path))
+    if args.error_if_changed:
+        if not same_content(src_meson_build_text, src_path):
+            print('File {} has changed'.format(src_path))
+            return 1
+    with open(dst_path, 'w') as fout:
+        fout.write(src_meson_build_text)
+
+    for mod in modules + mod_no_header:
+        mod_dir = join(args.output_dir, 'src', mod)
+        c_files = [f for f in listdir(mod_dir) if f.endswith('.c')]
+        c_files_str = '\n'.join(f"  '{f}'," for f in sorted(c_files))
+        src_mod_meson_build_text = src_mod_meson_build % c_files_str
+        dst_path = join(mod_dir, 'meson.build')
+        if not args.quiet:
+            print('Writing meson.build to {}'.format(dst_path))
+        if args.error_if_changed:
+            if not same_content(src_mod_meson_build_text, dst_path):
+                print('File {} has changed'.format(dst_path))
+                return 1
+        with open(dst_path, 'w') as fout:
+            fout.write(src_mod_meson_build_text)
+
+        if mod not in mod_no_tests:
+            test_dir = join(mod_dir, 'test')
+            test_mod_meson_build_text = test_mod_meson_build % mod
+            dst_path = join(test_dir, 'meson.build')
+            if not args.quiet:
+                print('Writing meson.build to {}'.format(dst_path))
+            if args.error_if_changed:
+                if not same_content(test_mod_meson_build_text, dst_path):
+                    print('File {} has changed'.format(dst_path))
+                    return 1
+            with open(dst_path, 'w') as fout:
+                fout.write(test_mod_meson_build_text)
+
+
+def same_files(src_path, dst_path):
+    with open(src_path, 'rb') as f:
+        src_content = f.read()
+    return same_content(src_content, dst_path)
+
+
+def same_content(src_content, dst_path):
+    try:
+        with open(dst_path, 'rb') as f:
+            dst_content = f.read()
+    except FileNotFoundError:
+        return False
+    else:
+        return src_content == dst_content
+
+
+if __name__ == '__main__':
+    sys.exit(main(sys.argv[1:]))
diff --git a/meson.build b/_meson_build/meson.build
similarity index 78%
rename from meson.build
rename to _meson_build/meson.build
index 4ce35d0cd8..326220d250 100644
--- a/meson.build
+++ b/_meson_build/meson.build
@@ -24,17 +24,6 @@ add_project_arguments(
 )
 
 subdir('src')
-
-headers_all = []
-foreach header : headers
-  headers_all += ['src' / header]
-endforeach
-
-c_files_all = []
-foreach file : c_files_all_subdir
-  c_files_all += ['src' / file]
-endforeach
-
 subdir('detection')
 
 if have_assembly
@@ -56,11 +45,11 @@ libflint = library('flint', c_files_all,
 
 tests_opt = get_option('tests')
 if tests_opt.enabled()
-  subdir('src/fmpz/test')
-  subdir('src/fmpq/test')
-  subdir('src/ulong_extras/test')
+  foreach mod_test : mod_tests
+    subdir('src' / mod_test)
+  endforeach
 else
-  bad_test_exe = executable('bad_test', 'bad_test.c')
+  bad_test_exe = executable('bad_test', '_meson_build/bad_test.c')
   test('Need to build tests with -Dtests=enabled', bad_test_exe)
 endif
 
diff --git a/meson.options b/_meson_build/meson.options
similarity index 100%
rename from meson.options
rename to _meson_build/meson.options
diff --git a/meson_bootstrap.py b/meson_bootstrap.py
new file mode 100755
index 0000000000..e610fdc18a
--- /dev/null
+++ b/meson_bootstrap.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+
+from os.path import join, dirname, abspath
+from sys import executable as python, argv
+from subprocess import check_call
+
+this_dir = dirname(abspath(__file__))
+meson_build_dir = join(this_dir, '_meson_build')
+generate_script = join(meson_build_dir, 'generate_meson_build.py')
+check_call([python, generate_script, this_dir] + argv[1:])
diff --git a/src/fmpq/test/meson.build b/src/fmpq/test/meson.build
deleted file mode 100644
index 83d3d4e26f..0000000000
--- a/src/fmpq/test/meson.build
+++ /dev/null
@@ -1,8 +0,0 @@
-test_exe = executable('main',
-  'main.c',
-  dependencies: flint_deps,
-  link_with: libflint,
-  include_directories: src_inc,
-  install: false,
-)
-test('fmpq', test_exe)
diff --git a/src/fmpz/test/meson.build b/src/fmpz/test/meson.build
deleted file mode 100644
index 16a97f6a1f..0000000000
--- a/src/fmpz/test/meson.build
+++ /dev/null
@@ -1,8 +0,0 @@
-test_exe = executable('main',
-  'main.c',
-  dependencies: flint_deps,
-  link_with: libflint,
-  include_directories: src_inc,
-  install: false,
-)
-test('fmpz', test_exe)
diff --git a/src/meson.build b/src/meson.build
deleted file mode 100644
index ace3589521..0000000000
--- a/src/meson.build
+++ /dev/null
@@ -1,5376 +0,0 @@
-src_inc = include_directories('.')
-
-headers = [
-  'flint.h',
-  'flint-config.h',
-  'gmpcompat.h',
-  #
-  'acb_calc.h',
-  'acb_dft.h',
-  'acb_dirichlet.h',
-  'acb_elliptic.h',
-  'acb.h',
-  'acb_hypgeom.h',
-  'acb_mat.h',
-  'acb_modular.h',
-  'acb_poly.h',
-  'acb_theta.h',
-  'acb_types.h',
-  'acf.h',
-  'acf_types.h',
-  'aprcl.h',
-  'arb_calc.h',
-  'arb_fmpz_poly.h',
-  'arb_fpwrap.h',
-  'arb.h',
-  'arb_hypgeom.h',
-  'arb_mat.h',
-  'arb_poly.h',
-  'arb_types.h',
-  'arf.h',
-  'arf_types.h',
-  'arith.h',
-  'bernoulli.h',
-  'bool_mat.h',
-  'ca_ext.h',
-  'ca_field.h',
-  'ca.h',
-  'calcium.h',
-  'ca_mat.h',
-  'ca_poly.h',
-  'ca_vec.h',
-  'crt_helpers.h',
-  'dirichlet.h',
-  'dlog.h',
-  'd_mat.h',
-  'double_extras.h',
-  'double_interval.h',
-  'd_vec.h',
-  'fexpr_builtin.h',
-  'fexpr.h',
-  'fft.h',
-  'fft_small.h',
-  'fmpq.h',
-  'fmpq_mat.h',
-  'fmpq_mpoly_factor.h',
-  'fmpq_mpoly.h',
-  'fmpq_poly.h',
-  'fmpq_types.h',
-  'fmpq_vec.h',
-  'fmpz_extras.h',
-  'fmpz_factor.h',
-  'fmpz.h',
-  'fmpzi.h',
-  'fmpz_lll.h',
-  'fmpz_mat.h',
-  'fmpz_mod.h',
-  'fmpz_mod_mat.h',
-  'fmpz_mod_mpoly_factor.h',
-  'fmpz_mod_mpoly.h',
-  'fmpz_mod_poly_factor.h',
-  'fmpz_mod_poly.h',
-  'fmpz_mod_types.h',
-  'fmpz_mod_vec.h',
-  'fmpz_mpoly_factor.h',
-  'fmpz_mpoly.h',
-  'fmpz_mpoly_q.h',
-  'fmpz_poly_factor.h',
-  'fmpz_poly.h',
-  'fmpz_poly_mat.h',
-  'fmpz_poly_q.h',
-  'fmpz_types.h',
-  'fmpz_vec.h',
-  'fq_default.h',
-  'fq_default_mat.h',
-  'fq_default_poly_factor.h',
-  'fq_default_poly.h',
-  'fq_embed.h',
-  'fq_embed_templates.h',
-  'fq.h',
-  'fq_mat.h',
-  'fq_mat_templates.h',
-  'fq_nmod_embed.h',
-  'fq_nmod.h',
-  'fq_nmod_mat.h',
-  'fq_nmod_mpoly_factor.h',
-  'fq_nmod_mpoly.h',
-  'fq_nmod_poly_factor.h',
-  'fq_nmod_poly.h',
-  'fq_nmod_types.h',
-  'fq_nmod_vec.h',
-  'fq_poly_factor.h',
-  'fq_poly_factor_templates.h',
-  'fq_poly.h',
-  'fq_poly_templates.h',
-  'fq_templates.h',
-  'fq_types.h',
-  'fq_vec.h',
-  'fq_vec_templates.h',
-  'fq_zech_embed.h',
-  'fq_zech.h',
-  'fq_zech_mat.h',
-  'fq_zech_mpoly_factor.h',
-  'fq_zech_mpoly.h',
-  'fq_zech_poly_factor.h',
-  'fq_zech_poly.h',
-  'fq_zech_types.h',
-  'fq_zech_vec.h',
-  'gettimeofday.h',
-  'gr_generic.h',
-  'gr.h',
-  'gr_mat.h',
-  'gr_mpoly.h',
-  'gr_poly.h',
-  'gr_special.h',
-  'gr_vec.h',
-  'hypgeom.h',
-  'limb_types.h',
-  'long_extras.h',
-  'longlong_asm_clang.h',
-  'longlong_asm_gcc.h',
-  'longlong_asm_gnu.h',
-  'longlong_div_gnu.h',
-  'longlong.h',
-  'longlong_msc_arm64.h',
-  'longlong_msc_x86.h',
-  'machine_vectors.h',
-  'mag.h',
-  'mpf-impl.h',
-  'mpfr_mat.h',
-  'mpfr_vec.h',
-  'mpn_extras.h',
-  'mpoly.h',
-  'mpoly_types.h',
-  'nf_elem.h',
-  'nf.h',
-  'nmod.h',
-  'nmod_mat.h',
-  'nmod_mpoly_factor.h',
-  'nmod_mpoly.h',
-  'nmod_poly_factor.h',
-  'nmod_poly.h',
-  'nmod_poly_mat.h',
-  'nmod_types.h',
-  'nmod_vec.h',
-  'n_poly.h',
-  'n_poly_types.h',
-  'NTL-interface.h',
-  'padic.h',
-  'padic_mat.h',
-  'padic_poly.h',
-  'padic_types.h',
-  'partitions.h',
-  'perm.h',
-  'profiler.h',
-  'qadic.h',
-  'qfb.h',
-  'qqbar.h',
-  'qsieve.h',
-  'templates.h',
-  'test_helpers.h',
-  'thread_pool.h',
-  'thread_support.h',
-  'ulong_extras.h',
-]
-
-c_files_all_subdir = [
-  # These three not captured by src/*/*.c
-  #'fmpz/link/fmpz_gc.c',
-  #'fmpz/link/fmpz_reentrant.c',
-  'fmpz/link/fmpz_single.c',
-  # src/*/*.c
-  'acb/acos.c',
-  'acb/acosh.c',
-  'acb/addmul.c',
-  'acb/agm1.c',
-  'acb/agm.c',
-  'acb/approx_dot.c',
-  'acb/arg.c',
-  'acb/asin.c',
-  'acb/asinh.c',
-  'acb/atan.c',
-  'acb/atanh.c',
-  'acb/barnes_g.c',
-  'acb/bernoulli_poly_ui.c',
-  'acb_calc/cauchy_bound.c',
-  'acb_calc/integrate.c',
-  'acb_calc/integrate_gl_auto_deg.c',
-  'acb_calc/integrate_opt_init.c',
-  'acb_calc/integrate_taylor.c',
-  'acb/chebyshev_t2_ui.c',
-  'acb/chebyshev_t_ui.c',
-  'acb/chebyshev_u2_ui.c',
-  'acb/chebyshev_u_ui.c',
-  'acb/clear.c',
-  'acb/contains_int.c',
-  'acb/cos.c',
-  'acb/cos_pi.c',
-  'acb/cot.c',
-  'acb/cot_pi.c',
-  'acb/csch.c',
-  'acb/csc_pi.c',
-  'acb/csgn.c',
-  'acb/cube.c',
-  'acb_dft/bluestein.c',
-  'acb_dft/convol.c',
-  'acb_dft/convol_dft.c',
-  'acb_dft/convol_mullow.c',
-  'acb_dft/convol_naive.c',
-  'acb_dft/convol_rad2.c',
-  'acb_dft/crt.c',
-  'acb_dft/cyc.c',
-  'acb_dft/naive.c',
-  'acb_dft/precomp.c',
-  'acb_dft/prod.c',
-  'acb_dft/rad2.c',
-  'acb_dft/rad2_threaded.c',
-  'acb_dft/step.c',
-  'acb/digamma.c',
-  'acb_dirichlet/arb_quadratic_powers.c',
-  'acb_dirichlet/backlund_s_bound.c',
-  'acb_dirichlet/backlund_s.c',
-  'acb_dirichlet/backlund_s_gram.c',
-  'acb_dirichlet/chi.c',
-  'acb_dirichlet/chi_vec.c',
-  'acb_dirichlet/dft.c',
-  'acb_dirichlet/eta.c',
-  'acb_dirichlet/euler_product_real_ui.c',
-  'acb_dirichlet/gauss_sum.c',
-  'acb_dirichlet/gauss_sum_factor.c',
-  'acb_dirichlet/gauss_sum_naive.c',
-  'acb_dirichlet/gauss_sum_order2.c',
-  'acb_dirichlet/gauss_sum_theta.c',
-  'acb_dirichlet/gram_point.c',
-  'acb_dirichlet/hardy_theta.c',
-  'acb_dirichlet/hardy_theta_series.c',
-  'acb_dirichlet/hardy_z.c',
-  'acb_dirichlet/hardy_z_series.c',
-  'acb_dirichlet/hardy_z_zero.c',
-  'acb_dirichlet/hurwitz.c',
-  'acb_dirichlet/hurwitz_precomp_bound.c',
-  'acb_dirichlet/hurwitz_precomp_choose_param.c',
-  'acb_dirichlet/hurwitz_precomp_clear.c',
-  'acb_dirichlet/hurwitz_precomp_eval.c',
-  'acb_dirichlet/hurwitz_precomp_init.c',
-  'acb_dirichlet/isolate_hardy_z_zero.c',
-  'acb_dirichlet/jacobi_sum.c',
-  'acb_dirichlet/jacobi_sum_factor.c',
-  'acb_dirichlet/jacobi_sum_gauss.c',
-  'acb_dirichlet/jacobi_sum_naive.c',
-  'acb_dirichlet/l.c',
-  'acb_dirichlet/lerch_phi.c',
-  'acb_dirichlet/lerch_phi_direct.c',
-  'acb_dirichlet/lerch_phi_integral.c',
-  'acb_dirichlet/l_euler_product.c',
-  'acb_dirichlet/l_fmpq_afe.c',
-  'acb_dirichlet/l_fmpq.c',
-  'acb_dirichlet/l_hurwitz.c',
-  'acb_dirichlet/l_jet.c',
-  'acb_dirichlet/l_series.c',
-  'acb_dirichlet/l_vec_hurwitz.c',
-  'acb_dirichlet/pairing.c',
-  'acb_dirichlet/pairing_conrey.c',
-  'acb_dirichlet/platt_beta.c',
-  'acb_dirichlet/platt_c_bound.c',
-  'acb_dirichlet/platt_hardy_z_zeros.c',
-  'acb_dirichlet/platt_i_bound.c',
-  'acb_dirichlet/platt_lemma_32.c',
-  'acb_dirichlet/platt_lemma_A11.c',
-  'acb_dirichlet/platt_lemma_A5.c',
-  'acb_dirichlet/platt_lemma_A7.c',
-  'acb_dirichlet/platt_lemma_A9.c',
-  'acb_dirichlet/platt_lemma_B1.c',
-  'acb_dirichlet/platt_lemma_B2.c',
-  'acb_dirichlet/platt_local_hardy_z_zeros.c',
-  'acb_dirichlet/platt_multieval.c',
-  'acb_dirichlet/platt_multieval_threaded.c',
-  'acb_dirichlet/platt_ws_interpolation.c',
-  'acb_dirichlet/platt_zeta_zeros.c',
-  'acb_dirichlet/powsum_sieved.c',
-  'acb_dirichlet/powsum_smooth.c',
-  'acb_dirichlet/powsum_term.c',
-  'acb_dirichlet/qseries_arb.c',
-  'acb_dirichlet/qseries_arb_powers.c',
-  'acb_dirichlet/root.c',
-  'acb_dirichlet/root_number.c',
-  'acb_dirichlet/roots_clear.c',
-  'acb_dirichlet/roots_init.c',
-  'acb_dirichlet/si_poly_evaluate.c',
-  'acb_dirichlet/stieltjes.c',
-  'acb_dirichlet/theta_arb.c',
-  'acb_dirichlet/theta_length.c',
-  'acb_dirichlet/turing_method_bound.c',
-  'acb_dirichlet/ui_theta_arb.c',
-  'acb_dirichlet/vec_mellin_arb.c',
-  'acb_dirichlet/xi.c',
-  'acb_dirichlet/zeta_bound.c',
-  'acb_dirichlet/zeta.c',
-  'acb_dirichlet/zeta_jet.c',
-  'acb_dirichlet/zeta_jet_rs.c',
-  'acb_dirichlet/zeta_rs_bound.c',
-  'acb_dirichlet/zeta_rs.c',
-  'acb_dirichlet/zeta_rs_d_coeffs.c',
-  'acb_dirichlet/zeta_rs_f_coeffs.c',
-  'acb_dirichlet/zeta_rs_r.c',
-  'acb_dirichlet/zeta_zeros.c',
-  'acb/div.c',
-  'acb/dot.c',
-  'acb/dot_fmpz.c',
-  'acb/dot_precise.c',
-  'acb/dot_si.c',
-  'acb/dot_simple.c',
-  'acb/dot_siui.c',
-  'acb/dot_ui.c',
-  'acb/dot_uiui.c',
-  'acb_elliptic/e.c',
-  'acb_elliptic/e_inc.c',
-  'acb_elliptic/f.c',
-  'acb_elliptic/invariants.c',
-  'acb_elliptic/inv_p.c',
-  'acb_elliptic/k.c',
-  'acb_elliptic/k_jet.c',
-  'acb_elliptic/k_series.c',
-  'acb_elliptic/p.c',
-  'acb_elliptic/pi.c',
-  'acb_elliptic/p_jet.c',
-  'acb_elliptic/p_prime.c',
-  'acb_elliptic/p_series.c',
-  'acb_elliptic/rc1.c',
-  'acb_elliptic/rf.c',
-  'acb_elliptic/rg.c',
-  'acb_elliptic/rj.c',
-  'acb_elliptic/roots.c',
-  'acb_elliptic/zeta.c',
-  'acb/exp.c',
-  'acb/exp_invexp.c',
-  'acb/expm1.c',
-  'acb/exp_pi_i.c',
-  'acb/gamma.c',
-  'acb/get_abs_lbound_arf.c',
-  'acb/get_abs_ubound_arf.c',
-  'acb/get_mag.c',
-  'acb/get_mag_lower.c',
-  'acb/get_rad_ubound_arf.c',
-  'acb/get_unique_fmpz.c',
-  'acb_hypgeom/0f1.c',
-  'acb_hypgeom/2f1.c',
-  'acb_hypgeom/2f1_choose.c',
-  'acb_hypgeom/2f1_continuation.c',
-  'acb_hypgeom/2f1_corner.c',
-  'acb_hypgeom/2f1_direct.c',
-  'acb_hypgeom/2f1_series_direct.c',
-  'acb_hypgeom/2f1_transform.c',
-  'acb_hypgeom/airy_asymp.c',
-  'acb_hypgeom/airy_bound.c',
-  'acb_hypgeom/airy.c',
-  'acb_hypgeom/airy_direct.c',
-  'acb_hypgeom/airy_jet.c',
-  'acb_hypgeom/airy_series.c',
-  'acb_hypgeom/bessel_i.c',
-  'acb_hypgeom/bessel_j.c',
-  'acb_hypgeom/bessel_k.c',
-  'acb_hypgeom/bessel_y.c',
-  'acb_hypgeom/beta_lower.c',
-  'acb_hypgeom/beta_lower_series.c',
-  'acb_hypgeom/chebyshev_t.c',
-  'acb_hypgeom/chebyshev_u.c',
-  'acb_hypgeom/chi.c',
-  'acb_hypgeom/chi_series.c',
-  'acb_hypgeom/ci.c',
-  'acb_hypgeom/ci_series.c',
-  'acb_hypgeom/coulomb.c',
-  'acb_hypgeom/coulomb_jet.c',
-  'acb_hypgeom/coulomb_series.c',
-  'acb_hypgeom/dilog_bernoulli.c',
-  'acb_hypgeom/dilog_bitburst.c',
-  'acb_hypgeom/dilog.c',
-  'acb_hypgeom/dilog_continuation.c',
-  'acb_hypgeom/dilog_transform.c',
-  'acb_hypgeom/dilog_zero.c',
-  'acb_hypgeom/dilog_zero_taylor.c',
-  'acb_hypgeom/ei.c',
-  'acb_hypgeom/ei_series.c',
-  'acb_hypgeom/erf.c',
-  'acb_hypgeom/erfc.c',
-  'acb_hypgeom/erfc_series.c',
-  'acb_hypgeom/erfi.c',
-  'acb_hypgeom/erfi_series.c',
-  'acb_hypgeom/erf_series.c',
-  'acb_hypgeom/expint.c',
-  'acb_hypgeom/fresnel.c',
-  'acb_hypgeom/fresnel_series.c',
-  'acb_hypgeom/gamma.c',
-  'acb_hypgeom/gamma_lower.c',
-  'acb_hypgeom/gamma_lower_series.c',
-  'acb_hypgeom/gamma_stirling_sum_horner.c',
-  'acb_hypgeom/gamma_stirling_sum_improved.c',
-  'acb_hypgeom/gamma_taylor.c',
-  'acb_hypgeom/gamma_upper.c',
-  'acb_hypgeom/gamma_upper_series.c',
-  'acb_hypgeom/gegenbauer_c.c',
-  'acb_hypgeom/hermite_h.c',
-  'acb_hypgeom/jacobi_p.c',
-  'acb_hypgeom/laguerre_l.c',
-  'acb_hypgeom/legendre_p.c',
-  'acb_hypgeom/legendre_p_uiui_rec.c',
-  'acb_hypgeom/legendre_q.c',
-  'acb_hypgeom/lgamma.c',
-  'acb_hypgeom/li.c',
-  'acb_hypgeom/li_series.c',
-  'acb_hypgeom/log_rising_ui_jet.c',
-  'acb_hypgeom/m.c',
-  'acb_hypgeom/pfq_bound_factor.c',
-  'acb_hypgeom/pfq.c',
-  'acb_hypgeom/pfq_choose_n.c',
-  'acb_hypgeom/pfq_direct.c',
-  'acb_hypgeom/pfq_series_direct.c',
-  'acb_hypgeom/pfq_series_sum_bs.c',
-  'acb_hypgeom/pfq_series_sum.c',
-  'acb_hypgeom/pfq_series_sum_forward.c',
-  'acb_hypgeom/pfq_series_sum_rs.c',
-  'acb_hypgeom/pfq_sum_bs.c',
-  'acb_hypgeom/pfq_sum.c',
-  'acb_hypgeom/pfq_sum_fme.c',
-  'acb_hypgeom/pfq_sum_forward.c',
-  'acb_hypgeom/pfq_sum_rs.c',
-  'acb_hypgeom/rising_ui_bs.c',
-  'acb_hypgeom/rising_ui.c',
-  'acb_hypgeom/rising_ui_forward.c',
-  'acb_hypgeom/rising_ui_jet_bs.c',
-  'acb_hypgeom/rising_ui_jet.c',
-  'acb_hypgeom/rising_ui_jet_powsum.c',
-  'acb_hypgeom/rising_ui_jet_rs.c',
-  'acb_hypgeom/rising_ui_rec.c',
-  'acb_hypgeom/rising_ui_rs.c',
-  'acb_hypgeom/shi.c',
-  'acb_hypgeom/shi_series.c',
-  'acb_hypgeom/si.c',
-  'acb_hypgeom/si_series.c',
-  'acb_hypgeom/spherical_y.c',
-  'acb_hypgeom/u_asymp.c',
-  'acb_hypgeom/u.c',
-  'acb_hypgeom/u_use_asymp.c',
-  'acb/inlines.c',
-  'acb/inv.c',
-  'acb/io.c',
-  'acb/lambertw_asymp.c',
-  'acb/lambertw_bound_deriv.c',
-  'acb/lambertw.c',
-  'acb/lambertw_check_branch.c',
-  'acb/log1p.c',
-  'acb/log.c',
-  'acb/log_sin_pi.c',
-  'acb_mat/add.c',
-  'acb_mat/approx_eig_qr.c',
-  'acb_mat/approx_inv.c',
-  'acb_mat/approx_lu.c',
-  'acb_mat/approx_mul.c',
-  'acb_mat/approx_solve.c',
-  'acb_mat/approx_solve_lu_precomp.c',
-  'acb_mat/approx_solve_tril.c',
-  'acb_mat/approx_solve_triu.c',
-  'acb_mat/bound_frobenius_norm.c',
-  'acb_mat/bound_inf_norm.c',
-  'acb_mat/charpoly.c',
-  'acb_mat/clear.c',
-  'acb_mat/companion.c',
-  'acb_mat/conjugate.c',
-  'acb_mat/contains.c',
-  'acb_mat/contains_fmpq_mat.c',
-  'acb_mat/contains_fmpz_mat.c',
-  'acb_mat/det.c',
-  'acb_mat/det_lu.c',
-  'acb_mat/det_precond.c',
-  'acb_mat/dft.c',
-  'acb_mat/diag_prod.c',
-  'acb_mat/eig_enclosure_rump.c',
-  'acb_mat/eig_global_enclosure.c',
-  'acb_mat/eig_multiple.c',
-  'acb_mat/eig_multiple_rump.c',
-  'acb_mat/eig_simple.c',
-  'acb_mat/eig_simple_rump.c',
-  'acb_mat/eig_simple_vdhoeven_mourrain.c',
-  'acb_mat/eq.c',
-  'acb_mat/equal.c',
-  'acb_mat/exp.c',
-  'acb_mat/exp_taylor_sum.c',
-  'acb_mat/find_pivot_partial.c',
-  'acb_mat/frobenius_norm.c',
-  'acb_mat/get_imag.c',
-  'acb_mat/get_real.c',
-  'acb_mat/indeterminate.c',
-  'acb_mat/init.c',
-  'acb_mat/inlines.c',
-  'acb_mat/inv.c',
-  'acb_mat/io.c',
-  'acb_mat/is_exact.c',
-  'acb_mat/is_finite.c',
-  'acb_mat/is_real.c',
-  'acb_mat/is_tril.c',
-  'acb_mat/is_triu.c',
-  'acb_mat/is_zero.c',
-  'acb_mat/lu.c',
-  'acb_mat/lu_classical.c',
-  'acb_mat/lu_recursive.c',
-  'acb_mat/mul.c',
-  'acb_mat/mul_classical.c',
-  'acb_mat/mul_entrywise.c',
-  'acb_mat/mul_reorder.c',
-  'acb_mat/mul_threaded.c',
-  'acb_mat/ne.c',
-  'acb_mat/neg.c',
-  'acb_mat/one.c',
-  'acb_mat/onei.c',
-  'acb_mat/ones.c',
-  'acb_mat/overlaps.c',
-  'acb_mat/pow_ui.c',
-  'acb_mat/randtest.c',
-  'acb_mat/randtest_eig.c',
-  'acb_mat/set_arb_mat.c',
-  'acb_mat/set.c',
-  'acb_mat/set_fmpq_mat.c',
-  'acb_mat/set_fmpz_mat.c',
-  'acb_mat/set_real_imag.c',
-  'acb_mat/set_round_arb_mat.c',
-  'acb_mat/set_round_fmpz_mat.c',
-  'acb_mat/solve.c',
-  'acb_mat/solve_lu.c',
-  'acb_mat/solve_lu_precomp.c',
-  'acb_mat/solve_precond.c',
-  'acb_mat/solve_tril.c',
-  'acb_mat/solve_triu.c',
-  'acb_mat/sqr.c',
-  'acb_mat/sqr_classical.c',
-  'acb_mat/sub.c',
-  'acb_mat/trace.c',
-  'acb_mat/transpose.c',
-  'acb_mat/vector_mul.c',
-  'acb_mat/window_init.c',
-  'acb_mat/zero.c',
-  'acb_modular/addseq.c',
-  'acb_modular/delta.c',
-  'acb_modular/eisenstein.c',
-  'acb_modular/elliptic_e.c',
-  'acb_modular/elliptic_k.c',
-  'acb_modular/elliptic_k_cpx.c',
-  'acb_modular/elliptic_p.c',
-  'acb_modular/elliptic_p_zpx.c',
-  'acb_modular/epsilon_arg.c',
-  'acb_modular/eta.c',
-  'acb_modular/eta_sum.c',
-  'acb_modular/fill_addseq.c',
-  'acb_modular/fundamental_domain_approx_arf.c',
-  'acb_modular/fundamental_domain_approx.c',
-  'acb_modular/fundamental_domain_approx_d.c',
-  'acb_modular/hilbert_class_poly.c',
-  'acb_modular/inlines.c',
-  'acb_modular/io.c',
-  'acb_modular/is_in_fundamental_domain.c',
-  'acb_modular/j.c',
-  'acb_modular/lambda.c',
-  'acb_modular/psl2z.c',
-  'acb_modular/theta.c',
-  'acb_modular/theta_const_sum_basecase.c',
-  'acb_modular/theta_const_sum.c',
-  'acb_modular/theta_const_sum_rs.c',
-  'acb_modular/theta_jet.c',
-  'acb_modular/theta_jet_notransform.c',
-  'acb_modular/theta_series.c',
-  'acb_modular/theta_sum.c',
-  'acb_modular/theta_transform.c',
-  'acb_modular/transform.c',
-  'acb/mul.c',
-  'acb/mul_naive.c',
-  'acb_poly/add.c',
-  'acb_poly/add_series.c',
-  'acb_poly/add_si.c',
-  'acb_poly/agm1_series.c',
-  'acb_poly/atan_series.c',
-  'acb_poly/binomial_transform_basecase.c',
-  'acb_poly/binomial_transform.c',
-  'acb_poly/binomial_transform_convolution.c',
-  'acb_poly/borel_transform.c',
-  'acb_poly/clear.c',
-  'acb_poly/compose.c',
-  'acb_poly/compose_series.c',
-  'acb_poly/contains.c',
-  'acb_poly/contains_fmpq_poly.c',
-  'acb_poly/contains_fmpz_poly.c',
-  'acb_poly/cosh_series.c',
-  'acb_poly/cos_pi_series.c',
-  'acb_poly/cos_series.c',
-  'acb_poly/cot_pi_series.c',
-  'acb_poly/derivative.c',
-  'acb_poly/digamma_series.c',
-  'acb_poly/divrem.c',
-  'acb_poly/div_root.c',
-  'acb_poly/div_series.c',
-  'acb_poly/elliptic_k_series.c',
-  'acb_poly/elliptic_p_series.c',
-  'acb_poly/equal.c',
-  'acb_poly/erf_series.c',
-  'acb_poly/evaluate2.c',
-  'acb_poly/evaluate2_horner.c',
-  'acb_poly/evaluate2_rectangular.c',
-  'acb_poly/evaluate.c',
-  'acb_poly/evaluate_horner.c',
-  'acb_poly/evaluate_rectangular.c',
-  'acb_poly/evaluate_vec_fast.c',
-  'acb_poly/evaluate_vec_iter.c',
-  'acb_poly/exp_pi_i_series.c',
-  'acb_poly/exp_series_basecase.c',
-  'acb_poly/exp_series.c',
-  'acb_poly/find_roots.c',
-  'acb_poly/fit_length.c',
-  'acb/polygamma.c',
-  'acb_poly/gamma_series.c',
-  'acb_poly/get_coeff_acb.c',
-  'acb_poly/get_unique_fmpz_poly.c',
-  'acb_poly/graeffe_transform.c',
-  'acb_poly/init.c',
-  'acb_poly/inlines.c',
-  'acb_poly/integral.c',
-  'acb_poly/interpolate_barycentric.c',
-  'acb_poly/interpolate_fast.c',
-  'acb_poly/interpolate_newton.c',
-  'acb_poly/inv_borel_transform.c',
-  'acb_poly/inv_series.c',
-  'acb_poly/io.c',
-  'acb_poly/lambertw_series.c',
-  'acb_poly/lgamma_series.c',
-  'acb_poly/log1p_series.c',
-  'acb/polylog.c',
-  'acb_poly/log_series.c',
-  'acb_poly/majorant.c',
-  'acb_poly/mul.c',
-  'acb_poly/mullow.c',
-  'acb_poly/mullow_classical.c',
-  'acb_poly/mullow_transpose.c',
-  'acb_poly/mullow_transpose_gauss.c',
-  'acb_poly/normalise.c',
-  'acb_poly/nth_derivative.c',
-  'acb_poly/overlaps.c',
-  'acb_poly/polylog_series.c',
-  'acb_poly/pow_acb_series.c',
-  'acb_poly/pow_series.c',
-  'acb_poly/powsum_one_series_sieved.c',
-  'acb_poly/powsum_series_naive.c',
-  'acb_poly/powsum_series_naive_threaded.c',
-  'acb_poly/pow_ui.c',
-  'acb_poly/pow_ui_trunc_binexp.c',
-  'acb_poly/product_roots.c',
-  'acb_poly/randtest.c',
-  'acb_poly/refine_roots_durand_kerner.c',
-  'acb_poly/reverse.c',
-  'acb_poly/revert_series.c',
-  'acb_poly/rgamma_series.c',
-  'acb_poly/rising_ui_series.c',
-  'acb_poly/root_bound_fujiwara.c',
-  'acb_poly/root_inclusion.c',
-  'acb_poly/rsqrt_series.c',
-  'acb_poly/set2_arb_poly.c',
-  'acb_poly/set2_fmpq_poly.c',
-  'acb_poly/set2_fmpz_poly.c',
-  'acb_poly/set.c',
-  'acb_poly/set_coeff_acb.c',
-  'acb_poly/set_coeff_si.c',
-  'acb_poly/set_fmpz_poly.c',
-  'acb_poly/set_length.c',
-  'acb_poly/set_round.c',
-  'acb_poly/set_si.c',
-  'acb_poly/set_trunc.c',
-  'acb_poly/set_trunc_round.c',
-  'acb_poly/shift_left.c',
-  'acb_poly/shift_right.c',
-  'acb_poly/sin_cos_series.c',
-  'acb_poly/sinc_series.c',
-  'acb_poly/sinh_cosh_series_basecase.c',
-  'acb_poly/sinh_cosh_series.c',
-  'acb_poly/sinh_cosh_series_exponential.c',
-  'acb_poly/sinh_series.c',
-  'acb_poly/sin_pi_series.c',
-  'acb_poly/sin_series.c',
-  'acb_poly/sqrt_series.c',
-  'acb_poly/sub.c',
-  'acb_poly/sub_series.c',
-  'acb_poly/tan_series.c',
-  'acb_poly/taylor_shift.c',
-  'acb_poly/tree.c',
-  'acb_poly/validate_real_roots.c',
-  'acb_poly/validate_roots.c',
-  'acb_poly/valuation.c',
-  'acb_poly/zeta_em_bound.c',
-  'acb_poly/zeta_em_choose_param.c',
-  'acb_poly/zeta_em_sum.c',
-  'acb_poly/zeta_em_tail_bsplit.c',
-  'acb_poly/zeta_em_tail_naive.c',
-  'acb_poly/zeta_series.c',
-  'acb/pow.c',
-  'acb/quadratic_roots_fmpz.c',
-  'acb/randtest.c',
-  'acb/real_abs.c',
-  'acb/real_ceil.c',
-  'acb/real_floor.c',
-  'acb/real_heaviside.c',
-  'acb/real_max.c',
-  'acb/real_min.c',
-  'acb/real_sgn.c',
-  'acb/real_sqrtpos.c',
-  'acb/rel_error_bits.c',
-  'acb/rising2_ui.c',
-  'acb/rising_ui.c',
-  'acb/rising_ui_get_mag.c',
-  'acb/root_ui.c',
-  'acb/rsqrt.c',
-  'acb/sech.c',
-  'acb/sgn.c',
-  'acb/sin.c',
-  'acb/sinc.c',
-  'acb/sin_cos.c',
-  'acb/sin_cos_pi.c',
-  'acb/sinc_pi.c',
-  'acb/sin_pi.c',
-  'acb/sqrt.c',
-  'acb/sqrts.c',
-  'acb/submul.c',
-  'acb/tan.c',
-  'acb/tan_pi.c',
-  'acb_theta/agm_hadamard.c',
-  'acb_theta/agm_mul.c',
-  'acb_theta/agm_mul_tight.c',
-  'acb_theta/agm_sqrt.c',
-  'acb_theta/all.c',
-  'acb_theta/char_dot_acb.c',
-  'acb_theta/char_dot.c',
-  'acb_theta/char_dot_slong.c',
-  'acb_theta/char_get_a.c',
-  'acb_theta/char_get_acb.c',
-  'acb_theta/char_get_arb.c',
-  'acb_theta/char_get_slong.c',
-  'acb_theta/char_is_even.c',
-  'acb_theta/char_is_goepel.c',
-  'acb_theta/char_is_syzygous.c',
-  'acb_theta/dist_a0.c',
-  'acb_theta/dist_addprec.c',
-  'acb_theta/dist_lat.c',
-  'acb_theta/dist_pt.c',
-  'acb_theta/eld_border.c',
-  'acb_theta/eld_clear.c',
-  'acb_theta/eld_contains.c',
-  'acb_theta/eld_init.c',
-  'acb_theta/eld_points.c',
-  'acb_theta/eld_print.c',
-  'acb_theta/eld_set.c',
-  'acb_theta/g2_character.c',
-  'acb_theta/g2_chi10.c',
-  'acb_theta/g2_chi12.c',
-  'acb_theta/g2_chi35.c',
-  'acb_theta/g2_chi3_6.c',
-  'acb_theta/g2_chi5.c',
-  'acb_theta/g2_covariants.c',
-  'acb_theta/g2_covariants_lead.c',
-  'acb_theta/g2_detk_symj.c',
-  'acb_theta/g2_jet_naive_1.c',
-  'acb_theta/g2_psi4.c',
-  'acb_theta/g2_psi6.c',
-  'acb_theta/g2_sextic.c',
-  'acb_theta/g2_sextic_chi5.c',
-  'acb_theta/g2_transvectant.c',
-  'acb_theta/g2_transvectant_lead.c',
-  'acb_theta/jet_all.c',
-  'acb_theta/jet_compose.c',
-  'acb_theta/jet_error_bounds.c',
-  'acb_theta/jet_exp_pi_i.c',
-  'acb_theta/jet_index.c',
-  'acb_theta/jet_mul.c',
-  'acb_theta/jet_naive_00.c',
-  'acb_theta/jet_naive_all.c',
-  'acb_theta/jet_naive_fixed_ab.c',
-  'acb_theta/jet_naive_radius.c',
-  'acb_theta/jet_nb.c',
-  'acb_theta/jet_ql_all.c',
-  'acb_theta/jet_ql_bounds.c',
-  'acb_theta/jet_ql_finite_diff.c',
-  'acb_theta/jet_ql_radius.c',
-  'acb_theta/jet_total_order.c',
-  'acb_theta/jet_tuples.c',
-  'acb_theta/naive_00.c',
-  'acb_theta/naive_0b.c',
-  'acb_theta/naive_all.c',
-  'acb_theta/naive_fixed_ab.c',
-  'acb_theta/naive_fixed_a.c',
-  'acb_theta/naive_radius.c',
-  'acb_theta/naive_reduce.c',
-  'acb_theta/naive_term.c',
-  'acb_theta/naive_worker.c',
-  'acb_theta/ql_a0.c',
-  'acb_theta/ql_a0_naive.c',
-  'acb_theta/ql_a0_nb_steps.c',
-  'acb_theta/ql_a0_split.c',
-  'acb_theta/ql_a0_steps.c',
-  'acb_theta/ql_all.c',
-  'acb_theta/ql_reduce.c',
-  'acb_theta/siegel_cho.c',
-  'acb_theta/siegel_cocycle.c',
-  'acb_theta/siegel_is_reduced.c',
-  'acb_theta/siegel_randtest.c',
-  'acb_theta/siegel_randtest_reduced.c',
-  'acb_theta/siegel_randtest_vec.c',
-  'acb_theta/siegel_reduce.c',
-  'acb_theta/siegel_transform.c',
-  'acb_theta/siegel_transform_cocycle_inv.c',
-  'acb_theta/siegel_transform_z.c',
-  'acb_theta/siegel_yinv.c',
-  'acb_theta/sp2gz_block_diag.c',
-  'acb_theta/sp2gz_decompose.c',
-  'acb_theta/sp2gz_embed.c',
-  'acb_theta/sp2gz_fundamental.c',
-  'acb_theta/sp2gz_inv.c',
-  'acb_theta/sp2gz_is_block_diag.c',
-  'acb_theta/sp2gz_is_correct.c',
-  'acb_theta/sp2gz_is_embedded.c',
-  'acb_theta/sp2gz_is_j.c',
-  'acb_theta/sp2gz_is_trig.c',
-  'acb_theta/sp2gz_j.c',
-  'acb_theta/sp2gz_nb_fundamental.c',
-  'acb_theta/sp2gz_randtest.c',
-  'acb_theta/sp2gz_restrict.c',
-  'acb_theta/sp2gz_set_blocks.c',
-  'acb_theta/sp2gz_trig.c',
-  'acb_theta/transform_char.c',
-  'acb_theta/transform_kappa2.c',
-  'acb_theta/transform_kappa.c',
-  'acb_theta/transform_proj.c',
-  'acb_theta/transform_sqrtdet.c',
-  'acb/unit_root.c',
-  'acb/urandom.c',
-  'acb/vec_clear.c',
-  'acb/vec_init.c',
-  'acb/vec_set_powers.c',
-  'acb/vec_sort_pretty.c',
-  'acb/vec_unit_roots.c',
-  'acb/zeta.c',
-  'acf/approx_div.c',
-  'acf/approx_dot.c',
-  'acf/approx_sqrt.c',
-  'acf/inlines.c',
-  'aprcl/config_gauss.c',
-  'aprcl/config_jacobi.c',
-  'aprcl/f_table.c',
-  'aprcl/is_mul_coprime.c',
-  'aprcl/is_prime.c',
-  'aprcl/is_prime_final_division.c',
-  'aprcl/is_prime_gauss.c',
-  'aprcl/is_prime_jacobi.c',
-  'aprcl/unity_zp_add.c',
-  'aprcl/unity_zp_aut.c',
-  'aprcl/unity_zp_aut_inv.c',
-  'aprcl/unity_zp_auxiliary_routine.c',
-  'aprcl/unity_zp_coeff.c',
-  'aprcl/unity_zp_copy.c',
-  'aprcl/unity_zp_equal.c',
-  'aprcl/unity_zp_init.c',
-  'aprcl/unity_zp_is_unity.c',
-  'aprcl/unity_zp_jacobi_sum.c',
-  'aprcl/unity_zp_mul.c',
-  'aprcl/unity_zp_pow_2k.c',
-  'aprcl/unity_zp_pow.c',
-  'aprcl/unity_zp_pow_select_k.c',
-  'aprcl/unity_zp_pow_sliding.c',
-  'aprcl/unity_zpq_add.c',
-  'aprcl/unity_zpq_clear.c',
-  'aprcl/unity_zpq_coeff_add.c',
-  'aprcl/unity_zpq_coeff_set.c',
-  'aprcl/unity_zpq_copy.c',
-  'aprcl/unity_zpq_equal.c',
-  'aprcl/unity_zpq_gauss_sum.c',
-  'aprcl/unity_zpq_gauss_sum_character_pow.c',
-  'aprcl/unity_zpq_init.c',
-  'aprcl/unity_zpq_mul.c',
-  'aprcl/unity_zpq_mul_unity_p.c',
-  'aprcl/unity_zpq_pow.c',
-  'aprcl/unity_zpq_swap.c',
-  'aprcl/unity_zp_reduce_cyclotomic.c',
-  'aprcl/unity_zp_set_zero.c',
-  'aprcl/unity_zp_sqr.c',
-  'aprcl/unity_zp_swap.c',
-  'aprcl/utility.c',
-  'arb/abs.c',
-  'arb/acos.c',
-  'arb/acosh.c',
-  'arb/add.c',
-  'arb/add_error.c',
-  'arb/addmul.c',
-  'arb/agm.c',
-  'arb/approx_dot.c',
-  'arb/asin.c',
-  'arb/asinh.c',
-  'arb/atan2.c',
-  'arb/atan_arf_bb.c',
-  'arb/atan_arf.c',
-  'arb/atan.c',
-  'arb/atan_frac_bsplit.c',
-  'arb/atanh.c',
-  'arb/atan_newton.c',
-  'arb/atan_sum_bs_powtab.c',
-  'arb/atan_sum_bs_simple.c',
-  'arb/atan_tab.c',
-  'arb/atan_taylor_naive.c',
-  'arb/atan_taylor_rs.c',
-  'arb/bell_fmpz.c',
-  'arb/bell_sum_bsplit.c',
-  'arb/bell_sum_taylor.c',
-  'arb/bernoulli_fmpz.c',
-  'arb/bernoulli_poly_ui.c',
-  'arb/bernoulli_ui.c',
-  'arb/bernoulli_ui_zeta.c',
-  'arb/bin.c',
-  'arb_calc/io.c',
-  'arb_calc/isolate_roots.c',
-  'arb_calc/newton_conv_factor.c',
-  'arb_calc/newton_step.c',
-  'arb_calc/refine_root_bisect.c',
-  'arb_calc/refine_root_newton.c',
-  'arb_calc/verbose.c',
-  'arb/can_round_mpfr.c',
-  'arb/ceil.c',
-  'arb/chebyshev_t_ui.c',
-  'arb/chebyshev_u_ui.c',
-  'arb/clear.c',
-  'arb/const_apery.c',
-  'arb/const_catalan.c',
-  'arb/const_e.c',
-  'arb/const_euler.c',
-  'arb/const_glaisher.c',
-  'arb/const_khinchin.c',
-  'arb/const_log10.c',
-  'arb/const_log2.c',
-  'arb/const_log_sqrt2pi.c',
-  'arb/const_pi.c',
-  'arb/const_reciprocal_fibonacci.c',
-  'arb/const_sqrt_pi.c',
-  'arb/contains.c',
-  'arb/cot.c',
-  'arb/coth.c',
-  'arb/cot_pi.c',
-  'arb/csc.c',
-  'arb/csch.c',
-  'arb/csc_pi.c',
-  'arb/digamma.c',
-  'arb/div_2expm1_ui.c',
-  'arb/div.c',
-  'arb/dot.c',
-  'arb/dot_fmpz.c',
-  'arb/dot_precise.c',
-  'arb/dot_si.c',
-  'arb/dot_simple.c',
-  'arb/dot_siui.c',
-  'arb/dot_ui.c',
-  'arb/dot_uiui.c',
-  'arb/doublefac_ui.c',
-  'arb/euler_number_fmpz.c',
-  'arb/euler_number_ui.c',
-  'arb/exp_arf_bb.c',
-  'arb/exp_arf.c',
-  'arb/exp_arf_rs_generic.c',
-  'arb/exp.c',
-  'arb/exp_sum_bs_powtab.c',
-  'arb/exp_sum_bs_simple.c',
-  'arb/exp_tab.c',
-  'arb/exp_taylor_bound.c',
-  'arb/exp_taylor_naive.c',
-  'arb/exp_taylor_rs.c',
-  'arb/fac.c',
-  'arb/fib.c',
-  'arb/floor.c',
-  'arb/fma.c',
-  'arb_fmpz_poly/complex_roots.c',
-  'arb_fmpz_poly/deflate.c',
-  'arb_fmpz_poly/deflation.c',
-  'arb_fmpz_poly/evaluate_acb.c',
-  'arb_fmpz_poly/evaluate_acb_horner.c',
-  'arb_fmpz_poly/evaluate_acb_rectangular.c',
-  'arb_fmpz_poly/evaluate_arb.c',
-  'arb_fmpz_poly/evaluate_arb_horner.c',
-  'arb_fmpz_poly/evaluate_arb_rectangular.c',
-  'arb_fmpz_poly/gauss_period_minpoly.c',
-  'arb_fpwrap/fpwrap.c',
-  'arb/gamma.c',
-  'arb/get_abs_lbound_arf.c',
-  'arb/get_abs_ubound_arf.c',
-  'arb/get_fmpz_mid_rad_10exp.c',
-  'arb/get_interval_arf.c',
-  'arb/get_interval_fmpz_2exp.c',
-  'arb/get_interval_mpfr.c',
-  'arb/get_lbound_arf.c',
-  'arb/get_mag_lower.c',
-  'arb/get_mag_lower_nonnegative.c',
-  'arb/get_mpn_fixed_mod_log2.c',
-  'arb/get_mpn_fixed_mod_pi4.c',
-  'arb/get_rand_fmpq.c',
-  'arb/get_str.c',
-  'arb/get_ubound_arf.c',
-  'arb/get_unique_fmpz.c',
-  'arb/hurwitz_zeta.c',
-  'arb_hypgeom/1f1_integration.c',
-  'arb_hypgeom/2f1_integration.c',
-  'arb_hypgeom/airy.c',
-  'arb_hypgeom/airy_jet.c',
-  'arb_hypgeom/airy_series.c',
-  'arb_hypgeom/airy_zero.c',
-  'arb_hypgeom/bessel_i_integration.c',
-  'arb_hypgeom/bessel_k_integration.c',
-  'arb_hypgeom/beta_lower_series.c',
-  'arb_hypgeom/central_bin_ui.c',
-  'arb_hypgeom/chi_series.c',
-  'arb_hypgeom/ci.c',
-  'arb_hypgeom/ci_series.c',
-  'arb_hypgeom/coulomb.c',
-  'arb_hypgeom/coulomb_jet.c',
-  'arb_hypgeom/coulomb_series.c',
-  'arb_hypgeom/ei_series.c',
-  'arb_hypgeom/erf.c',
-  'arb_hypgeom/erfc_series.c',
-  'arb_hypgeom/erfinv.c',
-  'arb_hypgeom/erfi_series.c',
-  'arb_hypgeom/erf_series.c',
-  'arb_hypgeom/fresnel_series.c',
-  'arb_hypgeom/gamma.c',
-  'arb_hypgeom/gamma_fmpq.c',
-  'arb_hypgeom/gamma_lower_series.c',
-  'arb_hypgeom/gamma_lower_sum_rs.c',
-  'arb_hypgeom/gamma_stirling_sum_horner.c',
-  'arb_hypgeom/gamma_stirling_sum_improved.c',
-  'arb_hypgeom/gamma_stirling_term_bounds.c',
-  'arb_hypgeom/gamma_tab.c',
-  'arb_hypgeom/gamma_taylor.c',
-  'arb_hypgeom/gamma_upper_fmpq.c',
-  'arb_hypgeom/gamma_upper_fmpq_step_bsplit.c',
-  'arb_hypgeom/gamma_upper_integration.c',
-  'arb_hypgeom/gamma_upper_series.c',
-  'arb_hypgeom/gamma_upper_sum_rs.c',
-  'arb_hypgeom/legendre_p.c',
-  'arb_hypgeom/legendre_p_ui_asymp.c',
-  'arb_hypgeom/legendre_p_ui.c',
-  'arb_hypgeom/legendre_p_ui_one.c',
-  'arb_hypgeom/legendre_p_ui_rec.c',
-  'arb_hypgeom/legendre_p_ui_root.c',
-  'arb_hypgeom/legendre_p_ui_zero.c',
-  'arb_hypgeom/lgamma.c',
-  'arb_hypgeom/li_series.c',
-  'arb_hypgeom/rising_ui_bs.c',
-  'arb_hypgeom/rising_ui.c',
-  'arb_hypgeom/rising_ui_forward.c',
-  'arb_hypgeom/rising_ui_jet_bs.c',
-  'arb_hypgeom/rising_ui_jet.c',
-  'arb_hypgeom/rising_ui_jet_powsum.c',
-  'arb_hypgeom/rising_ui_jet_rs.c',
-  'arb_hypgeom/rising_ui_rec.c',
-  'arb_hypgeom/rising_ui_rs.c',
-  'arb_hypgeom/shi_series.c',
-  'arb_hypgeom/si.c',
-  'arb_hypgeom/si_series.c',
-  'arb_hypgeom/sum_fmpq_arb_bs.c',
-  'arb_hypgeom/sum_fmpq_arb.c',
-  'arb_hypgeom/sum_fmpq_arb_forward.c',
-  'arb_hypgeom/sum_fmpq_arb_rs.c',
-  'arb_hypgeom/sum_fmpq_imag_arb_bs.c',
-  'arb_hypgeom/sum_fmpq_imag_arb.c',
-  'arb_hypgeom/sum_fmpq_imag_arb_forward.c',
-  'arb_hypgeom/sum_fmpq_imag_arb_rs.c',
-  'arb_hypgeom/u_integration.c',
-  'arb_hypgeom/wrappers.c',
-  'arb/hypot.c',
-  'arb/indeterminate.c',
-  'arb/inlines.c',
-  'arb/intersection.c',
-  'arb/io.c',
-  'arb/is_finite.c',
-  'arb/lambertw.c',
-  'arb/log1p.c',
-  'arb/log_arf.c',
-  'arb/log_base_ui.c',
-  'arb/log.c',
-  'arb/log_hypot.c',
-  'arb/log_newton.c',
-  'arb/log_precompute_reductions.c',
-  'arb/log_primes.c',
-  'arb/log_reduce.c',
-  'arb/log_tab.c',
-  'arb/log_ui.c',
-  'arb_mat/add.c',
-  'arb_mat/addmul_rad_mag_fast.c',
-  'arb_mat/approx_inv.c',
-  'arb_mat/approx_lu.c',
-  'arb_mat/approx_mul.c',
-  'arb_mat/approx_solve.c',
-  'arb_mat/approx_solve_lu_precomp.c',
-  'arb_mat/approx_solve_tril.c',
-  'arb_mat/approx_solve_triu.c',
-  'arb_mat/bound_frobenius_norm.c',
-  'arb_mat/bound_inf_norm.c',
-  'arb_mat/charpoly.c',
-  'arb_mat/cho.c',
-  'arb_mat/clear.c',
-  'arb_mat/companion.c',
-  'arb_mat/contains.c',
-  'arb_mat/contains_fmpq_mat.c',
-  'arb_mat/contains_fmpz_mat.c',
-  'arb_mat/count_is_zero.c',
-  'arb_mat/dct.c',
-  'arb_mat/det.c',
-  'arb_mat/det_lu.c',
-  'arb_mat/det_precond.c',
-  'arb_mat/diag_prod.c',
-  'arb_mat/entrywise_is_zero.c',
-  'arb_mat/entrywise_not_is_zero.c',
-  'arb_mat/eq.c',
-  'arb_mat/equal.c',
-  'arb_mat/exp.c',
-  'arb_mat/exp_taylor_sum.c',
-  'arb_mat/find_pivot_partial.c',
-  'arb_mat/frobenius_norm.c',
-  'arb_mat/hilbert.c',
-  'arb_mat/indeterminate.c',
-  'arb_mat/init.c',
-  'arb_mat/inlines.c',
-  'arb_mat/inv.c',
-  'arb_mat/inv_cho_precomp.c',
-  'arb_mat/inv_ldl_precomp.c',
-  'arb_mat/io.c',
-  'arb_mat/is_exact.c',
-  'arb_mat/is_finite.c',
-  'arb_mat/is_tril.c',
-  'arb_mat/is_triu.c',
-  'arb_mat/is_zero.c',
-  'arb_mat/ldl.c',
-  'arb_mat/lu.c',
-  'arb_mat/lu_classical.c',
-  'arb_mat/lu_recursive.c',
-  'arb_mat/mul_block.c',
-  'arb_mat/mul.c',
-  'arb_mat/mul_classical.c',
-  'arb_mat/mul_entrywise.c',
-  'arb_mat/mul_threaded.c',
-  'arb_mat/ne.c',
-  'arb_mat/neg.c',
-  'arb_mat/one.c',
-  'arb_mat/ones.c',
-  'arb_mat/overlaps.c',
-  'arb_mat/pascal.c',
-  'arb_mat/pow_ui.c',
-  'arb_mat/randtest.c',
-  'arb_mat/randtest_cho.c',
-  'arb_mat/randtest_spd.c',
-  'arb_mat/set.c',
-  'arb_mat/set_fmpq_mat.c',
-  'arb_mat/set_fmpz_mat.c',
-  'arb_mat/set_round_fmpz_mat.c',
-  'arb_mat/solve.c',
-  'arb_mat/solve_cho_precomp.c',
-  'arb_mat/solve_ldl_precomp.c',
-  'arb_mat/solve_lu.c',
-  'arb_mat/solve_lu_precomp.c',
-  'arb_mat/solve_preapprox.c',
-  'arb_mat/solve_precond.c',
-  'arb_mat/solve_tril.c',
-  'arb_mat/solve_triu.c',
-  'arb_mat/spd_get_fmpz_mat.c',
-  'arb_mat/spd_inv.c',
-  'arb_mat/spd_is_lll_reduced.c',
-  'arb_mat/spd_lll_reduce.c',
-  'arb_mat/spd_solve.c',
-  'arb_mat/sqr.c',
-  'arb_mat/sqr_classical.c',
-  'arb_mat/stirling.c',
-  'arb_mat/sub.c',
-  'arb_mat/trace.c',
-  'arb_mat/transpose.c',
-  'arb_mat/vector_mul.c',
-  'arb_mat/window_init.c',
-  'arb_mat/zero.c',
-  'arb/max.c',
-  'arb/min.c',
-  'arb/minmax.c',
-  'arb/mul_2exp_si.c',
-  'arb/mul.c',
-  'arb/neg.c',
-  'arb/neg_round.c',
-  'arb/nint.c',
-  'arb/nonnegative_abs.c',
-  'arb/nonnegative_part.c',
-  'arb/one.c',
-  'arb/overlaps.c',
-  'arb/partitions_fmpz.c',
-  'arb_poly/acos_series.c',
-  'arb_poly/add.c',
-  'arb_poly/add_series.c',
-  'arb_poly/add_si.c',
-  'arb_poly/asin_series.c',
-  'arb_poly/atan_series.c',
-  'arb_poly/binomial_transform_basecase.c',
-  'arb_poly/binomial_transform.c',
-  'arb_poly/binomial_transform_convolution.c',
-  'arb_poly/borel_transform.c',
-  'arb_poly/clear.c',
-  'arb_poly/compose.c',
-  'arb_poly/compose_series.c',
-  'arb_poly/contains.c',
-  'arb_poly/contains_fmpq_poly.c',
-  'arb_poly/contains_fmpz_poly.c',
-  'arb_poly/cosh_series.c',
-  'arb_poly/cos_pi_series.c',
-  'arb_poly/cos_series.c',
-  'arb_poly/cot_pi_series.c',
-  'arb_poly/derivative.c',
-  'arb_poly/digamma_series.c',
-  'arb_poly/divrem.c',
-  'arb_poly/div_root.c',
-  'arb_poly/div_series.c',
-  'arb_poly/equal.c',
-  'arb_poly/evaluate2_acb.c',
-  'arb_poly/evaluate2_acb_horner.c',
-  'arb_poly/evaluate2_acb_rectangular.c',
-  'arb_poly/evaluate2.c',
-  'arb_poly/evaluate2_horner.c',
-  'arb_poly/evaluate2_rectangular.c',
-  'arb_poly/evaluate_acb.c',
-  'arb_poly/evaluate_acb_horner.c',
-  'arb_poly/evaluate_acb_rectangular.c',
-  'arb_poly/evaluate.c',
-  'arb_poly/evaluate_horner.c',
-  'arb_poly/evaluate_rectangular.c',
-  'arb_poly/evaluate_vec_fast.c',
-  'arb_poly/evaluate_vec_iter.c',
-  'arb_poly/exp_series_basecase.c',
-  'arb_poly/exp_series.c',
-  'arb_poly/fit_length.c',
-  'arb_poly/gamma_series.c',
-  'arb_poly/get_coeff_arb.c',
-  'arb_poly/get_unique_fmpz_poly.c',
-  'arb_poly/graeffe_transform.c',
-  'arb_poly/init.c',
-  'arb_poly/inlines.c',
-  'arb_poly/integral.c',
-  'arb_poly/interpolate_barycentric.c',
-  'arb_poly/interpolate_fast.c',
-  'arb_poly/interpolate_newton.c',
-  'arb_poly/inv_borel_transform.c',
-  'arb_poly/inv_series.c',
-  'arb_poly/io.c',
-  'arb_poly/lambertw_series.c',
-  'arb_poly/lgamma_series.c',
-  'arb_poly/log1p_series.c',
-  'arb/polylog.c',
-  'arb_poly/log_series.c',
-  'arb_poly/majorant.c',
-  'arb_poly/mul.c',
-  'arb_poly/mullow_block.c',
-  'arb_poly/mullow.c',
-  'arb_poly/mullow_classical.c',
-  'arb_poly/newton_convergence_factor.c',
-  'arb_poly/newton_refine_root.c',
-  'arb_poly/newton_step.c',
-  'arb_poly/normalise.c',
-  'arb_poly/nth_derivative.c',
-  'arb_poly/overlaps.c',
-  'arb_poly/pow_arb_series.c',
-  'arb_poly/pow_series.c',
-  'arb_poly/pow_ui.c',
-  'arb_poly/pow_ui_trunc_binexp.c',
-  'arb_poly/product_roots.c',
-  'arb_poly/product_roots_complex.c',
-  'arb_poly/randtest.c',
-  'arb_poly/reverse.c',
-  'arb_poly/revert_series.c',
-  'arb_poly/rgamma_series.c',
-  'arb_poly/riemann_siegel_theta_series.c',
-  'arb_poly/riemann_siegel_z_series.c',
-  'arb_poly/rising_ui_series.c',
-  'arb_poly/root_bound_fujiwara.c',
-  'arb_poly/rsqrt_series.c',
-  'arb_poly/set.c',
-  'arb_poly/set_coeff_arb.c',
-  'arb_poly/set_coeff_si.c',
-  'arb_poly/set_fmpq_poly.c',
-  'arb_poly/set_fmpz_poly.c',
-  'arb_poly/set_length.c',
-  'arb_poly/set_round.c',
-  'arb_poly/set_si.c',
-  'arb_poly/set_trunc.c',
-  'arb_poly/set_trunc_round.c',
-  'arb_poly/shift_left.c',
-  'arb_poly/shift_right.c',
-  'arb_poly/sin_cos_series.c',
-  'arb_poly/sinc_pi_series.c',
-  'arb_poly/sinc_series.c',
-  'arb_poly/sinh_cosh_series_basecase.c',
-  'arb_poly/sinh_cosh_series.c',
-  'arb_poly/sinh_cosh_series_exponential.c',
-  'arb_poly/sinh_series.c',
-  'arb_poly/sin_pi_series.c',
-  'arb_poly/sin_series.c',
-  'arb_poly/sqrt_series.c',
-  'arb_poly/sub.c',
-  'arb_poly/sub_series.c',
-  'arb_poly/swinnerton_dyer_ui.c',
-  'arb_poly/tan_series.c',
-  'arb_poly/taylor_shift.c',
-  'arb_poly/tree.c',
-  'arb_poly/valuation.c',
-  'arb_poly/zeta_series.c',
-  'arb/pow.c',
-  'arb/power_sum_vec.c',
-  'arb/pow_fmpq.c',
-  'arb/pow_fmpz_binexp.c',
-  'arb/pow_fmpz.c',
-  'arb/primorial.c',
-  'arb/randtest.c',
-  'arb/rel_error_bits.c',
-  'arb/richcmp.c',
-  'arb/rising2_ui.c',
-  'arb/rising_fmpq_ui.c',
-  'arb/rising_ui.c',
-  'arb/root_ui.c',
-  'arb/sec.c',
-  'arb/sech.c',
-  'arb/set.c',
-  'arb/set_interval.c',
-  'arb/set_round.c',
-  'arb/set_str.c',
-  'arb/sgn.c',
-  'arb/sgn_nonzero.c',
-  'arb/sinc.c',
-  'arb/sin_cos_arf_bb.c',
-  'arb/sin_cos_arf_generic.c',
-  'arb/sin_cos.c',
-  'arb/sin_cos_generic.c',
-  'arb/sin_cos_pi.c',
-  'arb/sin_cos_pi_fmpq_algebraic.c',
-  'arb/sin_cos_pi_fmpq.c',
-  'arb/sin_cos_tab.c',
-  'arb/sin_cos_taylor_naive.c',
-  'arb/sin_cos_taylor_rs.c',
-  'arb/sin_cos_wide.c',
-  'arb/sinc_pi.c',
-  'arb/sinh_cosh.c',
-  'arb/sqrt1pm1.c',
-  'arb/sqrt.c',
-  'arb/sqrtpos.c',
-  'arb/sub.c',
-  'arb/submul.c',
-  'arb/tan.c',
-  'arb/tanh.c',
-  'arb/tan_pi.c',
-  'arb/trim.c',
-  'arb/trunc.c',
-  'arb/ui_pow_ui.c',
-  'arb/union.c',
-  'arb/urandom.c',
-  'arb/vec_clear.c',
-  'arb/vec_get_mag.c',
-  'arb/vec_init.c',
-  'arb/vec_set_powers.c',
-  'arb/zero.c',
-  'arb/zeta.c',
-  'arb/zeta_ui_bernoulli.c',
-  'arb/zeta_ui_borwein_bsplit.c',
-  'arb/zeta_ui.c',
-  'arb/zeta_ui_euler_product.c',
-  'arb/zeta_ui_vec_borwein.c',
-  'arb/zeta_ui_vec.c',
-  'arb/zeta_ui_vec_even.c',
-  'arb/zeta_ui_vec_odd.c',
-  'arf/abs_bound_lt_2exp_si.c',
-  'arf/add.c',
-  'arf/add_mpn.c',
-  'arf/addmul.c',
-  'arf/approx_dot.c',
-  'arf/call_mpfr_func.c',
-  'arf/ceil.c',
-  'arf/clear.c',
-  'arf/cmp.c',
-  'arf/complex_mul.c',
-  'arf/debug.c',
-  'arf/div.c',
-  'arf/equal.c',
-  'arf/floor.c',
-  'arf/fma.c',
-  'arf/frexp.c',
-  'arf/get.c',
-  'arf/inlines.c',
-  'arf/io.c',
-  'arf/is_int_2exp_si.c',
-  'arf/is_int.c',
-  'arf/memory_manager.c',
-  'arf/mul_rnd_any.c',
-  'arf/mul_rnd_down.c',
-  'arf/mul_special.c',
-  'arf/mul_tmp_cleanup.c',
-  'arf/mul_via_mpfr.c',
-  'arf/neg_round.c',
-  'arf/randtest.c',
-  'arf/root.c',
-  'arf/rsqrt.c',
-  'arf/set.c',
-  'arf/set_round.c',
-  'arf/sosq.c',
-  'arf/sqrt.c',
-  'arf/sub.c',
-  'arf/submul.c',
-  'arf/sum.c',
-  'arf/urandom.c',
-  'arith/bell_number.c',
-  'arith/bell_number_dobinski.c',
-  'arith/bell_number_multi_mod.c',
-  'arith/bell_number_nmod.c',
-  'arith/bell_number_nmod_vec.c',
-  'arith/bell_number_nmod_vec_ogf.c',
-  'arith/bell_number_nmod_vec_recursive.c',
-  'arith/bell_number_nmod_vec_series.c',
-  'arith/bell_number_size.c',
-  'arith/bell_number_vec.c',
-  'arith/bell_number_vec_multi_mod.c',
-  'arith/bell_number_vec_recursive.c',
-  'arith/bernoulli_number.c',
-  'arith/bernoulli_number_denom.c',
-  'arith/bernoulli_number_size.c',
-  'arith/bernoulli_number_vec.c',
-  'arith/bernoulli_number_vec_multi_mod.c',
-  'arith/bernoulli_number_vec_recursive.c',
-  'arith/bernoulli_polynomial.c',
-  'arith/dedekind_cosine_sum_factored.c',
-  'arith/divisors.c',
-  'arith/euler_number.c',
-  'arith/euler_number_size.c',
-  'arith/euler_number_vec.c',
-  'arith/euler_polynomial.c',
-  'arith/harmonic_number.c',
-  'arith/landau_function_vec.c',
-  'arith/number_of_partitions.c',
-  'arith/number_of_partitions_nmod_vec.c',
-  'arith/number_of_partitions_vec.c',
-  'arith/ramanujan_tau.c',
-  'arith/stirling1.c',
-  'arith/stirling2.c',
-  'arith/stirlingmat.c',
-  'arith/sum_of_squares.c',
-  'arith/sum_of_squares_vec.c',
-  'bernoulli/bound_2exp_si.c',
-  'bernoulli/cache_compute.c',
-  'bernoulli/fmpq_ui.c',
-  'bernoulli/fmpq_ui_multi_mod.c',
-  'bernoulli/fmpq_ui_zeta.c',
-  'bernoulli/fmpq_vec.c',
-  'bernoulli/mod_p_harvey.c',
-  'bernoulli/rev_clear.c',
-  'bernoulli/rev_init.c',
-  'bernoulli/rev_next.c',
-  'bool_mat/add.c',
-  'bool_mat/all.c',
-  'bool_mat/all_pairs_longest_walk.c',
-  'bool_mat/any.c',
-  'bool_mat/clear.c',
-  'bool_mat/complement.c',
-  'bool_mat/directed_cycle.c',
-  'bool_mat/directed_path.c',
-  'bool_mat/equal.c',
-  'bool_mat/get_strongly_connected_components.c',
-  'bool_mat/init.c',
-  'bool_mat/io.c',
-  'bool_mat/is_diagonal.c',
-  'bool_mat/is_lower_triangular.c',
-  'bool_mat/is_nilpotent.c',
-  'bool_mat/is_transitive.c',
-  'bool_mat/mul.c',
-  'bool_mat/mul_entrywise.c',
-  'bool_mat/nilpotency_degree.c',
-  'bool_mat/one.c',
-  'bool_mat/pow_ui.c',
-  'bool_mat/randtest.c',
-  'bool_mat/set.c',
-  'bool_mat/trace.c',
-  'bool_mat/transitive_closure.c',
-  'bool_mat/transpose.c',
-  'bool_mat/zero.c',
-  'ca/abs.c',
-  'ca/add.c',
-  'ca/arg.c',
-  'ca/asin.c',
-  'ca/atan.c',
-  'ca/can_evaluate_qqbar.c',
-  'ca/ceil.c',
-  'ca/check_equal.c',
-  'ca/check_ge.c',
-  'ca/check_is_algebraic.c',
-  'ca/check_is_i.c',
-  'ca/check_is_imaginary.c',
-  'ca/check_is_infinity.c',
-  'ca/check_is_integer.c',
-  'ca/check_is_negative_real.c',
-  'ca/check_is_neg_i.c',
-  'ca/check_is_neg_i_inf.c',
-  'ca/check_is_neg_inf.c',
-  'ca/check_is_neg_one.c',
-  'ca/check_is_number.c',
-  'ca/check_is_one.c',
-  'ca/check_is_pos_i_inf.c',
-  'ca/check_is_pos_inf.c',
-  'ca/check_is_rational.c',
-  'ca/check_is_real.c',
-  'ca/check_is_signed_inf.c',
-  'ca/check_is_uinf.c',
-  'ca/check_is_undefined.c',
-  'ca/check_is_zero.c',
-  'ca/clear.c',
-  'ca/condense_field.c',
-  'ca/conj.c',
-  'ca/csgn.c',
-  'ca/ctx_clear.c',
-  'ca/ctx_get_field_const.c',
-  'ca/ctx_get_field_fx.c',
-  'ca/ctx_get_field_fxy.c',
-  'ca/ctx_init.c',
-  'ca/div.c',
-  'ca/dot.c',
-  'ca/equal_repr.c',
-  'ca/erf.c',
-  'ca/erfc.c',
-  'ca/erfi.c',
-  'ca/euler.c',
-  'ca/exp.c',
-  'ca_ext/cache_clear.c',
-  'ca_ext/cache_init.c',
-  'ca_ext/cache_insert.c',
-  'ca_ext/clear.c',
-  'ca_ext/cmp_repr.c',
-  'ca_ext/equal_repr.c',
-  'ca_ext/get_acb_raw.c',
-  'ca_ext/init.c',
-  'ca_ext/inlines.c',
-  'ca_ext/print.c',
-  'ca/factor.c',
-  'ca/factor_clear.c',
-  'ca/factor_get_ca.c',
-  'ca/factor_init.c',
-  'ca/factor_insert.c',
-  'ca/factor_one.c',
-  'ca_field/build_ideal.c',
-  'ca_field/build_ideal_erf.c',
-  'ca_field/build_ideal_gamma.c',
-  'ca_field/cache_clear.c',
-  'ca_field/cache_init.c',
-  'ca_field/cache_insert.c',
-  'ca_field/clear.c',
-  'ca_field/cmp.c',
-  'ca_field/init.c',
-  'ca_field/print.c',
-  'ca_field/set_ext.c',
-  'ca/floor.c',
-  'ca/fmpq_poly_evaluate.c',
-  'ca/fmpz_mpoly_evaluate.c',
-  'ca/fmpz_mpoly_q_evaluate.c',
-  'ca/fmpz_poly_evaluate.c',
-  'ca/gamma.c',
-  'ca/get_acb.c',
-  'ca/get_acb_raw.c',
-  'ca/get_fexpr.c',
-  'ca/get_qqbar.c',
-  'ca/hash_repr.c',
-  'ca/i.c',
-  'ca/im.c',
-  'ca/init.c',
-  'ca/inlines.c',
-  'ca/inv.c',
-  'ca/io.c',
-  'ca/is_cyclotomic_nf_elem.c',
-  'ca/is_gen_as_ext.c',
-  'calcium/func_name.c',
-  'calcium/io.c',
-  'calcium/write_acb.c',
-  'calcium/write.c',
-  'calcium/write_si.c',
-  'ca/log.c',
-  'ca/make_field_element.c',
-  'ca_mat/add.c',
-  'ca_mat/add_ca.c',
-  'ca_mat/addmul_ca.c',
-  'ca_mat/adjugate.c',
-  'ca_mat/adjugate_charpoly.c',
-  'ca_mat/adjugate_cofactor.c',
-  'ca_mat/ca_poly_evaluate.c',
-  'ca_mat/charpoly_berkowitz.c',
-  'ca_mat/charpoly.c',
-  'ca_mat/charpoly_danilevsky.c',
-  'ca_mat/check_equal.c',
-  'ca_mat/check_is_one.c',
-  'ca_mat/check_is_zero.c',
-  'ca_mat/clear.c',
-  'ca_mat/companion.c',
-  'ca_mat/conj.c',
-  'ca_mat/conj_transpose.c',
-  'ca_mat/det_bareiss.c',
-  'ca_mat/det_berkowitz.c',
-  'ca_mat/det.c',
-  'ca_mat/det_cofactor.c',
-  'ca_mat/det_lu.c',
-  'ca_mat/dft.c',
-  'ca_mat/diagonalization.c',
-  'ca_mat/eigenvalues.c',
-  'ca_mat/exp.c',
-  'ca_mat/fflu.c',
-  'ca_mat/find_pivot.c',
-  'ca_mat/get_fexpr.c',
-  'ca_mat/hilbert.c',
-  'ca_mat/init.c',
-  'ca_mat/inlines.c',
-  'ca_mat/inv.c',
-  'ca_mat/jordan_blocks.c',
-  'ca_mat/jordan_form.c',
-  'ca_mat/jordan_transformation.c',
-  'ca_mat/log.c',
-  'ca_mat/lu.c',
-  'ca_mat/lu_classical.c',
-  'ca_mat/lu_recursive.c',
-  'ca_mat/mul.c',
-  'ca_mat/mul_classical.c',
-  'ca_mat/mul_same_nf.c',
-  'ca_mat/neg.c',
-  'ca_mat/nonsingular_fflu.c',
-  'ca_mat/nonsingular_lu.c',
-  'ca_mat/nonsingular_solve_adjugate.c',
-  'ca_mat/nonsingular_solve.c',
-  'ca_mat/nonsingular_solve_fflu.c',
-  'ca_mat/nonsingular_solve_lu.c',
-  'ca_mat/one.c',
-  'ca_mat/ones.c',
-  'ca_mat/pascal.c',
-  'ca_mat/pow_ui_binexp.c',
-  'ca_mat/print.c',
-  'ca_mat/randops.c',
-  'ca_mat/randtest.c',
-  'ca_mat/rank.c',
-  'ca_mat/right_kernel.c',
-  'ca_mat/rref.c',
-  'ca_mat/rref_fflu.c',
-  'ca_mat/rref_lu.c',
-  'ca_mat/set.c',
-  'ca_mat/set_ca.c',
-  'ca_mat/set_fmpq_mat.c',
-  'ca_mat/set_fmpz_mat.c',
-  'ca_mat/solve_fflu_precomp.c',
-  'ca_mat/solve_lu_precomp.c',
-  'ca_mat/solve_tril.c',
-  'ca_mat/solve_triu.c',
-  'ca_mat/stirling.c',
-  'ca_mat/sub.c',
-  'ca_mat/sub_ca.c',
-  'ca_mat/submul_ca.c',
-  'ca_mat/trace.c',
-  'ca_mat/transfer.c',
-  'ca_mat/transpose.c',
-  'ca_mat/window_init.c',
-  'ca_mat/zero.c',
-  'ca/merge_fields.c',
-  'ca/mul.c',
-  'ca/neg.c',
-  'ca/neg_i.c',
-  'ca/neg_i_inf.c',
-  'ca/neg_inf.c',
-  'ca/neg_one.c',
-  'ca/one.c',
-  'ca/pi.c',
-  'ca/pi_i.c',
-  'ca_poly/add.c',
-  'ca_poly/check_equal.c',
-  'ca_poly/check_is_one.c',
-  'ca_poly/check_is_zero.c',
-  'ca_poly/clear.c',
-  'ca_poly/compose.c',
-  'ca_poly/derivative.c',
-  'ca_poly/divrem_basecase.c',
-  'ca_poly/divrem.c',
-  'ca_poly/div_series.c',
-  'ca_poly/evaluate.c',
-  'ca_poly/evaluate_horner.c',
-  'ca_poly/exp_series.c',
-  'ca_poly/factor_squarefree.c',
-  'ca_poly/fit_length.c',
-  'ca_poly/gcd.c',
-  'ca_poly/gcd_euclidean.c',
-  'ca_poly/get_fexpr.c',
-  'ca_poly/init.c',
-  'ca_poly/inlines.c',
-  'ca_poly/integral.c',
-  'ca_poly/inv_series.c',
-  'ca_poly/is_proper.c',
-  'ca_poly/log_series.c',
-  'ca_poly/make_monic.c',
-  'ca_poly/mul.c',
-  'ca_poly/mullow.c',
-  'ca_poly/mullow_same_nf.c',
-  'ca_poly/neg.c',
-  'ca_poly/normalise.c',
-  'ca_poly/pow_ui.c',
-  'ca_poly/pow_ui_trunc.c',
-  'ca_poly/print.c',
-  'ca_poly/randtest.c',
-  'ca_poly/reverse.c',
-  'ca_poly/roots.c',
-  'ca_poly/set.c',
-  'ca_poly/set_ca.c',
-  'ca_poly/set_coeff_ca.c',
-  'ca_poly/set_fmpq_poly.c',
-  'ca_poly/set_fmpz_poly.c',
-  'ca_poly/set_length.c',
-  'ca_poly/set_roots.c',
-  'ca_poly/set_si.c',
-  'ca_poly/shift_left.c',
-  'ca_poly/shift_right.c',
-  'ca_poly/squarefree_part.c',
-  'ca_poly/sub.c',
-  'ca_poly/transfer.c',
-  'ca_poly/vec_append.c',
-  'ca_poly/vec_clear.c',
-  'ca_poly/vec_init.c',
-  'ca_poly/vec_set_length.c',
-  'ca/pos_i_inf.c',
-  'ca/pos_inf.c',
-  'ca/pow.c',
-  'ca/randtest.c',
-  'ca/re.c',
-  'ca/rewrite_complex_normal_form.c',
-  'ca/set.c',
-  'ca/set_d.c',
-  'ca/set_d_d.c',
-  'ca/set_fexpr.c',
-  'ca/set_fmpq.c',
-  'ca/set_fmpz.c',
-  'ca/set_qqbar.c',
-  'ca/set_si.c',
-  'ca/set_ui.c',
-  'ca/sgn.c',
-  'ca/sin_cos.c',
-  'ca/sqrt.c',
-  'ca/sqrt_factor.c',
-  'ca/swap.c',
-  'ca/transfer.c',
-  'ca/uinf.c',
-  'ca/undefined.c',
-  'ca/unknown.c',
-  'ca_vec/ca_vec.c',
-  'ca_vec/inlines.c',
-  'ca/zero.c',
-  'dirichlet/char.c',
-  'dirichlet/char_conductor.c',
-  'dirichlet/char_eq_deep.c',
-  'dirichlet/char_exp.c',
-  'dirichlet/char_first_primitive.c',
-  'dirichlet/char_index.c',
-  'dirichlet/char_lift.c',
-  'dirichlet/char_log.c',
-  'dirichlet/char_lower.c',
-  'dirichlet/char_mul.c',
-  'dirichlet/char_next.c',
-  'dirichlet/char_next_primitive.c',
-  'dirichlet/char_one.c',
-  'dirichlet/char_order.c',
-  'dirichlet/char_parity.c',
-  'dirichlet/char_pow.c',
-  'dirichlet/char_print.c',
-  'dirichlet/chi.c',
-  'dirichlet/chi_vec.c',
-  'dirichlet/chi_vec_loop.c',
-  'dirichlet/chi_vec_primeloop.c',
-  'dirichlet/group_clear.c',
-  'dirichlet/group_dlog_precompute.c',
-  'dirichlet/group_init.c',
-  'dirichlet/group_num_primitive.c',
-  'dirichlet/index_char.c',
-  'dirichlet/inlines.c',
-  'dirichlet/pairing.c',
-  'dirichlet/pairing_char.c',
-  'dirichlet/ui_conductor.c',
-  'dirichlet/ui_order.c',
-  'dirichlet/ui_parity.c',
-  'dirichlet/ui_vec_set_null.c',
-  'dlog/1modpe.c',
-  'dlog/1modpe_init.c',
-  'dlog/1modpe_mod1p.c',
-  'dlog/bsgs.c',
-  'dlog/bsgs_init.c',
-  'dlog/crt.c',
-  'dlog/crt_clear.c',
-  'dlog/crt_init.c',
-  'dlog/factor_group.c',
-  'dlog/mod2e.c',
-  'dlog/modpe.c',
-  'dlog/modpe_init.c',
-  'dlog/once.c',
-  'dlog/order23.c',
-  'dlog/order23_init.c',
-  'dlog/power.c',
-  'dlog/power_init.c',
-  'dlog/precomp.c',
-  'dlog/precomp_clear.c',
-  'dlog/precomp_modpe_init.c',
-  'dlog/precomp_n_init.c',
-  'dlog/precomp_pe_init.c',
-  'dlog/precomp_p_init.c',
-  'dlog/precomp_small_init.c',
-  'dlog/rho.c',
-  'dlog/rho_init.c',
-  'dlog/table.c',
-  'dlog/table_init.c',
-  'dlog/vec_add.c',
-  'dlog/vec_add_precomp.c',
-  'dlog/vec.c',
-  'dlog/vec_eratos_add.c',
-  'dlog/vec_eratos.c',
-  'dlog/vec_fill.c',
-  'dlog/vec_loop_add.c',
-  'dlog/vec_loop.c',
-  'dlog/vec_pindex_factorgcd.c',
-  'dlog/vec_set_not_found.c',
-  'dlog/vec_sieve_add.c',
-  'dlog/vec_sieve_add_precomp.c',
-  'dlog/vec_sieve.c',
-  'dlog/vec_sieve_precomp.c',
-  'd_mat/approx_equal.c',
-  'd_mat/clear.c',
-  'd_mat/equal.c',
-  'd_mat/init.c',
-  'd_mat/inlines.c',
-  'd_mat/mul_classical.c',
-  'd_mat/print.c',
-  'd_mat/randtest.c',
-  'd_mat/set.c',
-  'd_mat/transpose.c',
-  'd_mat/zero.c',
-  'double_extras/inlines.c',
-  'double_extras/lambertw.c',
-  'double_extras/log2.c',
-  'double_extras/randtest.c',
-  'double_extras/randtest_signed.c',
-  'double_extras/randtest_special.c',
-  'double_interval/arb_get_di.c',
-  'double_interval/arb_set_di.c',
-  'double_interval/fast_div.c',
-  'double_interval/fast_log_nonnegative.c',
-  'double_interval/fast_mul.c',
-  'double_interval/fast_sqr.c',
-  'double_interval/inlines.c',
-  'd_vec/add.c',
-  'd_vec/approx_equal.c',
-  'd_vec/clear.c',
-  'd_vec/dot.c',
-  'd_vec/dot_heuristic.c',
-  'd_vec/dot_thrice.c',
-  'd_vec/equal.c',
-  'd_vec/init.c',
-  'd_vec/inlines.c',
-  'd_vec/is_approx_zero.c',
-  'd_vec/is_zero.c',
-  'd_vec/norm.c',
-  'd_vec/randtest.c',
-  'd_vec/set.c',
-  'd_vec/sub.c',
-  'd_vec/zero.c',
-  'fexpr/arg.c',
-  'fexpr/arithmetic.c',
-  'fexpr/arithmetic_nodes.c',
-  'fexpr_builtin/inlines.c',
-  'fexpr_builtin/lookup.c',
-  'fexpr_builtin/table.c',
-  'fexpr/call0.c',
-  'fexpr/call1.c',
-  'fexpr/call2.c',
-  'fexpr/call3.c',
-  'fexpr/call4.c',
-  'fexpr/call_vec.c',
-  'fexpr/cmp_fast.c',
-  'fexpr/contains.c',
-  'fexpr/depth.c',
-  'fexpr/equal_si.c',
-  'fexpr/equal_ui.c',
-  'fexpr/expanded_normal_form.c',
-  'fexpr/func.c',
-  'fexpr/get_fmpz.c',
-  'fexpr/get_fmpz_mpoly_q.c',
-  'fexpr/get_string.c',
-  'fexpr/get_symbol_str.c',
-  'fexpr/hash.c',
-  'fexpr/inlines.c',
-  'fexpr/is_any_builtin_call.c',
-  'fexpr/is_arithmetic_operation.c',
-  'fexpr/is_builtin_call.c',
-  'fexpr/is_neg_integer.c',
-  'fexpr/numerical_enclosure.c',
-  'fexpr/num_leaves.c',
-  'fexpr/print.c',
-  'fexpr/replace.c',
-  'fexpr/set_arf.c',
-  'fexpr/set_d.c',
-  'fexpr/set_fmpq.c',
-  'fexpr/set_fmpz.c',
-  'fexpr/set_fmpz_mpoly.c',
-  'fexpr/set_fmpz_mpoly_q.c',
-  'fexpr/set_si.c',
-  'fexpr/set_string.c',
-  'fexpr/set_symbol_str.c',
-  'fexpr/set_ui.c',
-  'fexpr/vec_sort_fast.c',
-  'fexpr/write_latex.c',
-  'fft/adjust.c',
-  'fft/adjust_sqrt2.c',
-  'fft/butterfly_lshB.c',
-  'fft/butterfly_rshB.c',
-  'fft/combine_bits.c',
-  'fft/convolution.c',
-  'fft/convolution_precache.c',
-  'fft/div_2expmod_2expp1.c',
-  'fft/fermat_to_mpz.c',
-  'fft/fft_mfa_truncate_sqrt2.c',
-  'fft/fft_mfa_truncate_sqrt2_inner.c',
-  'fft/fft_negacylic.c',
-  'fft/fft_radix2.c',
-  'fft/fft_truncate.c',
-  'fft/fft_truncate_sqrt2.c',
-  'fft/ifft_mfa_truncate_sqrt2.c',
-  'fft/ifft_negacyclic.c',
-  'fft/ifft_radix2.c',
-  'fft/ifft_truncate.c',
-  'fft/ifft_truncate_sqrt2.c',
-  'fft/inlines.c',
-  'fft/mul_2expmod_2expp1.c',
-  'fft/mul_fft_main.c',
-  'fft/mul_mfa_truncate_sqrt2.c',
-  'fft/mulmod_2expp1.c',
-  'fft/mul_truncate_sqrt2.c',
-  'fft/negmod_2expp1.c',
-  'fft/normmod_2expp1.c',
-  # These are added by detection/meson.build conditionally.
-  #'fft_small/default_ctx.c',
-  #'fft_small/fmpz_poly_mul.c',
-  #'fft_small/mpn_helpers.c',
-  #'fft_small/mpn_mul.c',
-  #'fft_small/mulmod_statisfies_bounds.c',
-  #'fft_small/nmod_poly_mul.c',
-  #'fft_small/sd_fft.c',
-  #'fft_small/sd_fft_ctx.c',
-  #'fft_small/sd_ifft.c',
-  'fft/split_bits.c',
-  'fmpq/add.c',
-  'fmpq/addmul.c',
-  'fmpq/ball.c',
-  'fmpq/canonicalise.c',
-  'fmpq/cfrac_bound.c',
-  'fmpq/clear_readonly.c',
-  'fmpq/cmp.c',
-  'fmpq/dedekind_sum.c',
-  'fmpq/div_2exp.c',
-  'fmpq/div.c',
-  'fmpq/farey_neighbors.c',
-  'fmpq/fmpz_vector.c',
-  'fmpq/gcd.c',
-  'fmpq/gcd_cofactors.c',
-  'fmpq/get_cfrac.c',
-  'fmpq/get_cfrac_helpers.c',
-  'fmpq/get_d.c',
-  'fmpq/get_mpfr.c',
-  'fmpq/get_mpz_frac.c',
-  'fmpq/get_str.c',
-  'fmpq/harmonic_ui.c',
-  'fmpq/height_bits.c',
-  'fmpq/height.c',
-  'fmpq/init_set_readonly.c',
-  'fmpq/inlines.c',
-  'fmpq/inv.c',
-  'fmpq/io.c',
-  'fmpq/is_canonical.c',
-  'fmpq/mat22.c',
-  'fmpq_mat/add.c',
-  'fmpq_mat/can_solve.c',
-  'fmpq_mat/can_solve_dixon.c',
-  'fmpq_mat/can_solve_fraction_free.c',
-  'fmpq_mat/can_solve_multi_mod.c',
-  'fmpq_mat/charpoly.c',
-  'fmpq_mat/clear.c',
-  'fmpq_mat/concat_horizontal.c',
-  'fmpq_mat/concat_vertical.c',
-  'fmpq_mat/det.c',
-  'fmpq_mat/equal.c',
-  'fmpq_mat/fmpq_vec_mul.c',
-  'fmpq_mat/fmpz_vec_mul.c',
-  'fmpq_mat/get_fmpz_mat.c',
-  'fmpq_mat/get_fmpz_mat_colwise.c',
-  'fmpq_mat/get_fmpz_mat_entrywise.c',
-  'fmpq_mat/get_fmpz_mat_matwise.c',
-  'fmpq_mat/get_fmpz_mat_mod_fmpz.c',
-  'fmpq_mat/get_fmpz_mat_rowwise.c',
-  'fmpq_mat/gso.c',
-  'fmpq_mat/hilbert_matrix.c',
-  'fmpq_mat/init.c',
-  'fmpq_mat/init_set.c',
-  'fmpq_mat/inlines.c',
-  'fmpq_mat/inv.c',
-  'fmpq_mat/invert.c',
-  'fmpq_mat/io.c',
-  'fmpq_mat/is_integral.c',
-  'fmpq_mat/is_one.c',
-  'fmpq_mat/is_zero.c',
-  'fmpq_mat/kronecker_product.c',
-  'fmpq_mat/minpoly.c',
-  'fmpq_mat/mul.c',
-  'fmpq_mat/mul_cleared.c',
-  'fmpq_mat/mul_direct.c',
-  'fmpq_mat/mul_fmpq_vec.c',
-  'fmpq_mat/mul_fmpz_mat.c',
-  'fmpq_mat/mul_fmpz_vec.c',
-  'fmpq_mat/mul_r_fmpz_mat.c',
-  'fmpq_mat/neg.c',
-  'fmpq_mat/one.c',
-  'fmpq_mat/pivot.c',
-  'fmpq_mat/randbits.c',
-  'fmpq_mat/randtest.c',
-  'fmpq_mat/rref.c',
-  'fmpq_mat/rref_classical.c',
-  'fmpq_mat/rref_fraction_free.c',
-  'fmpq_mat/scalar_div_fmpz.c',
-  'fmpq_mat/scalar_mul_fmpq.c',
-  'fmpq_mat/scalar_mul_fmpz.c',
-  'fmpq_mat/set.c',
-  'fmpq_mat/set_fmpz_mat.c',
-  'fmpq_mat/set_fmpz_mat_div_fmpz.c',
-  'fmpq_mat/set_fmpz_mat_mod_fmpz.c',
-  'fmpq_mat/similarity.c',
-  'fmpq_mat/solve.c',
-  'fmpq_mat/solve_dixon.c',
-  'fmpq_mat/solve_fraction_free.c',
-  'fmpq_mat/solve_multi_mod.c',
-  'fmpq_mat/sub.c',
-  'fmpq_mat/swap.c',
-  'fmpq_mat/trace.c',
-  'fmpq_mat/transpose.c',
-  'fmpq_mat/window_clear.c',
-  'fmpq_mat/window_init.c',
-  'fmpq_mat/zero.c',
-  'fmpq/mod_fmpz.c',
-  'fmpq_mpoly/add.c',
-  'fmpq_mpoly/add_fmpq.c',
-  'fmpq_mpoly/cmp.c',
-  'fmpq_mpoly/compose_fmpq_mpoly.c',
-  'fmpq_mpoly/compose_fmpq_mpoly_gen.c',
-  'fmpq_mpoly/compose_fmpq_poly.c',
-  'fmpq_mpoly/content_vars.c',
-  'fmpq_mpoly/degrees.c',
-  'fmpq_mpoly/derivative.c',
-  'fmpq_mpoly/discriminant.c',
-  'fmpq_mpoly/div.c',
-  'fmpq_mpoly/divides.c',
-  'fmpq_mpoly/divrem.c',
-  'fmpq_mpoly/divrem_ideal.c',
-  'fmpq_mpoly/equal_fmpq.c',
-  'fmpq_mpoly/equal_fmpz.c',
-  'fmpq_mpoly/evaluate_all.c',
-  'fmpq_mpoly/evaluate_one.c',
-  'fmpq_mpoly_factor/clear.c',
-  'fmpq_mpoly_factor/expand.c',
-  'fmpq_mpoly_factor/factor.c',
-  'fmpq_mpoly_factor/factor_make_integral.c',
-  'fmpq_mpoly_factor/factor_make_monic.c',
-  'fmpq_mpoly_factor/factor_squarefree.c',
-  'fmpq_mpoly_factor/fit_length.c',
-  'fmpq_mpoly_factor/init.c',
-  'fmpq_mpoly_factor/inlines.c',
-  'fmpq_mpoly_factor/realloc.c',
-  'fmpq_mpoly_factor/sort.c',
-  'fmpq_mpoly_factor/swap_fmpz_mpoly_factor.c',
-  'fmpq_mpoly/gcd.c',
-  'fmpq_mpoly/gcd_cofactors.c',
-  'fmpq_mpoly/get_coeff_fmpq_fmpz.c',
-  'fmpq_mpoly/get_coeff_fmpq_monomial.c',
-  'fmpq_mpoly/get_coeff_fmpq_ui.c',
-  'fmpq_mpoly/get_coeff_vars_ui.c',
-  'fmpq_mpoly/get_fmpq.c',
-  'fmpq_mpoly/get_set_is_fmpq_poly.c',
-  'fmpq_mpoly/get_str_pretty.c',
-  'fmpq_mpoly/get_term.c',
-  'fmpq_mpoly/get_term_coeff_fmpq.c',
-  'fmpq_mpoly/get_term_exp_fmpz.c',
-  'fmpq_mpoly/get_term_exp_si.c',
-  'fmpq_mpoly/get_term_exp_ui.c',
-  'fmpq_mpoly/get_term_monomial.c',
-  'fmpq_mpoly/get_term_var_exp_si.c',
-  'fmpq_mpoly/get_term_var_exp_ui.c',
-  'fmpq_mpoly/inflate.c',
-  'fmpq_mpoly/inlines.c',
-  'fmpq_mpoly/integral.c',
-  'fmpq_mpoly/io.c',
-  'fmpq_mpoly/is_canonical.c',
-  'fmpq_mpoly/is_monic.c',
-  'fmpq_mpoly/make_monic.c',
-  'fmpq_mpoly/mul.c',
-  'fmpq_mpoly/pow_fmpz.c',
-  'fmpq_mpoly/pow_ui.c',
-  'fmpq_mpoly/push_term_fmpq_fmpz.c',
-  'fmpq_mpoly/push_term_fmpq_ui.c',
-  'fmpq_mpoly/reduce.c',
-  'fmpq_mpoly/reduce_easy.c',
-  'fmpq_mpoly/repack_bits.c',
-  'fmpq_mpoly/rescale.c',
-  'fmpq_mpoly/resultant.c',
-  'fmpq_mpoly/scalar_div_fmpq.c',
-  'fmpq_mpoly/scalar_div_fmpz.c',
-  'fmpq_mpoly/scalar_mul_fmpq.c',
-  'fmpq_mpoly/scalar_mul_fmpz.c',
-  'fmpq_mpoly/set_coeff_fmpq_fmpz.c',
-  'fmpq_mpoly/set_coeff_fmpq_monomial.c',
-  'fmpq_mpoly/set_coeff_fmpq_ui.c',
-  'fmpq_mpoly/set_fmpq.c',
-  'fmpq_mpoly/set_fmpz.c',
-  'fmpq_mpoly/set_str_pretty.c',
-  'fmpq_mpoly/set_term_coeff_fmpq.c',
-  'fmpq_mpoly/sqrt.c',
-  'fmpq_mpoly/sub.c',
-  'fmpq_mpoly/sub_fmpq.c',
-  'fmpq_mpoly/term_content.c',
-  'fmpq_mpoly/term_exp_fits.c',
-  'fmpq_mpoly/univar.c',
-  'fmpq_mpoly/void_ring.c',
-  'fmpq/mpq_clear_readonly.c',
-  'fmpq/mpq_init_set_readonly.c',
-  'fmpq/mul_2exp.c',
-  'fmpq/mul.c',
-  'fmpq/next_calkin_wilf.c',
-  'fmpq/next_minimal.c',
-  'fmpq/next_signed_calkin_wilf.c',
-  'fmpq/next_signed_minimal.c',
-  'fmpq_poly/add.c',
-  'fmpq_poly/add_series.c',
-  'fmpq_poly/asinh_series.c',
-  'fmpq_poly/asin_series.c',
-  'fmpq_poly/atanh_series.c',
-  'fmpq_poly/atan_series.c',
-  'fmpq_poly/canonicalise.c',
-  'fmpq_poly/clear.c',
-  'fmpq_poly/cmp.c',
-  'fmpq_poly/comparisons.c',
-  'fmpq_poly/compose.c',
-  'fmpq_poly/compose_series_brent_kung.c',
-  'fmpq_poly/compose_series.c',
-  'fmpq_poly/compose_series_horner.c',
-  'fmpq_poly/content.c',
-  'fmpq_poly/cosh_series.c',
-  'fmpq_poly/cos_series.c',
-  'fmpq_poly/derivative.c',
-  'fmpq_poly/div.c',
-  'fmpq_poly/divides.c',
-  'fmpq_poly/divrem.c',
-  'fmpq_poly/div_series.c',
-  'fmpq_poly/equal.c',
-  'fmpq_poly/equal_trunc.c',
-  'fmpq_poly/evaluate.c',
-  'fmpq_poly/exp_series.c',
-  'fmpq_poly/fit_length.c',
-  'fmpq_poly/gcd.c',
-  'fmpq_poly/gegenbauer_c.c',
-  'fmpq_poly/get_coeff.c',
-  'fmpq_poly/get_nmod_poly.c',
-  'fmpq_poly/get_numerator_denominator.c',
-  'fmpq_poly/get_slice.c',
-  'fmpq_poly/get_str.c',
-  'fmpq_poly/init.c',
-  'fmpq_poly/inlines.c',
-  'fmpq_poly/integral.c',
-  'fmpq_poly/interpolate_fmpz_vec.c',
-  'fmpq_poly/inv.c',
-  'fmpq_poly/inv_series_newton.c',
-  'fmpq_poly/invsqrt_series.c',
-  'fmpq_poly/io.c',
-  'fmpq_poly/is_canonical.c',
-  'fmpq_poly/is_monic.c',
-  'fmpq_poly/is_squarefree.c',
-  'fmpq_poly/laguerre_l.c',
-  'fmpq_poly/lcm.c',
-  'fmpq_poly/legendre_p.c',
-  'fmpq_poly/log_series.c',
-  'fmpq_poly/make_monic.c',
-  'fmpq_poly/mul.c',
-  'fmpq_poly/mullow.c',
-  'fmpq_poly/neg.c',
-  'fmpq_poly/normalise.c',
-  'fmpq_poly/nth_derivative.c',
-  'fmpq_poly/one.c',
-  'fmpq_poly/pow.c',
-  'fmpq_poly/powers_clear.c',
-  'fmpq_poly/powers_precompute.c',
-  'fmpq_poly/power_sums.c',
-  'fmpq_poly/power_sums_to_poly.c',
-  'fmpq_poly/pow_trunc.c',
-  'fmpq_poly/primitive_part.c',
-  'fmpq_poly/randtest.c',
-  'fmpq_poly/realloc.c',
-  'fmpq_poly/rem.c',
-  'fmpq_poly/remove.c',
-  'fmpq_poly/rem_powers_precomp.c',
-  'fmpq_poly/rescale.c',
-  'fmpq_poly/resultant.c',
-  'fmpq_poly/resultant_modular_div.c',
-  'fmpq_poly/reverse.c',
-  'fmpq_poly/revert_series.c',
-  'fmpq_poly/revert_series_lagrange.c',
-  'fmpq_poly/revert_series_lagrange_fast.c',
-  'fmpq_poly/revert_series_newton.c',
-  'fmpq_poly/scalar.c',
-  'fmpq_poly/set.c',
-  'fmpq_poly/set_coeff.c',
-  'fmpq_poly/set_length.c',
-  'fmpq_poly/set_str.c',
-  'fmpq_poly/set_trunc.c',
-  'fmpq_poly/shift_left.c',
-  'fmpq_poly/shift_right.c',
-  'fmpq_poly/sin_cos_series.c',
-  'fmpq_poly/sinh_cosh_series.c',
-  'fmpq_poly/sinh_series.c',
-  'fmpq_poly/sin_series.c',
-  'fmpq_poly/sqrt_series.c',
-  'fmpq_poly/sub.c',
-  'fmpq_poly/sub_series.c',
-  'fmpq_poly/swap.c',
-  'fmpq_poly/tanh_series.c',
-  'fmpq_poly/tan_series.c',
-  'fmpq_poly/truncate.c',
-  'fmpq_poly/xgcd.c',
-  'fmpq_poly/zero.c',
-  'fmpq/pow_fmpz.c',
-  'fmpq/pow_si.c',
-  'fmpq/randbits.c',
-  'fmpq/randtest.c',
-  'fmpq/reconstruct_fmpz_2.c',
-  'fmpq/reconstruct_fmpz_2_naive.c',
-  'fmpq/reconstruct_fmpz.c',
-  'fmpq/set_cfrac.c',
-  'fmpq/set_fmpz_frac.c',
-  'fmpq/set_si.c',
-  'fmpq/set_str.c',
-  'fmpq/set_ui.c',
-  'fmpq/simplest_between.c',
-  'fmpq/sub.c',
-  'fmpq/submul.c',
-  'fmpq_vec/clear.c',
-  'fmpq_vec/dot.c',
-  'fmpq_vec/get_fmpz_vec_fmpz.c',
-  'fmpq_vec/init.c',
-  'fmpq_vec/io.c',
-  'fmpq_vec/randtest.c',
-  'fmpq_vec/randtest_uniq_sorted.c',
-  'fmpq_vec/set_fmpz_vec.c',
-  'fmpq_vec/sort.c',
-  'fmpz/abs.c',
-  'fmpz/abs_fits_ui.c',
-  'fmpz/abs_lbound_ui_2exp.c',
-  'fmpz/abs_ubound_ui_2exp.c',
-  'fmpz/add.c',
-  'fmpz/addmul.c',
-  'fmpz/aors_ui.c',
-  'fmpz/bin_uiui.c',
-  'fmpz/bit_pack.c',
-  'fmpz/bits.c',
-  'fmpz/bit_unpack.c',
-  'fmpz/cdiv.c',
-  'fmpz/clear_readonly.c',
-  'fmpz/clog.c',
-  'fmpz/cmp.c',
-  'fmpz/comb_clear.c',
-  'fmpz/comb_init.c',
-  'fmpz/CRT.c',
-  'fmpz/divexact.c',
-  'fmpz/divides.c',
-  'fmpz/divides_mod_list.c',
-  'fmpz/divisible.c',
-  'fmpz/divisor_in_residue_class_lenstra.c',
-  'fmpz/divisor_sigma.c',
-  'fmpz/div_newton.c',
-  'fmpz/dlog.c',
-  'fmpz/equal.c',
-  'fmpz/euler_phi.c',
-  'fmpz_extras/lshift_mpn.c',
-  'fmpz_extras/sub_small_large.c',
-  'fmpz_factor/append.c',
-  'fmpz_factor/clear.c',
-  'fmpz_factor/concat.c',
-  'fmpz_factor/ecm_add.c',
-  'fmpz_factor/ecm_addmod.c',
-  'fmpz_factor/ecm.c',
-  'fmpz_factor/ecm_clear.c',
-  'fmpz_factor/ecm_double.c',
-  'fmpz_factor/ecm_init.c',
-  'fmpz_factor/ecm_mul_montgomery_ladder.c',
-  'fmpz_factor/ecm_select_curve.c',
-  'fmpz_factor/ecm_stage_I.c',
-  'fmpz_factor/ecm_stage_II.c',
-  'fmpz_factor/ecm_submod.c',
-  'fmpz_factor/expand.c',
-  'fmpz_factor/expand_iterative.c',
-  'fmpz_factor/expand_multiexp.c',
-  'fmpz_factor/extend_factor_ui.c',
-  'fmpz_factor/factor.c',
-  'fmpz_factor/factor_no_trial.c',
-  'fmpz_factor/factor_pp1.c',
-  'fmpz_factor/factor_si.c',
-  'fmpz_factor/factor_smooth.c',
-  'fmpz_factor/factor_trial.c',
-  'fmpz_factor/factor_trial_range.c',
-  'fmpz_factor/fit_length.c',
-  'fmpz_factor/get_fmpz.c',
-  'fmpz_factor/init.c',
-  'fmpz_factor/io.c',
-  'fmpz_factor/pollard_brent.c',
-  'fmpz_factor/pollard_brent_single.c',
-  'fmpz_factor/refine.c',
-  'fmpz_factor/set_length.c',
-  'fmpz/fac_ui.c',
-  'fmpz/fdiv.c',
-  'fmpz/fib_ui.c',
-  'fmpz/fits_si.c',
-  'fmpz/flog.c',
-  'fmpz/fmma.c',
-  'fmpz/fmms.c',
-  'fmpz/gcd.c',
-  'fmpz/gcdinv.c',
-  'fmpz/get.c',
-  'fmpz/get_str.c',
-  'fmpzi/bits.c',
-  'fmpzi/canonical_unit_i_pow.c',
-  'fmpzi/divexact.c',
-  'fmpzi/div_i.c',
-  'fmpzi/divrem_approx.c',
-  'fmpzi/divrem.c',
-  'fmpzi/gcd_binary.c',
-  'fmpzi/gcd.c',
-  'fmpzi/gcd_euclidean.c',
-  'fmpzi/gcd_euclidean_improved.c',
-  'fmpzi/gcd_shortest.c',
-  'fmpzi/inlines.c',
-  'fmpzi/io.c',
-  'fmpzi/is_prime.c',
-  'fmpzi/is_probabprime.c',
-  'fmpzi/mul.c',
-  'fmpzi/mul_i.c',
-  'fmpzi/mul_i_pow_si.c',
-  'fmpz/init2.c',
-  'fmpz/init_set_readonly.c',
-  'fmpz/inlines.c',
-  'fmpz/invmod.c',
-  'fmpz/io.c',
-  'fmpzi/pow_ui.c',
-  'fmpzi/remove_one_plus_i.c',
-  'fmpz/is_canonical.c',
-  'fmpz/is_perfect_power.c',
-  'fmpz/is_prime.c',
-  'fmpz/is_prime_morrison.c',
-  'fmpz/is_prime_pocklington.c',
-  'fmpz/is_prime_pseudosquare.c',
-  'fmpz/is_probabprime_BPSW.c',
-  'fmpz/is_probabprime_lucas.c',
-  'fmpzi/sqr.c',
-  'fmpz/is_square.c',
-  'fmpz/is_strong_probabprime.c',
-  'fmpz/jacobi.c',
-  'fmpz/kronecker.c',
-  'fmpz/lcm.c',
-  'fmpz_lll/advance_check_babai.c',
-  'fmpz_lll/advance_check_babai_heuristic_d.c',
-  'fmpz_lll/babai.c',
-  'fmpz_lll/check_babai.c',
-  'fmpz_lll/check_babai_heuristic.c',
-  'fmpz_lll/check_babai_heuristic_d.c',
-  'fmpz_lll/context_init.c',
-  'fmpz_lll/context_init_default.c',
-  'fmpz_lll/d_lll.c',
-  'fmpz_lll/heuristic_dot.c',
-  'fmpz_lll/is_reduced.c',
-  'fmpz_lll/is_reduced_d.c',
-  'fmpz_lll/is_reduced_d_with_removal.c',
-  'fmpz_lll/is_reduced_mpfr.c',
-  'fmpz_lll/is_reduced_mpfr_with_removal.c',
-  'fmpz_lll/is_reduced_with_removal.c',
-  'fmpz_lll/lll.c',
-  'fmpz_lll/lll_d.c',
-  'fmpz_lll/lll_d_heuristic.c',
-  'fmpz_lll/lll_d_heuristic_with_removal.c',
-  'fmpz_lll/lll_d_with_removal.c',
-  'fmpz_lll/lll_d_with_removal_knapsack.c',
-  'fmpz_lll/lll_mpf2.c',
-  'fmpz_lll/lll_mpf2_with_removal.c',
-  'fmpz_lll/lll_mpf.c',
-  'fmpz_lll/lll_mpf_with_removal.c',
-  'fmpz_lll/lll_with_removal.c',
-  'fmpz_lll/lll_with_removal_ulll.c',
-  'fmpz_lll/mpf2_lll.c',
-  'fmpz_lll/mpf-impl.c',
-  'fmpz_lll/randtest.c',
-  'fmpz_lll/shift.c',
-  'fmpz_lll/storjohann_ulll.c',
-  'fmpz_lll/wrapper.c',
-  'fmpz_lll/wrapper_with_removal.c',
-  'fmpz_lll/wrapper_with_removal_knapsack.c',
-  'fmpz/logic.c',
-  'fmpz/lucas_chain.c',
-  'fmpz_mat/add.c',
-  'fmpz_mat/can_solve.c',
-  'fmpz_mat/can_solve_fflu.c',
-  'fmpz_mat/can_solve_multi_mod_den.c',
-  'fmpz_mat/charpoly.c',
-  'fmpz_mat/chol_d.c',
-  'fmpz_mat/clear.c',
-  'fmpz_mat/col_partition.c',
-  'fmpz_mat/concat.c',
-  'fmpz_mat/content.c',
-  'fmpz_mat/CRT_ui.c',
-  'fmpz_mat/det_bareiss.c',
-  'fmpz_mat/det_bound.c',
-  'fmpz_mat/det.c',
-  'fmpz_mat/det_cofactor.c',
-  'fmpz_mat/det_divisor.c',
-  'fmpz_mat/det_modular_accelerated.c',
-  'fmpz_mat/det_modular.c',
-  'fmpz_mat/det_modular_given_divisor.c',
-  'fmpz_mat/equal.c',
-  'fmpz_mat/fflu.c',
-  'fmpz_mat/find_pivot_any.c',
-  'fmpz_mat/find_pivot_smallest.c',
-  'fmpz_mat/fmpz_vec_mul.c',
-  'fmpz_mat/get.c',
-  'fmpz_mat/gram.c',
-  'fmpz_mat/hadamard.c',
-  'fmpz_mat/hnf.c',
-  'fmpz_mat/hnf_classical.c',
-  'fmpz_mat/hnf_minors.c',
-  'fmpz_mat/hnf_minors_transform.c',
-  'fmpz_mat/hnf_modular.c',
-  'fmpz_mat/hnf_modular_eldiv.c',
-  'fmpz_mat/hnf_pernet_stein.c',
-  'fmpz_mat/hnf_transform.c',
-  'fmpz_mat/hnf_xgcd.c',
-  'fmpz_mat/howell_form_mod.c',
-  'fmpz_mat/init.c',
-  'fmpz_mat/inlines.c',
-  'fmpz_mat/inv.c',
-  'fmpz_mat/invert.c',
-  'fmpz_mat/io.c',
-  'fmpz_mat/is_hadamard.c',
-  'fmpz_mat/is_in_hnf.c',
-  'fmpz_mat/is_in_rref_with_rank.c',
-  'fmpz_mat/is_in_snf.c',
-  'fmpz_mat/is_one.c',
-  'fmpz_mat/is_reduced.c',
-  'fmpz_mat/is_reduced_gram.c',
-  'fmpz_mat/is_reduced_gram_with_removal.c',
-  'fmpz_mat/is_reduced_with_removal.c',
-  'fmpz_mat/is_spd.c',
-  'fmpz_mat/is_zero.c',
-  'fmpz_mat/kronecker_product.c',
-  'fmpz_mat/lll_original.c',
-  'fmpz_mat/lll_storjohann.c',
-  'fmpz_mat/max_bits.c',
-  'fmpz_mat/minpoly_modular.c',
-  'fmpz_mat/mul_blas.c',
-  'fmpz_mat/mul.c',
-  'fmpz_mat/mul_classical.c',
-  'fmpz_mat/mul_double_word.c',
-  'fmpz_mat/mul_fft.c',
-  'fmpz_mat/mul_fmpz_vec.c',
-  'fmpz_mat/mul_multi_mod.c',
-  'fmpz_mat/mul_small.c',
-  'fmpz_mat/mul_strassen.c',
-  'fmpz_mat/multi_CRT_ui.c',
-  'fmpz_mat/multi_mod_ui.c',
-  'fmpz_mat/mul_waksman.c',
-  'fmpz_mat/neg.c',
-  'fmpz_mat/next_col_van_hoeij.c',
-  'fmpz_mat/nullspace.c',
-  'fmpz_mat/one.c',
-  'fmpz_mat/pow.c',
-  'fmpz_mat/randajtai.c',
-  'fmpz_mat/randbits.c',
-  'fmpz_mat/randdet.c',
-  'fmpz_mat/randintrel.c',
-  'fmpz_mat/randntrulike2.c',
-  'fmpz_mat/randntrulike.c',
-  'fmpz_mat/randops.c',
-  'fmpz_mat/randpermdiag.c',
-  'fmpz_mat/randrank.c',
-  'fmpz_mat/randsimdioph.c',
-  'fmpz_mat/randtest.c',
-  'fmpz_mat/randtest_unsigned.c',
-  'fmpz_mat/rank.c',
-  'fmpz_mat/rank_small_inplace.c',
-  'fmpz_mat/rref.c',
-  'fmpz_mat/rref_fflu.c',
-  'fmpz_mat/rref_mul.c',
-  'fmpz_mat/scalar.c',
-  'fmpz_mat/set.c',
-  'fmpz_mat/similarity.c',
-  'fmpz_mat/snf.c',
-  'fmpz_mat/snf_diagonal.c',
-  'fmpz_mat/snf_iliopoulos.c',
-  'fmpz_mat/snf_kannan_bachem.c',
-  'fmpz_mat/solve_bound.c',
-  'fmpz_mat/solve.c',
-  'fmpz_mat/solve_cramer.c',
-  'fmpz_mat/solve_dixon.c',
-  'fmpz_mat/solve_dixon_den.c',
-  'fmpz_mat/solve_fflu.c',
-  'fmpz_mat/solve_fflu_precomp.c',
-  'fmpz_mat/solve_multi_mod_den.c',
-  'fmpz_mat/sqr_bodrato.c',
-  'fmpz_mat/sqr.c',
-  'fmpz_mat/strong_echelon_form_mod.c',
-  'fmpz_mat/sub.c',
-  'fmpz_mat/swap.c',
-  'fmpz_mat/trace.c',
-  'fmpz_mat/transpose.c',
-  'fmpz_mat/window.c',
-  'fmpz_mat/zero.c',
-  'fmpz_mod/add.c',
-  'fmpz_mod/addmul.c',
-  'fmpz/mod.c',
-  'fmpz_mod/ctx.c',
-  'fmpz_mod/discrete_log_pohlig_hellman.c',
-  'fmpz_mod/divides.c',
-  'fmpz_mod/equal_fmpz.c',
-  'fmpz_mod/inlines.c',
-  'fmpz_mod/inv.c',
-  'fmpz_mod/is_canonical.c',
-  'fmpz_mod/is_invertible.c',
-  'fmpz_mod/is_one.c',
-  'fmpz_mod_mat/add.c',
-  'fmpz_mod_mat/can_solve.c',
-  'fmpz_mod_mat/charpoly_berkowitz.c',
-  'fmpz_mod_mat/clear.c',
-  'fmpz_mod_mat/comparison.c',
-  'fmpz_mod_mat/det.c',
-  'fmpz_mod_mat/fmpz_vec_mul.c',
-  'fmpz_mod_mat/fmpz_vec_mul_ptr.c',
-  'fmpz_mod_mat/howell_form.c',
-  'fmpz_mod_mat/init.c',
-  'fmpz_mod_mat/init_set.c',
-  'fmpz_mod_mat/inlines.c',
-  'fmpz_mod_mat/inv.c',
-  'fmpz_mod_mat/io.c',
-  'fmpz_mod_mat/lu.c',
-  'fmpz_mod_mat/minpoly.c',
-  'fmpz_mod_mat/mul.c',
-  'fmpz_mod_mat/mul_classical_threaded.c',
-  'fmpz_mod_mat/mul_fmpz_vec.c',
-  'fmpz_mod_mat/mul_fmpz_vec_ptr.c',
-  'fmpz_mod_mat/neg.c',
-  'fmpz_mod_mat/nullspace.c',
-  'fmpz_mod_mat/randrank.c',
-  'fmpz_mod_mat/randtest.c',
-  'fmpz_mod_mat/randtril.c',
-  'fmpz_mod_mat/randtriu.c',
-  'fmpz_mod_mat/rank.c',
-  'fmpz_mod_mat/reduce_row.c',
-  'fmpz_mod_mat/rref.c',
-  'fmpz_mod_mat/scalar_mul_fmpz.c',
-  'fmpz_mod_mat/scalar_mul_si.c',
-  'fmpz_mod_mat/scalar_mul_ui.c',
-  'fmpz_mod_mat/set_fmpz_mat.c',
-  'fmpz_mod_mat/set_get.c',
-  'fmpz_mod_mat/similarity.c',
-  'fmpz_mod_mat/solve.c',
-  'fmpz_mod_mat/solve_tril.c',
-  'fmpz_mod_mat/solve_triu.c',
-  'fmpz_mod_mat/sqr.c',
-  'fmpz_mod_mat/strong_echelon_form.c',
-  'fmpz_mod_mat/sub.c',
-  'fmpz_mod_mat/submul.c',
-  'fmpz_mod_mat/swap.c',
-  'fmpz_mod_mat/trace.c',
-  'fmpz_mod_mat/window_clear.c',
-  'fmpz_mod_mat/window_init.c',
-  'fmpz_mod_mpoly/add.c',
-  'fmpz_mod_mpoly/add_fmpz.c',
-  'fmpz_mod_mpoly/clear.c',
-  'fmpz_mod_mpoly/cmp.c',
-  'fmpz_mod_mpoly/combine_like_terms.c',
-  'fmpz_mod_mpoly/compose_fmpz_mod_mpoly.c',
-  'fmpz_mod_mpoly/compose_fmpz_mod_mpoly_geobucket.c',
-  'fmpz_mod_mpoly/compose_mat.c',
-  'fmpz_mod_mpoly/content_vars.c',
-  'fmpz_mod_mpoly/ctx_clear.c',
-  'fmpz_mod_mpoly/ctx_init.c',
-  'fmpz_mod_mpoly/ctx_init_rand.c',
-  'fmpz_mod_mpoly/deflate.c',
-  'fmpz_mod_mpoly/deflation.c',
-  'fmpz_mod_mpoly/degrees.c',
-  'fmpz_mod_mpoly/derivative.c',
-  'fmpz_mod_mpoly/discriminant.c',
-  'fmpz_mod_mpoly/div.c',
-  'fmpz_mod_mpoly/divides.c',
-  'fmpz_mod_mpoly/divides_dense.c',
-  'fmpz_mod_mpoly/divides_monagan_pearce.c',
-  'fmpz_mod_mpoly/div_monagan_pearce.c',
-  'fmpz_mod_mpoly/divrem.c',
-  'fmpz_mod_mpoly/divrem_ideal.c',
-  'fmpz_mod_mpoly/divrem_ideal_monagan_pearce.c',
-  'fmpz_mod_mpoly/divrem_monagan_pearce.c',
-  'fmpz_mod_mpoly/equal.c',
-  'fmpz_mod_mpoly/equal_fmpz.c',
-  'fmpz_mod_mpoly/evaluate_all_fmpz.c',
-  'fmpz_mod_mpoly/evaluate_one.c',
-  'fmpz_mod_mpoly_factor/bpoly_factor_smprime.c',
-  'fmpz_mod_mpoly_factor/bpoly_hlift.c',
-  'fmpz_mod_mpoly_factor/clear.c',
-  'fmpz_mod_mpoly_factor/cmp.c',
-  'fmpz_mod_mpoly_factor/compression.c',
-  'fmpz_mod_mpoly_factor/eval.c',
-  'fmpz_mod_mpoly_factor/expand.c',
-  'fmpz_mod_mpoly_factor/factor.c',
-  'fmpz_mod_mpoly_factor/factor_content.c',
-  'fmpz_mod_mpoly_factor/factor_squarefree.c',
-  'fmpz_mod_mpoly_factor/fit_length.c',
-  'fmpz_mod_mpoly_factor/fmpz_mod_bpoly.c',
-  'fmpz_mod_mpoly_factor/fmpz_mod_mat_extras.c',
-  'fmpz_mod_mpoly_factor/fmpz_mod_poly_extras.c',
-  'fmpz_mod_mpoly_factor/fmpz_mod_poly_vec.c',
-  'fmpz_mod_mpoly_factor/fmpz_mod_pow_cache.c',
-  'fmpz_mod_mpoly_factor/gcd_algo.c',
-  'fmpz_mod_mpoly_factor/gcd_brown.c',
-  'fmpz_mod_mpoly_factor/gcd_hensel.c',
-  'fmpz_mod_mpoly_factor/gcd_zippel2.c',
-  'fmpz_mod_mpoly_factor/gcd_zippel.c',
-  'fmpz_mod_mpoly_factor/get_set_lead0.c',
-  'fmpz_mod_mpoly_factor/inlines.c',
-  'fmpz_mod_mpoly_factor/interp.c',
-  'fmpz_mod_mpoly_factor/io.c',
-  'fmpz_mod_mpoly_factor/irred_smprime_wang.c',
-  'fmpz_mod_mpoly_factor/irred_smprime_zassenhaus.c',
-  'fmpz_mod_mpoly_factor/irred_smprime_zippel.c',
-  'fmpz_mod_mpoly_factor/lcc_wang.c',
-  'fmpz_mod_mpoly_factor/mpoly_hlift.c',
-  'fmpz_mod_mpoly_factor/mpoly_hlift_zippel.c',
-  'fmpz_mod_mpoly_factor/mpolyn.c',
-  'fmpz_mod_mpoly_factor/mpolyn_divides.c',
-  'fmpz_mod_mpoly_factor/mpoly_pfrac.c',
-  'fmpz_mod_mpoly_factor/mpolyu.c',
-  'fmpz_mod_mpoly_factor/mpolyv.c',
-  'fmpz_mod_mpoly_factor/polyu3_mod_hlift.c',
-  'fmpz_mod_mpoly_factor/polyun.c',
-  'fmpz_mod_mpoly_factor/realloc.c',
-  'fmpz_mod_mpoly_factor/set_nmod_mpoly_factor.c',
-  'fmpz_mod_mpoly_factor/sort.c',
-  'fmpz_mod_mpoly_factor/stack.c',
-  'fmpz_mod_mpoly_factor/zip_helpers.c',
-  'fmpz_mod_mpoly/fit_length.c',
-  'fmpz_mod_mpoly/fit_length_fit_bits.c',
-  'fmpz_mod_mpoly/fit_length_reset_bits.c',
-  'fmpz_mod_mpoly/gcd_brown.c',
-  'fmpz_mod_mpoly/gcd.c',
-  'fmpz_mod_mpoly/gcd_cofactors.c',
-  'fmpz_mod_mpoly/gcd_hensel.c',
-  'fmpz_mod_mpoly/gcd_subresultant.c',
-  'fmpz_mod_mpoly/gcd_zippel2.c',
-  'fmpz_mod_mpoly/gcd_zippel.c',
-  'fmpz_mod_mpoly/gen.c',
-  'fmpz_mod_mpoly/geobuckets.c',
-  'fmpz_mod_mpoly/get_coeff_fmpz_fmpz.c',
-  'fmpz_mod_mpoly/get_coeff_fmpz_monomial.c',
-  'fmpz_mod_mpoly/get_coeff_fmpz_ui.c',
-  'fmpz_mod_mpoly/get_coeff_vars_ui.c',
-  'fmpz_mod_mpoly/get_fmpz.c',
-  'fmpz_mod_mpoly/get_set_is_fmpz_mod_poly.c',
-  'fmpz_mod_mpoly/get_set_nmod_mpoly.c',
-  'fmpz_mod_mpoly/get_str_pretty.c',
-  'fmpz_mod_mpoly/get_term.c',
-  'fmpz_mod_mpoly/get_term_coeff_fmpz.c',
-  'fmpz_mod_mpoly/get_term_exp_fmpz.c',
-  'fmpz_mod_mpoly/get_term_exp_si.c',
-  'fmpz_mod_mpoly/get_term_exp_ui.c',
-  'fmpz_mod_mpoly/get_term_monomial.c',
-  'fmpz_mod_mpoly/get_term_var_exp_si.c',
-  'fmpz_mod_mpoly/get_term_var_exp_ui.c',
-  'fmpz_mod_mpoly/inflate.c',
-  'fmpz_mod_mpoly/init.c',
-  'fmpz_mod_mpoly/inlines.c',
-  'fmpz_mod_mpoly/io.c',
-  'fmpz_mod_mpoly/is_canonical.c',
-  'fmpz_mod_mpoly/is_fmpz.c',
-  'fmpz_mod_mpoly/is_gen.c',
-  'fmpz_mod_mpoly/lead_coeff_vars.c',
-  'fmpz_mod_mpoly/make_monic.c',
-  'fmpz_mod_mpoly/mul.c',
-  'fmpz_mod_mpoly/mul_dense.c',
-  'fmpz_mod_mpoly/mul_johnson.c',
-  'fmpz_mod_mpoly/neg.c',
-  'fmpz_mod_mpoly/pow_fmpz.c',
-  'fmpz_mod_mpoly/pow_rmul.c',
-  'fmpz_mod_mpoly/pow_ui.c',
-  'fmpz_mod_mpoly/push_term_fmpz_fmpz.c',
-  'fmpz_mod_mpoly/push_term_fmpz_ui.c',
-  'fmpz_mod_mpoly/quadratic_root.c',
-  'fmpz_mod_mpoly/randtest_bits.c',
-  'fmpz_mod_mpoly/randtest_bound.c',
-  'fmpz_mod_mpoly/randtest_bounds.c',
-  'fmpz_mod_mpoly/repack_bits.c',
-  'fmpz_mod_mpoly/resize.c',
-  'fmpz_mod_mpoly/resultant.c',
-  'fmpz_mod_mpoly/scalar_addmul_fmpz.c',
-  'fmpz_mod_mpoly/scalar_mul_fmpz.c',
-  'fmpz_mod_mpoly/set.c',
-  'fmpz_mod_mpoly/set_coeff_fmpz_fmpz.c',
-  'fmpz_mod_mpoly/set_coeff_fmpz_monomial.c',
-  'fmpz_mod_mpoly/set_coeff_fmpz_ui.c',
-  'fmpz_mod_mpoly/set_fmpz.c',
-  'fmpz_mod_mpoly/set_str_pretty.c',
-  'fmpz_mod_mpoly/set_term_coeff_fmpz.c',
-  'fmpz_mod_mpoly/set_term_exp_fmpz.c',
-  'fmpz_mod_mpoly/set_term_exp_ui.c',
-  'fmpz_mod_mpoly/sort_terms.c',
-  'fmpz_mod_mpoly/sqrt_heap.c',
-  'fmpz_mod_mpoly/sub.c',
-  'fmpz_mod_mpoly/sub_fmpz.c',
-  'fmpz_mod_mpoly/term_content.c',
-  'fmpz_mod_mpoly/term_exp_fits.c',
-  'fmpz_mod_mpoly/to_from_nmod_poly.c',
-  'fmpz_mod_mpoly/univar.c',
-  'fmpz_mod_mpoly/void_ring.c',
-  'fmpz_mod/mul.c',
-  'fmpz_mod/neg.c',
-  'fmpz_mod/next_smooth_prime.c',
-  'fmpz_mod_poly/add.c',
-  'fmpz_mod_poly/add_series.c',
-  'fmpz_mod_poly/attributes.c',
-  'fmpz_mod_poly/berlekamp_massey.c',
-  'fmpz_mod_poly/clear.c',
-  'fmpz_mod_poly/comparison.c',
-  'fmpz_mod_poly/compose.c',
-  'fmpz_mod_poly/compose_mod_brent_kung.c',
-  'fmpz_mod_poly/compose_mod_brent_kung_precomp_preinv.c',
-  'fmpz_mod_poly/compose_mod_brent_kung_preinv.c',
-  'fmpz_mod_poly/compose_mod_brent_kung_vec_preinv.c',
-  'fmpz_mod_poly/compose_mod_brent_kung_vec_preinv_threaded.c',
-  'fmpz_mod_poly/compose_mod.c',
-  'fmpz_mod_poly/compose_mod_horner.c',
-  'fmpz_mod_poly/deflate.c',
-  'fmpz_mod_poly/deflation.c',
-  'fmpz_mod_poly/derivative.c',
-  'fmpz_mod_poly/discriminant.c',
-  'fmpz_mod_poly/div.c',
-  'fmpz_mod_poly/divides.c',
-  'fmpz_mod_poly/divides_classical.c',
-  'fmpz_mod_poly/div_newton_n_preinv.c',
-  'fmpz_mod_poly/divrem_basecase.c',
-  'fmpz_mod_poly/divrem.c',
-  'fmpz_mod_poly/divrem_f.c',
-  'fmpz_mod_poly/divrem_newton_n_preinv.c',
-  'fmpz_mod_poly/div_series.c',
-  'fmpz_mod_poly/evaluate_fmpz.c',
-  'fmpz_mod_poly/evaluate_fmpz_vec.c',
-  'fmpz_mod_poly_factor/clear.c',
-  'fmpz_mod_poly_factor/concat.c',
-  'fmpz_mod_poly_factor/factor_berlekamp.c',
-  'fmpz_mod_poly_factor/factor.c',
-  'fmpz_mod_poly_factor/factor_cantor_zassenhaus.c',
-  'fmpz_mod_poly_factor/factor_distinct_deg.c',
-  'fmpz_mod_poly_factor/factor_distinct_deg_threaded.c',
-  'fmpz_mod_poly_factor/factor_equal_deg.c',
-  'fmpz_mod_poly_factor/factor_equal_deg_prob.c',
-  'fmpz_mod_poly_factor/factor_kaltofen_shoup.c',
-  'fmpz_mod_poly_factor/factor_squarefree.c',
-  'fmpz_mod_poly_factor/fit_length.c',
-  'fmpz_mod_poly_factor/get_poly.c',
-  'fmpz_mod_poly_factor/init.c',
-  'fmpz_mod_poly_factor/inlines.c',
-  'fmpz_mod_poly_factor/insert.c',
-  'fmpz_mod_poly_factor/is_irreducible.c',
-  'fmpz_mod_poly_factor/is_irreducible_ddf.c',
-  'fmpz_mod_poly_factor/is_irreducible_rabin.c',
-  'fmpz_mod_poly_factor/is_irreducible_rabin_f.c',
-  'fmpz_mod_poly_factor/is_squarefree.c',
-  'fmpz_mod_poly_factor/is_squarefree_f.c',
-  'fmpz_mod_poly_factor/pow.c',
-  'fmpz_mod_poly_factor/print.c',
-  'fmpz_mod_poly_factor/print_pretty.c',
-  'fmpz_mod_poly_factor/realloc.c',
-  'fmpz_mod_poly_factor/roots.c',
-  'fmpz_mod_poly_factor/roots_factored.c',
-  'fmpz_mod_poly_factor/set.c',
-  'fmpz_mod_poly/find_distinct_nonzero_roots.c',
-  'fmpz_mod_poly/fit_length.c',
-  'fmpz_mod_poly/frobenius_power.c',
-  'fmpz_mod_poly/frobenius_powers_2exp_clear.c',
-  'fmpz_mod_poly/frobenius_powers_2exp_precomp.c',
-  'fmpz_mod_poly/frobenius_powers_clear.c',
-  'fmpz_mod_poly/frobenius_powers_precomp.c',
-  'fmpz_mod_poly/gcd.c',
-  'fmpz_mod_poly/gcd_euclidean_f.c',
-  'fmpz_mod_poly/gcdinv.c',
-  'fmpz_mod_poly/gcdinv_euclidean.c',
-  'fmpz_mod_poly/gcdinv_euclidean_f.c',
-  'fmpz_mod_poly/gcdinv_f.c',
-  'fmpz_mod_poly/gen.c',
-  'fmpz_mod_poly/get.c',
-  'fmpz_mod_poly/get_str.c',
-  'fmpz_mod_poly/hamming_weight.c',
-  'fmpz_mod_poly/hgcd.c',
-  'fmpz_mod_poly/inflate.c',
-  'fmpz_mod_poly/init.c',
-  'fmpz_mod_poly/inlines.c',
-  'fmpz_mod_poly/invmod.c',
-  'fmpz_mod_poly/invmod_f.c',
-  'fmpz_mod_poly/inv_series.c',
-  'fmpz_mod_poly/inv_series_newton_f.c',
-  'fmpz_mod_poly/invsqrt_series.c',
-  'fmpz_mod_poly/io.c',
-  'fmpz_mod_poly/is_canonical.c',
-  'fmpz_mod_poly/make_monic.c',
-  'fmpz_mod_poly/make_monic_f.c',
-  'fmpz_mod_poly/minpoly.c',
-  'fmpz_mod_poly/mul.c',
-  'fmpz_mod_poly/mulhigh.c',
-  'fmpz_mod_poly/mullow.c',
-  'fmpz_mod_poly/mulmod.c',
-  'fmpz_mod_poly/mulmod_preinv.c',
-  'fmpz_mod_poly/neg.c',
-  'fmpz_mod_poly/one.c',
-  'fmpz_mod_poly/pow.c',
-  'fmpz_mod_poly/powers_mod_bsgs_threaded.c',
-  'fmpz_mod_poly/powers_mod_naive.c',
-  'fmpz_mod_poly/powmod_fmpz_binexp.c',
-  'fmpz_mod_poly/powmod_fmpz_binexp_preinv.c',
-  'fmpz_mod_poly/powmod_linear_fmpz_preinv.c',
-  'fmpz_mod_poly/powmod_ui_binexp.c',
-  'fmpz_mod_poly/powmod_ui_binexp_preinv.c',
-  'fmpz_mod_poly/powmod_x_fmpz_preinv.c',
-  'fmpz_mod_poly/pow_trunc_binexp.c',
-  'fmpz_mod_poly/pow_trunc.c',
-  'fmpz_mod_poly/product_roots_fmpz_vec.c',
-  'fmpz_mod_poly/radix.c',
-  'fmpz_mod_poly/randtest.c',
-  'fmpz_mod_poly/randtest_monic_primitive.c',
-  'fmpz_mod_poly/realloc.c',
-  'fmpz_mod_poly/rem_basecase.c',
-  'fmpz_mod_poly/rem.c',
-  'fmpz_mod_poly/remove.c',
-  'fmpz_mod_poly/resultant.c',
-  'fmpz_mod_poly/reverse.c',
-  'fmpz_mod_poly/scalar.c',
-  'fmpz_mod_poly/set.c',
-  'fmpz_mod_poly/set_get_coeff.c',
-  'fmpz_mod_poly/set_length.c',
-  'fmpz_mod_poly/set_trunc.c',
-  'fmpz_mod_poly/shift_left.c',
-  'fmpz_mod_poly/shift_right.c',
-  'fmpz_mod_poly/sqr.c',
-  'fmpz_mod_poly/sqrt.c',
-  'fmpz_mod_poly/sqrt_series.c',
-  'fmpz_mod_poly/sub.c',
-  'fmpz_mod_poly/sub_series.c',
-  'fmpz_mod_poly/tree.c',
-  'fmpz_mod_poly/truncate.c',
-  'fmpz_mod_poly/xgcd.c',
-  'fmpz_mod_poly/xgcd_euclidean_f.c',
-  'fmpz_mod_poly/zero_coeffs.c',
-  'fmpz_mod/pow.c',
-  'fmpz_mod/rand.c',
-  'fmpz_mod/set_fmpz.c',
-  'fmpz_mod/set_modulus.c',
-  'fmpz_mod/sub.c',
-  'fmpz_mod_vec/add.c',
-  'fmpz_mod_vec/dot.c',
-  'fmpz_mod_vec/mul.c',
-  'fmpz_mod_vec/neg.c',
-  'fmpz_mod_vec/scalar.c',
-  'fmpz_mod_vec/set_fmpz_vec.c',
-  'fmpz_mod_vec/sub.c',
-  'fmpz/moebius_mu.c',
-  'fmpz_mpoly/add.c',
-  'fmpz_mpoly/add_fmpz.c',
-  'fmpz_mpoly/buchberger_naive.c',
-  'fmpz_mpoly/clear.c',
-  'fmpz_mpoly/cmp.c',
-  'fmpz_mpoly/combine_like_terms.c',
-  'fmpz_mpoly/compose_fmpz_mpoly.c',
-  'fmpz_mpoly/compose_fmpz_mpoly_gen.c',
-  'fmpz_mpoly/compose_fmpz_mpoly_geobucket.c',
-  'fmpz_mpoly/compose_fmpz_mpoly_horner.c',
-  'fmpz_mpoly/compose_fmpz_poly.c',
-  'fmpz_mpoly/compose_mat.c',
-  'fmpz_mpoly/content_vars.c',
-  'fmpz_mpoly/ctx.c',
-  'fmpz_mpoly/deflate.c',
-  'fmpz_mpoly/deflation.c',
-  'fmpz_mpoly/degrees.c',
-  'fmpz_mpoly/derivative.c',
-  'fmpz_mpoly/discriminant.c',
-  'fmpz_mpoly/div.c',
-  'fmpz_mpoly/divides_array.c',
-  'fmpz_mpoly/divides.c',
-  'fmpz_mpoly/divides_heap_threaded.c',
-  'fmpz_mpoly/divides_monagan_pearce.c',
-  'fmpz_mpoly/div_monagan_pearce.c',
-  'fmpz_mpoly/divrem_array.c',
-  'fmpz_mpoly/divrem.c',
-  'fmpz_mpoly/divrem_ideal.c',
-  'fmpz_mpoly/equal.c',
-  'fmpz_mpoly/equal_fmpz.c',
-  'fmpz_mpoly/equal_si.c',
-  'fmpz_mpoly/equal_ui.c',
-  'fmpz_mpoly/evaluate_all.c',
-  'fmpz_mpoly/evaluate_all_fmpz_mod.c',
-  'fmpz_mpoly/evaluate_all_nmod.c',
-  'fmpz_mpoly/evaluate_one.c',
-  'fmpz_mpoly_factor/add.c',
-  'fmpz_mpoly_factor/bpoly.c',
-  'fmpz_mpoly_factor/bpoly_factor.c',
-  'fmpz_mpoly_factor/clear.c',
-  'fmpz_mpoly_factor/cmp.c',
-  'fmpz_mpoly_factor/compression.c',
-  'fmpz_mpoly_factor/eval.c',
-  'fmpz_mpoly_factor/expand.c',
-  'fmpz_mpoly_factor/factor_bound_si.c',
-  'fmpz_mpoly_factor/factor.c',
-  'fmpz_mpoly_factor/factor_content.c',
-  'fmpz_mpoly_factor/factor_squarefree.c',
-  'fmpz_mpoly_factor/fit_length.c',
-  'fmpz_mpoly_factor/gcd_algo.c',
-  'fmpz_mpoly_factor/gcd_brown.c',
-  'fmpz_mpoly_factor/gcd_brown_threaded.c',
-  'fmpz_mpoly_factor/gcd_hensel.c',
-  'fmpz_mpoly_factor/gcd_zippel2.c',
-  'fmpz_mpoly_factor/gcd_zippel.c',
-  'fmpz_mpoly_factor/get_set_lead0.c',
-  'fmpz_mpoly_factor/init.c',
-  'fmpz_mpoly_factor/inlines.c',
-  'fmpz_mpoly_factor/interp.c',
-  'fmpz_mpoly_factor/irred_wang.c',
-  'fmpz_mpoly_factor/irred_zassenhaus.c',
-  'fmpz_mpoly_factor/irred_zippel.c',
-  'fmpz_mpoly_factor/lcc_kaltofen.c',
-  'fmpz_mpoly_factor/lcc_wang.c',
-  'fmpz_mpoly_factor/misc.c',
-  'fmpz_mpoly_factor/mpoly_hlift.c',
-  'fmpz_mpoly_factor/mpolyl.c',
-  'fmpz_mpoly_factor/mpoly_pfrac.c',
-  'fmpz_mpoly_factor/mpolyv.c',
-  'fmpz_mpoly_factor/poly_pfrac.c',
-  'fmpz_mpoly_factor/print_pretty.c',
-  'fmpz_mpoly_factor/realloc.c',
-  'fmpz_mpoly_factor/set.c',
-  'fmpz_mpoly_factor/sort.c',
-  'fmpz_mpoly_factor/tpoly.c',
-  'fmpz_mpoly_factor/tuple.c',
-  'fmpz_mpoly/fit_bits.c',
-  'fmpz_mpoly/fit_length.c',
-  'fmpz_mpoly/fit_length_reset_bits.c',
-  'fmpz_mpoly/gcd_brown.c',
-  'fmpz_mpoly/gcd.c',
-  'fmpz_mpoly/gcd_cofactors.c',
-  'fmpz_mpoly/gcd_hensel.c',
-  'fmpz_mpoly/gcd_subresultant.c',
-  'fmpz_mpoly/gcd_zippel2.c',
-  'fmpz_mpoly/gcd_zippel.c',
-  'fmpz_mpoly/gen.c',
-  'fmpz_mpoly/geobuckets.c',
-  'fmpz_mpoly/get_coeff_fmpz_fmpz.c',
-  'fmpz_mpoly/get_coeff_fmpz_monomial.c',
-  'fmpz_mpoly/get_coeff_fmpz_ui.c',
-  'fmpz_mpoly/get_coeff_si_fmpz.c',
-  'fmpz_mpoly/get_coeff_si_ui.c',
-  'fmpz_mpoly/get_coeff_ui_fmpz.c',
-  'fmpz_mpoly/get_coeff_ui_ui.c',
-  'fmpz_mpoly/get_coeff_vars_ui.c',
-  'fmpz_mpoly/get_fmpz.c',
-  'fmpz_mpoly/get_set_is_fmpz_poly.c',
-  'fmpz_mpoly/get_str_pretty.c',
-  'fmpz_mpoly/get_term.c',
-  'fmpz_mpoly/get_term_coeff_fmpz.c',
-  'fmpz_mpoly/get_term_exp_fmpz.c',
-  'fmpz_mpoly/get_term_exp_si.c',
-  'fmpz_mpoly/get_term_exp_ui.c',
-  'fmpz_mpoly/get_term_monomial.c',
-  'fmpz_mpoly/get_term_var_exp_si.c',
-  'fmpz_mpoly/get_term_var_exp_ui.c',
-  'fmpz_mpoly/inflate.c',
-  'fmpz_mpoly/init.c',
-  'fmpz_mpoly/inlines.c',
-  'fmpz_mpoly/integral.c',
-  'fmpz_mpoly/io.c',
-  'fmpz_mpoly/is_canonical.c',
-  'fmpz_mpoly/is_fmpz.c',
-  'fmpz_mpoly/is_gen.c',
-  'fmpz_mpoly/lead_coeff_vars.c',
-  'fmpz_mpoly/misc.c',
-  'fmpz_mpoly/mpolyd.c',
-  'fmpz_mpoly/mul_array.c',
-  'fmpz_mpoly/mul_array_threaded.c',
-  'fmpz_mpoly/mul.c',
-  'fmpz_mpoly/mul_dense.c',
-  'fmpz_mpoly/mul_heap_threaded.c',
-  'fmpz_mpoly/mul_johnson.c',
-  'fmpz_mpoly/mul_monomial.c',
-  'fmpz_mpoly/neg.c',
-  'fmpz_mpoly/pow_fmpz.c',
-  'fmpz_mpoly/pow_fps.c',
-  'fmpz_mpoly/pow_ui.c',
-  'fmpz_mpoly/primitive_part.c',
-  'fmpz_mpoly/push_term_fmpz_fmpz.c',
-  'fmpz_mpoly/push_term_fmpz_ui.c',
-  'fmpz_mpoly_q/add.c',
-  'fmpz_mpoly_q/canonicalise.c',
-  'fmpz_mpoly_q/clear.c',
-  'fmpz_mpoly_q/div.c',
-  'fmpz_mpoly_q/equal.c',
-  'fmpz_mpoly_q/evaluate_acb.c',
-  'fmpz_mpoly_q/init.c',
-  'fmpz_mpoly_q/inlines.c',
-  'fmpz_mpoly_q/inv.c',
-  'fmpz_mpoly_q/is_canonical.c',
-  'fmpz_mpoly_q/mul.c',
-  'fmpz_mpoly_q/neg.c',
-  'fmpz_mpoly_q/print_pretty.c',
-  'fmpz_mpoly_q/randtest.c',
-  'fmpz_mpoly_q/set.c',
-  'fmpz_mpoly_q/sub.c',
-  'fmpz_mpoly_q/swap.c',
-  'fmpz_mpoly/quasidiv.c',
-  'fmpz_mpoly/quasidiv_heap.c',
-  'fmpz_mpoly/quasidivrem.c',
-  'fmpz_mpoly/quasidivrem_heap.c',
-  'fmpz_mpoly/quasidivrem_ideal.c',
-  'fmpz_mpoly/quasidivrem_ideal_heap.c',
-  'fmpz_mpoly_q/used_vars.c',
-  'fmpz_mpoly/randtest_bits.c',
-  'fmpz_mpoly/randtest_bound.c',
-  'fmpz_mpoly/randtest_bounds.c',
-  'fmpz_mpoly/realloc.c',
-  'fmpz_mpoly/reduction_primitive_part.c',
-  'fmpz_mpoly/repack_bits.c',
-  'fmpz_mpoly/resize.c',
-  'fmpz_mpoly/resultant.c',
-  'fmpz_mpoly/reverse.c',
-  'fmpz_mpoly/scalar_divexact_fmpz.c',
-  'fmpz_mpoly/scalar_divides_fmpz.c',
-  'fmpz_mpoly/scalar_fmma.c',
-  'fmpz_mpoly/scalar_mul_fmpz.c',
-  'fmpz_mpoly/select_exps.c',
-  'fmpz_mpoly/set.c',
-  'fmpz_mpoly/set_coeff_fmpz_fmpz.c',
-  'fmpz_mpoly/set_coeff_fmpz_monomial.c',
-  'fmpz_mpoly/set_coeff_fmpz_ui.c',
-  'fmpz_mpoly/set_coeff_si_fmpz.c',
-  'fmpz_mpoly/set_coeff_si_ui.c',
-  'fmpz_mpoly/set_coeff_ui_fmpz.c',
-  'fmpz_mpoly/set_coeff_ui_ui.c',
-  'fmpz_mpoly/set_fmpz.c',
-  'fmpz_mpoly/set_si.c',
-  'fmpz_mpoly/set_str_pretty.c',
-  'fmpz_mpoly/set_term_coeff_fmpz.c',
-  'fmpz_mpoly/set_term_exp_fmpz.c',
-  'fmpz_mpoly/set_term_exp_ui.c',
-  'fmpz_mpoly/set_ui.c',
-  'fmpz_mpoly/sort_terms.c',
-  'fmpz_mpoly/spoly.c',
-  'fmpz_mpoly/sqrt_heap.c',
-  'fmpz_mpoly/sub.c',
-  'fmpz_mpoly/sub_fmpz.c',
-  'fmpz_mpoly/symmetric.c',
-  'fmpz_mpoly/term_content.c',
-  'fmpz_mpoly/term_exp_fits.c',
-  'fmpz_mpoly/to_from_fmpz_poly.c',
-  'fmpz_mpoly/univar.c',
-  'fmpz_mpoly/vec_autoreduction.c',
-  'fmpz_mpoly/vec_autoreduction_groebner.c',
-  'fmpz_mpoly/vec.c',
-  'fmpz_mpoly/vec_is_autoreduced.c',
-  'fmpz_mpoly/vec_is_groebner.c',
-  'fmpz_mpoly/vec_set_length.c',
-  'fmpz_mpoly/vec_set_primitive_unique.c',
-  'fmpz_mpoly/void_ring.c',
-  'fmpz/mpz_readonly.c',
-  'fmpz/mul_2exp.c',
-  'fmpz/mul.c',
-  'fmpz/mul_si_tdiv_q_2exp.c',
-  'fmpz/mul_tdiv_q_2exp.c',
-  'fmpz/multi_CRT.c',
-  'fmpz/multi_mod.c',
-  'fmpz/ndiv_qr.c',
-  'fmpz/neg.c',
-  'fmpz/nextprime.c',
-  'fmpz/one_2exp.c',
-  'fmpz_poly/2norm.c',
-  'fmpz_poly/2norm_normalised_bits.c',
-  'fmpz_poly/add.c',
-  'fmpz_poly/add_series.c',
-  'fmpz_poly/bit_pack.c',
-  'fmpz_poly/bit_unpack.c',
-  'fmpz_poly/bound_roots.c',
-  'fmpz_poly/chebyshev_t.c',
-  'fmpz_poly/chebyshev_u.c',
-  'fmpz_poly/CLD_bound.c',
-  'fmpz_poly/clear.c',
-  'fmpz_poly/compose.c',
-  'fmpz_poly/compose_divconquer.c',
-  'fmpz_poly/compose_horner.c',
-  'fmpz_poly/compose_series.c',
-  'fmpz_poly/content.c',
-  'fmpz_poly/cos_minpoly.c',
-  'fmpz_poly/CRT_ui.c',
-  'fmpz_poly/cyclotomic.c',
-  'fmpz_poly/deflate.c',
-  'fmpz_poly/deflation.c',
-  'fmpz_poly/derivative.c',
-  'fmpz_poly/discriminant.c',
-  'fmpz_poly/div_basecase.c',
-  'fmpz_poly/div.c',
-  'fmpz_poly/div_divconquer.c',
-  'fmpz_poly/div_divconquer_recursive.c',
-  'fmpz_poly/divexact.c',
-  'fmpz_poly/divhigh_smodp.c',
-  'fmpz_poly/divides.c',
-  'fmpz_poly/divlow_smodp.c',
-  'fmpz_poly/div_preinv.c',
-  'fmpz_poly/divrem_basecase.c',
-  'fmpz_poly/divrem.c',
-  'fmpz_poly/divrem_divconquer.c',
-  'fmpz_poly/divrem_divconquer_recursive.c',
-  'fmpz_poly/divremlow_divconquer_recursive.c',
-  'fmpz_poly/divrem_preinv.c',
-  'fmpz_poly/div_root.c',
-  'fmpz_poly/div_series_basecase.c',
-  'fmpz_poly/div_series.c',
-  'fmpz_poly/div_series_divconquer.c',
-  'fmpz_poly/equal.c',
-  'fmpz_poly/equal_trunc.c',
-  'fmpz_poly/eta_qexp.c',
-  'fmpz_poly/eulerian_polynomial.c',
-  'fmpz_poly/evaluate_divconquer_fmpq.c',
-  'fmpz_poly/evaluate_divconquer_fmpz.c',
-  'fmpz_poly/evaluate_fmpq.c',
-  'fmpz_poly/evaluate_fmpz.c',
-  'fmpz_poly/evaluate_fmpz_vec.c',
-  'fmpz_poly/evaluate_horner_d_2exp.c',
-  'fmpz_poly/evaluate_horner_d.c',
-  'fmpz_poly/evaluate_horner_fmpq.c',
-  'fmpz_poly/evaluate_horner_fmpz.c',
-  'fmpz_poly/evaluate_mod.c',
-  'fmpz_poly_factor/CLD_mat.c',
-  'fmpz_poly_factor/clear.c',
-  'fmpz_poly_factor/concat.c',
-  'fmpz_poly_factor/factor.c',
-  'fmpz_poly_factor/factor_cubic.c',
-  'fmpz_poly_factor/factor_quadratic.c',
-  'fmpz_poly_factor/factor_squarefree.c',
-  'fmpz_poly_factor/factor_van_hoeij.c',
-  'fmpz_poly_factor/factor_zassenhaus.c',
-  'fmpz_poly_factor/factor_zassenhaus_recombination.c',
-  'fmpz_poly_factor/fit_length.c',
-  'fmpz_poly_factor/init.c',
-  'fmpz_poly_factor/inlines.c',
-  'fmpz_poly_factor/insert.c',
-  'fmpz_poly_factor/print.c',
-  'fmpz_poly_factor/realloc.c',
-  'fmpz_poly_factor/set.c',
-  'fmpz_poly_factor/van_hoeij_check_if_solved.c',
-  'fmpz_poly_factor/zassenhaus_prune.c',
-  'fmpz_poly_factor/zassenhaus_subset.c',
-  'fmpz_poly/fibonacci.c',
-  'fmpz_poly/fit_length.c',
-  'fmpz_poly/gcd.c',
-  'fmpz_poly/gcd_heuristic.c',
-  'fmpz_poly/gcd_modular.c',
-  'fmpz_poly/gcd_subresultant.c',
-  'fmpz_poly/get_coeff.c',
-  'fmpz_poly/get_nmod_poly.c',
-  'fmpz_poly/get_str.c',
-  'fmpz_poly/hensel_build_tree.c',
-  'fmpz_poly/hensel_continue_lift.c',
-  'fmpz_poly/hensel_lift.c',
-  'fmpz_poly/hensel_lift_once.c',
-  'fmpz_poly/hensel_lift_only_inverse.c',
-  'fmpz_poly/hensel_lift_tree.c',
-  'fmpz_poly/hensel_lift_tree_recursive.c',
-  'fmpz_poly/hensel_lift_without_inverse.c',
-  'fmpz_poly/hensel_start_lift.c',
-  'fmpz_poly/hermite_h.c',
-  'fmpz_poly/hermite_he.c',
-  'fmpz_poly/inflate.c',
-  'fmpz_poly/init.c',
-  'fmpz_poly/inlines.c',
-  'fmpz_poly/interpolate_fmpz_vec.c',
-  'fmpz_poly/inv_series.c',
-  'fmpz_poly/io.c',
-  'fmpz_poly/is_cyclotomic.c',
-  'fmpz_poly/is_one.c',
-  'fmpz_poly/is_squarefree.c',
-  'fmpz_poly/lcm.c',
-  'fmpz_poly/legendre_pt.c',
-  'fmpz_poly_mat/add.c',
-  'fmpz_poly_mat/clear.c',
-  'fmpz_poly_mat/concat.c',
-  'fmpz_poly_mat/det.c',
-  'fmpz_poly_mat/det_fflu.c',
-  'fmpz_poly_mat/det_interpolate.c',
-  'fmpz_poly_mat/equal.c',
-  'fmpz_poly_mat/evaluate_fmpz.c',
-  'fmpz_poly_mat/fflu.c',
-  'fmpz_poly_mat/find_pivot_any.c',
-  'fmpz_poly_mat/find_pivot_partial.c',
-  'fmpz_poly_mat/init.c',
-  'fmpz_poly_mat/inlines.c',
-  'fmpz_poly_mat/inv.c',
-  'fmpz_poly_mat/is_one.c',
-  'fmpz_poly_mat/is_zero.c',
-  'fmpz_poly_mat/max_bits.c',
-  'fmpz_poly_mat/max_length.c',
-  'fmpz_poly_mat/mul.c',
-  'fmpz_poly_mat/mul_classical.c',
-  'fmpz_poly_mat/mul_KS.c',
-  'fmpz_poly_mat/mullow.c',
-  'fmpz_poly_mat/neg.c',
-  'fmpz_poly_mat/nullspace.c',
-  'fmpz_poly_mat/one.c',
-  'fmpz_poly_mat/pow.c',
-  'fmpz_poly_mat/pow_trunc.c',
-  'fmpz_poly_mat/print.c',
-  'fmpz_poly_mat/prod.c',
-  'fmpz_poly_mat/rand.c',
-  'fmpz_poly_mat/rank.c',
-  'fmpz_poly_mat/rref.c',
-  'fmpz_poly_mat/scalar.c',
-  'fmpz_poly_mat/set.c',
-  'fmpz_poly_mat/solve.c',
-  'fmpz_poly_mat/solve_fflu.c',
-  'fmpz_poly_mat/solve_fflu_precomp.c',
-  'fmpz_poly_mat/sqr.c',
-  'fmpz_poly_mat/sqr_classical.c',
-  'fmpz_poly_mat/sqr_KS.c',
-  'fmpz_poly_mat/sqrlow.c',
-  'fmpz_poly_mat/sub.c',
-  'fmpz_poly_mat/swap.c',
-  'fmpz_poly_mat/trace.c',
-  'fmpz_poly_mat/transpose.c',
-  'fmpz_poly_mat/truncate.c',
-  'fmpz_poly_mat/window.c',
-  'fmpz_poly_mat/zero.c',
-  'fmpz_poly/monomial_to_newton.c',
-  'fmpz_poly/mul.c',
-  'fmpz_poly/mul_classical.c',
-  'fmpz_poly/mulhigh.c',
-  'fmpz_poly/mulhigh_classical.c',
-  'fmpz_poly/mulhigh_karatsuba_n.c',
-  'fmpz_poly/mulhigh_n.c',
-  'fmpz_poly/mul_karatsuba.c',
-  'fmpz_poly/mul_KS.c',
-  'fmpz_poly/mullow.c',
-  'fmpz_poly/mullow_classical.c',
-  'fmpz_poly/mullow_karatsuba_n.c',
-  'fmpz_poly/mullow_KS.c',
-  'fmpz_poly/mullow_SS.c',
-  'fmpz_poly/mullow_SS_precache.c',
-  'fmpz_poly/mulmid_classical.c',
-  'fmpz_poly/mul_SS.c',
-  'fmpz_poly/neg.c',
-  'fmpz_poly/newton_to_monomial.c',
-  'fmpz_poly/normalise.c',
-  'fmpz_poly/norms.c',
-  'fmpz_poly/nth_derivative.c',
-  'fmpz_poly/num_real_roots.c',
-  'fmpz_poly/num_real_roots_sturm.c',
-  'fmpz_poly/pow_addchains.c',
-  'fmpz_poly/pow_binexp.c',
-  'fmpz_poly/pow_binomial.c',
-  'fmpz_poly/pow.c',
-  'fmpz_poly/powers_clear.c',
-  'fmpz_poly/powers_precompute.c',
-  'fmpz_poly/power_sums.c',
-  'fmpz_poly/power_sums_naive.c',
-  'fmpz_poly/power_sums_to_poly.c',
-  'fmpz_poly/pow_multinomial.c',
-  'fmpz_poly/pow_small.c',
-  'fmpz_poly/pow_trunc.c',
-  'fmpz_poly/preinvert.c',
-  'fmpz_poly/primitive_part.c',
-  'fmpz_poly/product_roots_fmpq_vec.c',
-  'fmpz_poly/product_roots_fmpz_vec.c',
-  'fmpz_poly/pseudo_div.c',
-  'fmpz_poly/pseudo_divrem_basecase.c',
-  'fmpz_poly/pseudo_divrem_cohen.c',
-  'fmpz_poly/pseudo_divrem_divconquer.c',
-  'fmpz_poly/pseudo_rem.c',
-  'fmpz_poly/pseudo_rem_cohen.c',
-  'fmpz_poly_q/add.c',
-  'fmpz_poly_q/addmul.c',
-  'fmpz_poly_q/canonicalise.c',
-  'fmpz_poly_q/clear.c',
-  'fmpz_poly_q/derivative.c',
-  'fmpz_poly_q/div.c',
-  'fmpz_poly_q/evaluate_fmpq.c',
-  'fmpz_poly_q/get_str.c',
-  'fmpz_poly_q/get_str_pretty.c',
-  'fmpz_poly_q/init.c',
-  'fmpz_poly_q/inlines.c',
-  'fmpz_poly_q/inv.c',
-  'fmpz_poly_q/is_canonical.c',
-  'fmpz_poly_q/mul.c',
-  'fmpz_poly_q/pow.c',
-  'fmpz_poly_q/print.c',
-  'fmpz_poly_q/print_pretty.c',
-  'fmpz_poly_q/randtest.c',
-  'fmpz_poly_q/scalar.c',
-  'fmpz_poly_q/set.c',
-  'fmpz_poly_q/set_str.c',
-  'fmpz_poly_q/sub.c',
-  'fmpz_poly_q/submul.c',
-  'fmpz_poly_q/swap.c',
-  'fmpz_poly/randtest.c',
-  'fmpz_poly/randtest_no_real_root.c',
-  'fmpz_poly/realloc.c',
-  'fmpz_poly/rem_basecase.c',
-  'fmpz_poly/rem.c',
-  'fmpz_poly/remove.c',
-  'fmpz_poly/remove_content_2exp.c',
-  'fmpz_poly/rem_powers_precomp.c',
-  'fmpz_poly/resultant.c',
-  'fmpz_poly/resultant_euclidean.c',
-  'fmpz_poly/resultant_modular.c',
-  'fmpz_poly/resultant_modular_div.c',
-  'fmpz_poly/reverse.c',
-  'fmpz_poly/revert_series.c',
-  'fmpz_poly/scalar.c',
-  'fmpz_poly/scale_2exp.c',
-  'fmpz_poly/set.c',
-  'fmpz_poly/set_coeff.c',
-  'fmpz_poly/set_length.c',
-  'fmpz_poly/set_str.c',
-  'fmpz_poly/set_trunc.c',
-  'fmpz_poly/shift_left.c',
-  'fmpz_poly/shift_right.c',
-  'fmpz_poly/signature.c',
-  'fmpz_poly/sqr.c',
-  'fmpz_poly/sqr_classical.c',
-  'fmpz_poly/sqr_karatsuba.c',
-  'fmpz_poly/sqr_KS.c',
-  'fmpz_poly/sqrlow.c',
-  'fmpz_poly/sqrlow_classical.c',
-  'fmpz_poly/sqrlow_karatsuba_n.c',
-  'fmpz_poly/sqrlow_KS.c',
-  'fmpz_poly/sqrt.c',
-  'fmpz_poly/sqrt_classical.c',
-  'fmpz_poly/sqrt_divconquer.c',
-  'fmpz_poly/sqrt_KS.c',
-  'fmpz_poly/sqrtrem_classical.c',
-  'fmpz_poly/sqrtrem_divconquer.c',
-  'fmpz_poly/sqrt_series.c',
-  'fmpz_poly/sub.c',
-  'fmpz_poly/sub_series.c',
-  'fmpz_poly/swap.c',
-  'fmpz_poly/swinnerton_dyer.c',
-  'fmpz_poly/taylor_shift.c',
-  'fmpz_poly/taylor_shift_divconquer.c',
-  'fmpz_poly/taylor_shift_horner.c',
-  'fmpz_poly/taylor_shift_multi_mod_threaded.c',
-  'fmpz_poly/theta_qexp.c',
-  'fmpz_poly/truncate.c',
-  'fmpz_poly/xgcd_modular.c',
-  'fmpz_poly/zero_coeffs.c',
-  'fmpz/pow.c',
-  'fmpz/powm.c',
-  'fmpz/powmod2_fmpz_preinv.c',
-  'fmpz/preinvn.c',
-  'fmpz/primorial.c',
-  'fmpz/rand.c',
-  'fmpz/remove.c',
-  'fmpz/rfac.c',
-  'fmpz/root.c',
-  'fmpz/setbit.c',
-  'fmpz/set.c',
-  'fmpz/set_str.c',
-  'fmpz/sgn.c',
-  'fmpz/size.c',
-  'fmpz/sizeinbase.c',
-  'fmpz/smod.c',
-  'fmpz/sqrt.c',
-  'fmpz/sqrtmod.c',
-  'fmpz/sqrtrem.c',
-  'fmpz/sub.c',
-  'fmpz/submul.c',
-  'fmpz/tdiv.c',
-  'fmpz/tstbit.c',
-  'fmpz/val2.c',
-  'fmpz_vec/add.c',
-  'fmpz_vec/clear.c',
-  'fmpz_vec/content.c',
-  'fmpz_vec/content_chained.c',
-  'fmpz_vec/dot.c',
-  'fmpz_vec/equal.c',
-  'fmpz_vec/get_d_vec_2exp.c',
-  'fmpz_vec/get_fft.c',
-  'fmpz_vec/get_nmod_vec.c',
-  'fmpz_vec/height.c',
-  'fmpz_vec/height_index.c',
-  'fmpz_vec/inlines.c',
-  'fmpz_vec/io.c',
-  'fmpz_vec/is_zero.c',
-  'fmpz_vec/lcm.c',
-  'fmpz_vec/max_bits.c',
-  'fmpz_vec/max.c',
-  'fmpz_vec/max_limbs.c',
-  'fmpz_vec/min.c',
-  'fmpz_vec/neg.c',
-  'fmpz_vec/prod.c',
-  'fmpz_vec/randtest.c',
-  'fmpz_vec/scalar.c',
-  'fmpz_vec/set.c',
-  'fmpz_vec/set_fft.c',
-  'fmpz_vec/set_nmod_vec.c',
-  'fmpz_vec/sort.c',
-  'fmpz_vec/sub.c',
-  'fmpz_vec/sum.c',
-  'fmpz_vec/sum_max_bits.c',
-  'fmpz_vec/swap.c',
-  'fmpz_vec/zero.c',
-  'fmpz/xgcd.c',
-  'fmpz/xgcd_partial.c',
-  'fq/add.c',
-  'fq/assignments.c',
-  'fq/bit_pack.c',
-  'fq/bit_unpack.c',
-  'fq/clear.c',
-  'fq/comparisons.c',
-  'fq/ctx_clear.c',
-  'fq/ctx_init.c',
-  'fq/ctx_init_modulus.c',
-  'fq/ctx_order.c',
-  'fq_default/ctx.c',
-  'fq_default/get_set.c',
-  'fq_default/inlines.c',
-  'fq_default/io.c',
-  'fq_default_mat/inlines.c',
-  'fq_default_mat/io.c',
-  'fq_default_poly_factor/inlines.c',
-  'fq_default_poly/inlines.c',
-  'fq_default_poly/io.c',
-  'fq_default_poly/set_fmpz_poly.c',
-  'fq_embed/derivative_inv.c',
-  'fq_embed/embed.c',
-  'fq_embed/matrices.c',
-  'fq_embed/mul_matrix.c',
-  'fq_embed/pow_series_inv.c',
-  'fq/embed_templates.c',
-  'fq_embed_templates/composition_matrix.c',
-  'fq_embed_templates/embed.c',
-  'fq_embed_templates/matrices.c',
-  'fq/frobenius.c',
-  'fq/gcdinv.c',
-  'fq/gen.c',
-  'fq/get_fmpz.c',
-  'fq/get_fmpz_mod_poly.c',
-  'fq/get_fmpz_poly.c',
-  'fq/get_set_fmpz_mod_mat.c',
-  'fq/get_str.c',
-  'fq/get_str_pretty.c',
-  'fq/init.c',
-  'fq/inlines.c',
-  'fq/inv.c',
-  'fq/io.c',
-  'fq_mat/inlines.c',
-  'fq_mat/mul_ks_cutoff.c',
-  'fq_mat/reduce_row.c',
-  'fq_mat_templates/add.c',
-  'fq/mat_templates.c',
-  'fq_mat_templates/can_solve.c',
-  'fq_mat_templates/charpoly.c',
-  'fq_mat_templates/clear.c',
-  'fq_mat_templates/concat_horizontal.c',
-  'fq_mat_templates/concat_vertical.c',
-  'fq_mat_templates/equal.c',
-  'fq_mat_templates/init.c',
-  'fq_mat_templates/init_set.c',
-  'fq_mat_templates/inv.c',
-  'fq_mat_templates/io.c',
-  'fq_mat_templates/is_one.c',
-  'fq_mat_templates/is_zero.c',
-  'fq_mat_templates/lu.c',
-  'fq_mat_templates/lu_classical.c',
-  'fq_mat_templates/lu_recursive.c',
-  'fq_mat_templates/mat_entry_set.c',
-  'fq_mat_templates/mat_invert_cols.c',
-  'fq_mat_templates/mat_swap_cols.c',
-  'fq_mat_templates/mat_swap_entrywise.c',
-  'fq_mat_templates/minpoly.c',
-  'fq_mat_templates/mul.c',
-  'fq_mat_templates/mul_classical.c',
-  'fq_mat_templates/mul_KS.c',
-  'fq_mat_templates/mul_vec.c',
-  'fq_mat_templates/neg.c',
-  'fq_mat_templates/nullspace.c',
-  'fq_mat_templates/one.c',
-  'fq_mat_templates/randops.c',
-  'fq_mat_templates/randpermdiag.c',
-  'fq_mat_templates/randrank.c',
-  'fq_mat_templates/randtest.c',
-  'fq_mat_templates/randtril.c',
-  'fq_mat_templates/randtriu.c',
-  'fq_mat_templates/rank.c',
-  'fq_mat_templates/reduce_row.c',
-  'fq_mat_templates/rref.c',
-  'fq_mat_templates/set.c',
-  'fq_mat_templates/set_fmpz_mod_mat.c',
-  'fq_mat_templates/set_nmod_mat.c',
-  'fq_mat_templates/similarity.c',
-  'fq_mat_templates/solve.c',
-  'fq_mat_templates/solve_tril.c',
-  'fq_mat_templates/solve_tril_classical.c',
-  'fq_mat_templates/solve_tril_recursive.c',
-  'fq_mat_templates/solve_triu.c',
-  'fq_mat_templates/solve_triu_classical.c',
-  'fq_mat_templates/solve_triu_recursive.c',
-  'fq_mat_templates/sub.c',
-  'fq_mat_templates/submul.c',
-  'fq_mat_templates/swap.c',
-  'fq_mat_templates/vec_mul.c',
-  'fq_mat_templates/window_clear.c',
-  'fq_mat_templates/window_init.c',
-  'fq_mat_templates/zero.c',
-  'fq/mul.c',
-  'fq/mul_fmpz.c',
-  'fq/mul_si.c',
-  'fq/mul_ui.c',
-  'fq/neg.c',
-  'fq_nmod/add.c',
-  'fq_nmod/assignments.c',
-  'fq_nmod/bit_pack.c',
-  'fq_nmod/bit_unpack.c',
-  'fq_nmod/comparisons.c',
-  'fq_nmod/ctx_clear.c',
-  'fq_nmod/ctx_init.c',
-  'fq_nmod/ctx_init_modulus.c',
-  'fq_nmod/ctx_order.c',
-  'fq_nmod_embed/modulus_derivative_inv.c',
-  'fq_nmod_embed/modulus_pow_series_inv.c',
-  'fq_nmod_embed/mul_matrix.c',
-  'fq_nmod/embed_templates.c',
-  'fq_nmod/frobenius.c',
-  'fq_nmod/gcdinv.c',
-  'fq_nmod/get_fmpz.c',
-  'fq_nmod/get_nmod_poly.c',
-  'fq_nmod/get_set_fmpz_mod_mat.c',
-  'fq_nmod/get_str.c',
-  'fq_nmod/get_str_pretty.c',
-  'fq_nmod/init.c',
-  'fq_nmod/inlines.c',
-  'fq_nmod/inv.c',
-  'fq_nmod/io.c',
-  'fq_nmod_mat/inlines.c',
-  'fq_nmod_mat/mul_ks_cutoff.c',
-  'fq_nmod_mat/reduce_row.c',
-  'fq_nmod/mat_templates.c',
-  'fq_nmod_mpoly/add.c',
-  'fq_nmod_mpoly/add_fq_nmod.c',
-  'fq_nmod_mpoly/cmp.c',
-  'fq_nmod_mpoly/combine_like_terms.c',
-  'fq_nmod_mpoly/compose_fq_nmod_mpoly.c',
-  'fq_nmod_mpoly/compose_fq_nmod_mpoly_gen.c',
-  'fq_nmod_mpoly/compose_fq_nmod_mpoly_geobucket.c',
-  'fq_nmod_mpoly/compose_fq_nmod_mpoly_horner.c',
-  'fq_nmod_mpoly/compose_fq_nmod_poly.c',
-  'fq_nmod_mpoly/compose_mat.c',
-  'fq_nmod_mpoly/content_vars.c',
-  'fq_nmod_mpoly/ctx_change_modulus.c',
-  'fq_nmod_mpoly/ctx_clear.c',
-  'fq_nmod_mpoly/ctx_init.c',
-  'fq_nmod_mpoly/ctx_init_rand.c',
-  'fq_nmod_mpoly/deflate.c',
-  'fq_nmod_mpoly/deflation.c',
-  'fq_nmod_mpoly/degrees.c',
-  'fq_nmod_mpoly/derivative.c',
-  'fq_nmod_mpoly/discriminant.c',
-  'fq_nmod_mpoly/div.c',
-  'fq_nmod_mpoly/divides.c',
-  'fq_nmod_mpoly/divides_monagan_pearce.c',
-  'fq_nmod_mpoly/div_monagan_pearce.c',
-  'fq_nmod_mpoly/divrem.c',
-  'fq_nmod_mpoly/divrem_ideal.c',
-  'fq_nmod_mpoly/divrem_ideal_monagan_pearce.c',
-  'fq_nmod_mpoly/divrem_monagan_pearce.c',
-  'fq_nmod_mpoly/equal.c',
-  'fq_nmod_mpoly/equal_fq_nmod.c',
-  'fq_nmod_mpoly/evaluate_all.c',
-  'fq_nmod_mpoly/evaluate_one.c',
-  'fq_nmod_mpoly_factor/append.c',
-  'fq_nmod_mpoly_factor/clear.c',
-  'fq_nmod_mpoly_factor/cmp.c',
-  'fq_nmod_mpoly_factor/compression.c',
-  'fq_nmod_mpoly_factor/eval.c',
-  'fq_nmod_mpoly_factor/expand.c',
-  'fq_nmod_mpoly_factor/factor.c',
-  'fq_nmod_mpoly_factor/factor_content.c',
-  'fq_nmod_mpoly_factor/factor_squarefree.c',
-  'fq_nmod_mpoly_factor/fit_length.c',
-  'fq_nmod_mpoly_factor/get_constant_fq_nmod.c',
-  'fq_nmod_mpoly_factor/get_exp_si.c',
-  'fq_nmod_mpoly_factor/get_set_lead0.c',
-  'fq_nmod_mpoly_factor/init.c',
-  'fq_nmod_mpoly_factor/inlines.c',
-  'fq_nmod_mpoly_factor/io.c',
-  'fq_nmod_mpoly_factor/irred_lgprime.c',
-  'fq_nmod_mpoly_factor/irred_smprime_wang.c',
-  'fq_nmod_mpoly_factor/irred_smprime_zassenhaus.c',
-  'fq_nmod_mpoly_factor/irred_smprime_zippel.c',
-  'fq_nmod_mpoly_factor/lcc_wang.c',
-  'fq_nmod_mpoly_factor/mpoly_hlift.c',
-  'fq_nmod_mpoly_factor/mpoly_pfrac.c',
-  'fq_nmod_mpoly_factor/mpolyv.c',
-  'fq_nmod_mpoly_factor/n_bpoly_fq.c',
-  'fq_nmod_mpoly_factor/n_bpoly_fq_factor_lgprime.c',
-  'fq_nmod_mpoly_factor/n_bpoly_fq_factor_smprime.c',
-  'fq_nmod_mpoly_factor/n_bpoly_hlift.c',
-  'fq_nmod_mpoly_factor/one.c',
-  'fq_nmod_mpoly_factor/polyu3_hlift.c',
-  'fq_nmod_mpoly_factor/polyu.c',
-  'fq_nmod_mpoly_factor/polyun.c',
-  'fq_nmod_mpoly_factor/realloc.c',
-  'fq_nmod_mpoly_factor/set.c',
-  'fq_nmod_mpoly_factor/sort.c',
-  'fq_nmod_mpoly/fit_length.c',
-  'fq_nmod_mpoly/fit_length_fit_bits.c',
-  'fq_nmod_mpoly/fit_length_reset_bits.c',
-  'fq_nmod_mpoly/fq_nmod_embed.c',
-  'fq_nmod_mpoly/gcd_brown.c',
-  'fq_nmod_mpoly/gcd.c',
-  'fq_nmod_mpoly/gcd_cofactors.c',
-  'fq_nmod_mpoly/gcd_hensel.c',
-  'fq_nmod_mpoly/gcd_zippel2.c',
-  'fq_nmod_mpoly/gcd_zippel.c',
-  'fq_nmod_mpoly/gen.c',
-  'fq_nmod_mpoly/geobuckets.c',
-  'fq_nmod_mpoly/get_coeff_fq_nmod_fmpz.c',
-  'fq_nmod_mpoly/get_coeff_fq_nmod_monomial.c',
-  'fq_nmod_mpoly/get_coeff_fq_nmod_ui.c',
-  'fq_nmod_mpoly/get_coeff_vars_ui.c',
-  'fq_nmod_mpoly/get_fq_nmod.c',
-  'fq_nmod_mpoly/get_set_is_fq_nmod_poly.c',
-  'fq_nmod_mpoly/get_str_pretty.c',
-  'fq_nmod_mpoly/get_term.c',
-  'fq_nmod_mpoly/get_term_coeff_fq_nmod.c',
-  'fq_nmod_mpoly/get_term_exp_fmpz.c',
-  'fq_nmod_mpoly/get_term_exp_si.c',
-  'fq_nmod_mpoly/get_term_exp_ui.c',
-  'fq_nmod_mpoly/get_term_monomial.c',
-  'fq_nmod_mpoly/get_term_var_exp_si.c',
-  'fq_nmod_mpoly/get_term_var_exp_ui.c',
-  'fq_nmod_mpoly/inflate.c',
-  'fq_nmod_mpoly/init.c',
-  'fq_nmod_mpoly/inlines.c',
-  'fq_nmod_mpoly/interp.c',
-  'fq_nmod_mpoly/io.c',
-  'fq_nmod_mpoly/is_canonical.c',
-  'fq_nmod_mpoly/is_fq_nmod.c',
-  'fq_nmod_mpoly/is_gen.c',
-  'fq_nmod_mpoly/is_monic.c',
-  'fq_nmod_mpoly/is_one.c',
-  'fq_nmod_mpoly/lead_coeff_vars.c',
-  'fq_nmod_mpoly/make_monic.c',
-  'fq_nmod_mpoly/mpolyn.c',
-  'fq_nmod_mpoly/mpolyn_gcd_brown.c',
-  'fq_nmod_mpoly/mpolyu.c',
-  'fq_nmod_mpoly/mpolyu_divides.c',
-  'fq_nmod_mpoly/mpolyu_gcdp_zippel.c',
-  'fq_nmod_mpoly/mpolyun.c',
-  'fq_nmod_mpoly/mul.c',
-  'fq_nmod_mpoly/mul_johnson.c',
-  'fq_nmod_mpoly/neg.c',
-  'fq_nmod_mpoly/one.c',
-  'fq_nmod_mpoly/pow_fmpz.c',
-  'fq_nmod_mpoly/pow_rmul.c',
-  'fq_nmod_mpoly/pow_ui.c',
-  'fq_nmod_mpoly/push_term_fq_nmod_fmpz.c',
-  'fq_nmod_mpoly/push_term_fq_nmod_ui.c',
-  'fq_nmod_mpoly/quadratic_root.c',
-  'fq_nmod_mpoly/randtest_bits.c',
-  'fq_nmod_mpoly/randtest_bound.c',
-  'fq_nmod_mpoly/randtest_bounds.c',
-  'fq_nmod_mpoly/realloc.c',
-  'fq_nmod_mpoly/repack_bits.c',
-  'fq_nmod_mpoly/resize.c',
-  'fq_nmod_mpoly/resultant.c',
-  'fq_nmod_mpoly/reverse.c',
-  'fq_nmod_mpoly/scalar_addmul_fq_nmod.c',
-  'fq_nmod_mpoly/scalar_mul_fq_nmod.c',
-  'fq_nmod_mpoly/set.c',
-  'fq_nmod_mpoly/set_coeff_fq_nmod_fmpz.c',
-  'fq_nmod_mpoly/set_coeff_fq_nmod_monomial.c',
-  'fq_nmod_mpoly/set_coeff_fq_nmod_ui.c',
-  'fq_nmod_mpoly/set_fmpz.c',
-  'fq_nmod_mpoly/setform.c',
-  'fq_nmod_mpoly/set_fq_nmod.c',
-  'fq_nmod_mpoly/set_fq_nmod_gen.c',
-  'fq_nmod_mpoly/set_str_pretty.c',
-  'fq_nmod_mpoly/set_term_coeff_fq_nmod.c',
-  'fq_nmod_mpoly/set_term_exp_fmpz.c',
-  'fq_nmod_mpoly/set_term_exp_ui.c',
-  'fq_nmod_mpoly/sort_terms.c',
-  'fq_nmod_mpoly/sqrt_heap.c',
-  'fq_nmod_mpoly/sub.c',
-  'fq_nmod_mpoly/sub_fq_nmod.c',
-  'fq_nmod_mpoly/term_content.c',
-  'fq_nmod_mpoly/term_exp_fits.c',
-  'fq_nmod_mpoly/to_from_fq_nmod_poly.c',
-  'fq_nmod_mpoly/univar.c',
-  'fq_nmod_mpoly/void_ring.c',
-  'fq_nmod/mul.c',
-  'fq_nmod/mul_fmpz.c',
-  'fq_nmod/mul_si.c',
-  'fq_nmod/mul_ui.c',
-  'fq_nmod/neg.c',
-  'fq_nmod/norm.c',
-  'fq_nmod_poly_factor/inlines.c',
-  'fq_nmod_poly_factor/iterated_frobenius_cutoff.c',
-  'fq_nmod/poly_factor_templates.c',
-  'fq_nmod_poly/inlines.c',
-  'fq_nmod_poly/mul.c',
-  'fq_nmod_poly/mul_classical.c',
-  'fq_nmod_poly/mullow_univariate.c',
-  'fq_nmod_poly/mul_univariate.c',
-  'fq_nmod/poly_templates.c',
-  'fq_nmod/pow.c',
-  'fq_nmod/pth_root.c',
-  'fq_nmod/rand.c',
-  'fq_nmod/randtest.c',
-  'fq_nmod/reduce.c',
-  'fq_nmod/set_fmpz.c',
-  'fq_nmod/set_nmod_poly.c',
-  'fq_nmod/sqr.c',
-  'fq_nmod/sub.c',
-  'fq_nmod/sub_one.c',
-  'fq_nmod/templates.c',
-  'fq_nmod/trace.c',
-  'fq_nmod_vec/dot.c',
-  'fq_nmod_vec/inlines.c',
-  'fq_nmod/vec_templates.c',
-  'fq/norm.c',
-  'fq_poly_factor/inlines.c',
-  'fq_poly_factor/iterated_frobenius_cutoff.c',
-  'fq/poly_factor_templates.c',
-  'fq_poly_factor_templates/clear.c',
-  'fq_poly_factor_templates/concat.c',
-  'fq_poly_factor_templates/factor_berlekamp.c',
-  'fq_poly_factor_templates/factor.c',
-  'fq_poly_factor_templates/factor_cantor_zassenhaus.c',
-  'fq_poly_factor_templates/factor_distinct_deg.c',
-  'fq_poly_factor_templates/factor_equal_deg.c',
-  'fq_poly_factor_templates/factor_equal_deg_prob.c',
-  'fq_poly_factor_templates/factor_kaltofen_shoup.c',
-  'fq_poly_factor_templates/factor_split_single.c',
-  'fq_poly_factor_templates/factor_squarefree.c',
-  'fq_poly_factor_templates/fit_length.c',
-  'fq_poly_factor_templates/init.c',
-  'fq_poly_factor_templates/insert.c',
-  'fq_poly_factor_templates/is_irreducible_ben_or.c',
-  'fq_poly_factor_templates/is_irreducible.c',
-  'fq_poly_factor_templates/is_irreducible_ddf.c',
-  'fq_poly_factor_templates/is_squarefree.c',
-  'fq_poly_factor_templates/iterated_frobenius_preinv.c',
-  'fq_poly_factor_templates/pow.c',
-  'fq_poly_factor_templates/print.c',
-  'fq_poly_factor_templates/print_pretty.c',
-  'fq_poly_factor_templates/realloc.c',
-  'fq_poly_factor_templates/roots.c',
-  'fq_poly_factor_templates/set.c',
-  'fq_poly/inlines.c',
-  'fq_poly/mul_classical.c',
-  'fq_poly/mullow_univariate.c',
-  'fq_poly/mul_univariate.c',
-  'fq_poly_templates/add.c',
-  'fq_poly_templates/add_series.c',
-  'fq_poly_templates/add_si.c',
-  'fq/poly_templates.c',
-  'fq_poly_templates/clear.c',
-  'fq_poly_templates/comparisons.c',
-  'fq_poly_templates/compose.c',
-  'fq_poly_templates/compose_mod_brent_kung.c',
-  'fq_poly_templates/compose_mod_brent_kung_precomp_preinv.c',
-  'fq_poly_templates/compose_mod_brent_kung_preinv.c',
-  'fq_poly_templates/compose_mod.c',
-  'fq_poly_templates/compose_mod_horner.c',
-  'fq_poly_templates/compose_mod_horner_preinv.c',
-  'fq_poly_templates/compose_mod_preinv.c',
-  'fq_poly_templates/deflate.c',
-  'fq_poly_templates/deflation.c',
-  'fq_poly_templates/derivative.c',
-  'fq_poly_templates/div.c',
-  'fq_poly_templates/divides.c',
-  'fq_poly_templates/div_newton_n_preinv.c',
-  'fq_poly_templates/divrem.c',
-  'fq_poly_templates/divrem_f.c',
-  'fq_poly_templates/divrem_newton_n_preinv.c',
-  'fq_poly_templates/div_series.c',
-  'fq_poly_templates/equal.c',
-  'fq_poly_templates/equal_trunc.c',
-  'fq_poly_templates/evaluate_fq.c',
-  'fq_poly_templates/evaluate_fq_vec.c',
-  'fq_poly_templates/evaluate_fq_vec_fast.c',
-  'fq_poly_templates/evaluate_fq_vec_iter.c',
-  'fq_poly_templates/fit_length.c',
-  'fq_poly_templates/gcd.c',
-  'fq_poly_templates/gcd_euclidean_f.c',
-  'fq_poly_templates/gen.c',
-  'fq_poly_templates/get_coeff.c',
-  'fq_poly_templates/get_str.c',
-  'fq_poly_templates/get_str_pretty.c',
-  'fq_poly_templates/hamming_weight.c',
-  'fq_poly_templates/inflate.c',
-  'fq_poly_templates/init.c',
-  'fq_poly_templates/inv_series_newton.c',
-  'fq_poly_templates/invsqrt_series.c',
-  'fq_poly_templates/io.c',
-  'fq_poly_templates/is_gen.c',
-  'fq_poly_templates/make_monic.c',
-  'fq_poly_templates/mul.c',
-  'fq_poly_templates/mul_classical.c',
-  'fq_poly_templates/mulhigh.c',
-  'fq_poly_templates/mulhigh_classical.c',
-  'fq_poly_templates/mul_KS.c',
-  'fq_poly_templates/mullow.c',
-  'fq_poly_templates/mullow_classical.c',
-  'fq_poly_templates/mullow_KS.c',
-  'fq_poly_templates/mulmod.c',
-  'fq_poly_templates/mulmod_preinv.c',
-  'fq_poly_templates/mul_reorder.c',
-  'fq_poly_templates/neg.c',
-  'fq_poly_templates/normalise.c',
-  'fq_poly_templates/one.c',
-  'fq_poly_templates/pow.c',
-  'fq_poly_templates/powmod_fmpz_binexp.c',
-  'fq_poly_templates/powmod_fmpz_binexp_preinv.c',
-  'fq_poly_templates/powmod_fmpz_sliding_preinv.c',
-  'fq_poly_templates/powmod_ui_binexp.c',
-  'fq_poly_templates/powmod_ui_binexp_preinv.c',
-  'fq_poly_templates/powmod_x_fmpz_preinv.c',
-  'fq_poly_templates/pow_trunc_binexp.c',
-  'fq_poly_templates/pow_trunc.c',
-  'fq_poly_templates/randtest.c',
-  'fq_poly_templates/randtest_irreducible.c',
-  'fq_poly_templates/randtest_monic.c',
-  'fq_poly_templates/realloc.c',
-  'fq_poly_templates/rem.c',
-  'fq_poly_templates/remove.c',
-  'fq_poly_templates/reverse.c',
-  'fq_poly_templates/scalar_addmul_fq.c',
-  'fq_poly_templates/scalar_div_fq.c',
-  'fq_poly_templates/scalar_mul_fq.c',
-  'fq_poly_templates/scalar_submul_fq.c',
-  'fq_poly_templates/set.c',
-  'fq_poly_templates/set_coeff.c',
-  'fq_poly_templates/set_fmpz_mod_poly.c',
-  'fq_poly_templates/set_fq.c',
-  'fq_poly_templates/set_length.c',
-  'fq_poly_templates/set_nmod_poly.c',
-  'fq_poly_templates/set_trunc.c',
-  'fq_poly_templates/shift_left.c',
-  'fq_poly_templates/shift_right.c',
-  'fq_poly_templates/sqr.c',
-  'fq_poly_templates/sqr_classical.c',
-  'fq_poly_templates/sqr_KS.c',
-  'fq_poly_templates/sqr_reorder.c',
-  'fq_poly_templates/sqrt.c',
-  'fq_poly_templates/sqrt_series.c',
-  'fq_poly_templates/sub.c',
-  'fq_poly_templates/sub_series.c',
-  'fq_poly_templates/swap.c',
-  'fq_poly_templates/tree.c',
-  'fq_poly_templates/truncate.c',
-  'fq_poly_templates/xgcd.c',
-  'fq_poly_templates/xgcd_euclidean_f.c',
-  'fq_poly_templates/zero.c',
-  'fq/pow.c',
-  'fq/pow_ui.c',
-  'fq/pth_root.c',
-  'fq/rand.c',
-  'fq/randtest.c',
-  'fq/reduce.c',
-  'fq/set_fmpz_mod_poly.c',
-  'fq/set_fmpz_poly.c',
-  'fq/sqr.c',
-  'fq/sub.c',
-  'fq/sub_one.c',
-  'fq/swap.c',
-  'fq/templates.c',
-  'fq_templates/div.c',
-  'fq_templates/is_invertible.c',
-  'fq_templates/is_invertible_f.c',
-  'fq_templates/is_square.c',
-  'fq_templates/multiplicative_order.c',
-  'fq_templates/sqrt.c',
-  'fq/trace.c',
-  'fq_vec/dot.c',
-  'fq_vec/inlines.c',
-  'fq_vec_templates/add.c',
-  'fq/vec_templates.c',
-  'fq_vec_templates/clear.c',
-  'fq_vec_templates/dot.c',
-  'fq_vec_templates/equal.c',
-  'fq_vec_templates/init.c',
-  'fq_vec_templates/io.c',
-  'fq_vec_templates/is_zero.c',
-  'fq_vec_templates/neg.c',
-  'fq_vec_templates/randtest.c',
-  'fq_vec_templates/scalar_addmul_fq.c',
-  'fq_vec_templates/scalar_mul_fq.c',
-  'fq_vec_templates/scalar_submul_fq.c',
-  'fq_vec_templates/set.c',
-  'fq_vec_templates/sub.c',
-  'fq_vec_templates/swap.c',
-  'fq_vec_templates/zero.c',
-  'fq_zech/add.c',
-  'fq_zech/bit_pack.c',
-  'fq_zech/bit_unpack.c',
-  'fq_zech/ctx.c',
-  'fq_zech_embed/composition_matrix.c',
-  'fq_zech_embed/modulus_derivative_inv.c',
-  'fq_zech_embed/mul_matrix.c',
-  'fq_zech/embed_templates.c',
-  'fq_zech/frobenius.c',
-  'fq_zech/gcdinv.c',
-  'fq_zech/get_fmpz.c',
-  'fq_zech/get_fq_nmod.c',
-  'fq_zech/get_nmod_poly.c',
-  'fq_zech/get_set_fmpz_mod_mat.c',
-  'fq_zech/get_str.c',
-  'fq_zech/inlines.c',
-  'fq_zech/inv.c',
-  'fq_zech/io.c',
-  'fq_zech/is_square.c',
-  'fq_zech_mat/inlines.c',
-  'fq_zech_mat/mul_ks_cutoff.c',
-  'fq_zech/mat_templates.c',
-  'fq_zech/modulus_pow_series_inv.c',
-  'fq_zech_mpoly/add.c',
-  'fq_zech_mpoly/clear.c',
-  'fq_zech_mpoly/combine_like_terms.c',
-  'fq_zech_mpoly/ctx.c',
-  'fq_zech_mpoly/degrees.c',
-  'fq_zech_mpoly/derivative.c',
-  'fq_zech_mpoly/divides.c',
-  'fq_zech_mpoly/divides_monagan_pearce.c',
-  'fq_zech_mpoly/divrem.c',
-  'fq_zech_mpoly/divrem_monagan_pearce.c',
-  'fq_zech_mpoly/equal.c',
-  'fq_zech_mpoly/evaluate_all.c',
-  'fq_zech_mpoly/evaluate_one.c',
-  'fq_zech_mpoly_factor/bpoly.c',
-  'fq_zech_mpoly_factor/bpoly_factor_smprime.c',
-  'fq_zech_mpoly_factor/bpoly_hlift.c',
-  'fq_zech_mpoly_factor/clear.c',
-  'fq_zech_mpoly_factor/eval.c',
-  'fq_zech_mpoly_factor/factor.c',
-  'fq_zech_mpoly_factor/fit_length.c',
-  'fq_zech_mpoly_factor/get_set_is_fq_nmod_poly.c',
-  'fq_zech_mpoly_factor/get_set_lead0.c',
-  'fq_zech_mpoly_factor/init.c',
-  'fq_zech_mpoly_factor/io.c',
-  'fq_zech_mpoly_factor/irred_smprime_wang.c',
-  'fq_zech_mpoly_factor/irred_smprime_zassenhaus.c',
-  'fq_zech_mpoly_factor/irred_smprime_zippel.c',
-  'fq_zech_mpoly_factor/lcc_wang.c',
-  'fq_zech_mpoly_factor/mpoly_hlift.c',
-  'fq_zech_mpoly_factor/mpoly_pfrac.c',
-  'fq_zech_mpoly_factor/mpoly_univar.c',
-  'fq_zech_mpoly_factor/mpolyv.c',
-  'fq_zech_mpoly_factor/polyu3_hlift.c',
-  'fq_zech_mpoly_factor/polyu.c',
-  'fq_zech_mpoly_factor/polyun.c',
-  'fq_zech_mpoly_factor/realloc.c',
-  'fq_zech_mpoly_factor/tpoly.c',
-  'fq_zech_mpoly/fit_bits.c',
-  'fq_zech_mpoly/fit_length.c',
-  'fq_zech_mpoly/gcd.c',
-  'fq_zech_mpoly/gcd_cofactors.c',
-  'fq_zech_mpoly/gen.c',
-  'fq_zech_mpoly/get_coeff_vars_ui.c',
-  'fq_zech_mpoly/get_set_fq_nmod_mpoly.c',
-  'fq_zech_mpoly/get_set_nmod_mpoly.c',
-  'fq_zech_mpoly/init.c',
-  'fq_zech_mpoly/io.c',
-  'fq_zech_mpoly/is_canonical.c',
-  'fq_zech_mpoly/is_fq_zech.c',
-  'fq_zech_mpoly/is_one.c',
-  'fq_zech_mpoly/lead_coeff_vars.c',
-  'fq_zech_mpoly/make_monic.c',
-  'fq_zech_mpoly/mpolyu.c',
-  'fq_zech_mpoly/mul.c',
-  'fq_zech_mpoly/mul_johnson.c',
-  'fq_zech_mpoly/neg.c',
-  'fq_zech_mpoly/pow_rmul.c',
-  'fq_zech_mpoly/pow_ui.c',
-  'fq_zech_mpoly/repack_bits.c',
-  'fq_zech_mpoly/scalar.c',
-  'fq_zech_mpoly/set.c',
-  'fq_zech_mpoly/set_fq_zech.c',
-  'fq_zech_mpoly/set_ui.c',
-  'fq_zech_mpoly/sort_terms.c',
-  'fq_zech_mpoly/sub.c',
-  'fq_zech_mpoly/sub_fq_zech.c',
-  'fq_zech_mpoly/term_exp_fits.c',
-  'fq_zech_mpoly/univar.c',
-  'fq_zech/mul.c',
-  'fq_zech/neg.c',
-  'fq_zech/norm.c',
-  'fq_zech_poly_factor/inlines.c',
-  'fq_zech_poly_factor/iterated_frobenius_cutoff.c',
-  'fq_zech/poly_factor_templates.c',
-  'fq_zech_poly/inlines.c',
-  'fq_zech/poly_templates.c',
-  'fq_zech/pow.c',
-  'fq_zech/pth_root.c',
-  'fq_zech/rand.c',
-  'fq_zech/randtest.c',
-  'fq_zech/set.c',
-  'fq_zech/set_fmpz.c',
-  'fq_zech/set_fq_nmod.c',
-  'fq_zech/set_nmod_poly.c',
-  'fq_zech/sqr.c',
-  'fq_zech/sqrt.c',
-  'fq_zech/sub.c',
-  'fq_zech/sub_one.c',
-  'fq_zech/templates.c',
-  'fq_zech/trace.c',
-  'fq_zech_vec/inlines.c',
-  'fq_zech/vec_templates.c',
-  'generic_files/clz_tab.c',
-  'generic_files/exception.c',
-  'generic_files/fscanf.c',
-  'generic_files/gettimeofday.c',
-  'generic_files/inlines.c',
-  'generic_files/io.c',
-  'generic_files/memory_manager.c',
-  'generic_files/profiler.c',
-  'generic_files/scanf.c',
-  'generic_files/sprintf.c',
-  'generic_files/sscanf.c',
-  'generic_files/test_helpers.c',
-  'generic_files/version.c',
-  'gr/acb.c',
-  'gr/acf.c',
-  'gr/arb.c',
-  'gr/arf.c',
-  'gr/ca.c',
-  'gr/cmp_coercion.c',
-  'gr/dirichlet.c',
-  'gr/fexpr.c',
-  'gr/fmpq.c',
-  'gr/fmpq_poly.c',
-  'gr/fmpz.c',
-  'gr/fmpzi.c',
-  'gr/fmpz_mod.c',
-  'gr/fmpz_mpoly.c',
-  'gr/fmpz_mpoly_q.c',
-  'gr/fmpz_poly.c',
-  'gr/fq.c',
-  'gr/fq_nmod.c',
-  'gr/fq_zech.c',
-  'gr_generic/fmpz_mpoly_evaluate.c',
-  'gr_generic/fmpz_poly_evaluate.c',
-  'gr_generic/fmpz_poly_evaluate_horner.c',
-  'gr_generic/fmpz_poly_evaluate_rectangular.c',
-  'gr_generic/generic.c',
-  'gr_generic/generic_pow.c',
-  'gr_generic/set_fexpr.c',
-  'gr_generic/set_str_expr.c',
-  'gr/init_random.c',
-  'gr/inlines.c',
-  'gr/io.c',
-  'gr_mat/add.c',
-  'gr_mat/addmul_scalar.c',
-  'gr_mat/add_scalar.c',
-  'gr_mat/adjugate.c',
-  'gr_mat/adjugate_charpoly.c',
-  'gr_mat/adjugate_cofactor.c',
-  'gr_mat/apply_row_similarity.c',
-  'gr_mat/charpoly_berkowitz.c',
-  'gr_mat/charpoly.c',
-  'gr_mat/charpoly_danilevsky.c',
-  'gr_mat/charpoly_faddeev_bsgs.c',
-  'gr_mat/charpoly_faddeev.c',
-  'gr_mat/charpoly_hessenberg.c',
-  'gr_mat/clear.c',
-  'gr_mat/concat_horizontal.c',
-  'gr_mat/concat_vertical.c',
-  'gr_mat/det_berkowitz.c',
-  'gr_mat/det.c',
-  'gr_mat/det_cofactor.c',
-  'gr_mat/det_fflu.c',
-  'gr_mat/det_lu.c',
-  'gr_mat/diag_mul.c',
-  'gr_mat/diagonalization.c',
-  'gr_mat/div_scalar.c',
-  'gr_mat/eigenvalues.c',
-  'gr_mat/equal.c',
-  'gr_mat/exp.c',
-  'gr_mat/fflu.c',
-  'gr_mat/find_nonzero_pivot.c',
-  'gr_mat/gr_poly_evaluate.c',
-  'gr_mat/hadamard.c',
-  'gr_mat/hessenberg.c',
-  'gr_mat/hessenberg_gauss.c',
-  'gr_mat/hessenberg_householder.c',
-  'gr_mat/hilbert.c',
-  'gr_mat/init.c',
-  'gr_mat/init_set.c',
-  'gr_mat/inlines.c',
-  'gr_mat/inv.c',
-  'gr_mat/invert_cols.c',
-  'gr_mat/invert_rows.c',
-  'gr_mat/io.c',
-  'gr_mat/is_diagonal.c',
-  'gr_mat/is_hessenberg.c',
-  'gr_mat/is_lower_triangular.c',
-  'gr_mat/is_neg_one.c',
-  'gr_mat/is_one.c',
-  'gr_mat/is_scalar.c',
-  'gr_mat/is_upper_triangular.c',
-  'gr_mat/is_zero.c',
-  'gr_mat/jordan_blocks.c',
-  'gr_mat/jordan_form.c',
-  'gr_mat/jordan_transformation.c',
-  'gr_mat/log.c',
-  'gr_mat/lu.c',
-  'gr_mat/lu_classical.c',
-  'gr_mat/lu_recursive.c',
-  'gr_mat/minpoly_field.c',
-  'gr_mat/mul.c',
-  'gr_mat/mul_classical.c',
-  'gr_mat/mul_diag.c',
-  'gr_mat/mul_scalar.c',
-  'gr_mat/mul_strassen.c',
-  'gr_mat/neg.c',
-  'gr_mat/nonsingular_solve.c',
-  'gr_mat/nonsingular_solve_den.c',
-  'gr_mat/nonsingular_solve_den_fflu.c',
-  'gr_mat/nonsingular_solve_fflu.c',
-  'gr_mat/nonsingular_solve_fflu_precomp.c',
-  'gr_mat/nonsingular_solve_lu.c',
-  'gr_mat/nonsingular_solve_lu_precomp.c',
-  'gr_mat/nonsingular_solve_tril.c',
-  'gr_mat/nonsingular_solve_triu.c',
-  'gr_mat/nullspace.c',
-  'gr_mat/one.c',
-  'gr_mat/ones.c',
-  'gr_mat/pascal.c',
-  'gr_mat/randops.c',
-  'gr_mat/randpermdiag.c',
-  'gr_mat/randrank.c',
-  'gr_mat/randtest.c',
-  'gr_mat/rank.c',
-  'gr_mat/rank_fflu.c',
-  'gr_mat/rank_lu.c',
-  'gr_mat/reduce_row.c',
-  'gr/matrix.c',
-  'gr_mat/rref.c',
-  'gr_mat/rref_den.c',
-  'gr_mat/rref_fflu.c',
-  'gr_mat/rref_lu.c',
-  'gr_mat/set.c',
-  'gr_mat/set_fmpq.c',
-  'gr_mat/set_fmpq_mat.c',
-  'gr_mat/set_fmpz.c',
-  'gr_mat/set_fmpz_mat.c',
-  'gr_mat/set_scalar.c',
-  'gr_mat/set_si.c',
-  'gr_mat/set_ui.c',
-  'gr_mat/solve_field.c',
-  'gr_mat/stirling.c',
-  'gr_mat/sub.c',
-  'gr_mat/submul_scalar.c',
-  'gr_mat/sub_scalar.c',
-  'gr_mat/swap_cols.c',
-  'gr_mat/swap_entrywise.c',
-  'gr_mat/swap_rows.c',
-  'gr_mat/trace.c',
-  'gr_mat/transpose.c',
-  'gr_mat/window_init.c',
-  'gr_mat/write.c',
-  'gr_mat/zero.c',
-  'gr_mpoly/add.c',
-  'gr/mpoly.c',
-  'gr_mpoly/combine_like_terms.c',
-  'gr_mpoly/equal.c',
-  'gr_mpoly/fit_bits.c',
-  'gr_mpoly/fit_length.c',
-  'gr_mpoly/fit_length_fit_bits.c',
-  'gr_mpoly/fit_length_reset_bits.c',
-  'gr_mpoly/gen.c',
-  'gr_mpoly/get_coeff_scalar_fmpz.c',
-  'gr_mpoly/get_coeff_scalar_ui.c',
-  'gr_mpoly/init.c',
-  'gr_mpoly/inlines.c',
-  'gr_mpoly/is_canonical.c',
-  'gr_mpoly/mul.c',
-  'gr_mpoly/mul_johnson.c',
-  'gr_mpoly/mul_monomial.c',
-  'gr_mpoly/mul_scalar.c',
-  'gr_mpoly/neg.c',
-  'gr_mpoly/push_term.c',
-  'gr_mpoly/randtest_bits.c',
-  'gr_mpoly/randtest_bound.c',
-  'gr_mpoly/set.c',
-  'gr_mpoly/set_coeff_scalar_fmpz.c',
-  'gr_mpoly/set_coeff_scalar_ui.c',
-  'gr_mpoly/set_scalar.c',
-  'gr_mpoly/sort_terms.c',
-  'gr_mpoly/sub.c',
-  'gr_mpoly/write.c',
-  'gr/nf.c',
-  'gr/nmod32.c',
-  'gr/nmod8.c',
-  'gr/nmod.c',
-  'gr/perm.c',
-  'gr_poly/add.c',
-  'gr_poly/asin_series.c',
-  'gr_poly/clear.c',
-  'gr_poly/compose.c',
-  'gr_poly/compose_divconquer.c',
-  'gr_poly/compose_horner.c',
-  'gr_poly/compose_series_brent_kung.c',
-  'gr_poly/compose_series.c',
-  'gr_poly/compose_series_divconquer.c',
-  'gr_poly/compose_series_horner.c',
-  'gr_poly/derivative.c',
-  'gr_poly/div_basecase.c',
-  'gr_poly/div.c',
-  'gr_poly/div_divconquer.c',
-  'gr_poly/divexact_basecase.c',
-  'gr_poly/divexact_bidirectional.c',
-  'gr_poly/divexact.c',
-  'gr_poly/divexact_series_basecase.c',
-  'gr_poly/div_newton.c',
-  'gr_poly/divrem_basecase.c',
-  'gr_poly/divrem.c',
-  'gr_poly/divrem_divconquer.c',
-  'gr_poly/divrem_newton.c',
-  'gr_poly/div_scalar.c',
-  'gr_poly/div_series_basecase.c',
-  'gr_poly/div_series.c',
-  'gr_poly/div_series_divconquer.c',
-  'gr_poly/div_series_invmul.c',
-  'gr_poly/div_series_newton.c',
-  'gr_poly/equal.c',
-  'gr_poly/evaluate.c',
-  'gr_poly/evaluate_horner.c',
-  'gr_poly/evaluate_modular.c',
-  'gr_poly/evaluate_other.c',
-  'gr_poly/evaluate_other_horner.c',
-  'gr_poly/evaluate_other_rectangular.c',
-  'gr_poly/evaluate_rectangular.c',
-  'gr_poly/evaluate_vec_fast.c',
-  'gr_poly/evaluate_vec_iter.c',
-  'gr_poly/exp_series_basecase.c',
-  'gr_poly/exp_series_basecase_mul.c',
-  'gr_poly/exp_series.c',
-  'gr_poly/exp_series_newton.c',
-  'gr_poly/factor_squarefree.c',
-  'gr_poly/fit_length.c',
-  'gr_poly/gcd.c',
-  'gr_poly/gcd_euclidean.c',
-  'gr_poly/gcd_hgcd.c',
-  'gr_poly/gen.c',
-  'gr_poly/get_coeff_scalar.c',
-  'gr_poly/hgcd.c',
-  'gr_poly/init.c',
-  'gr_poly/inlines.c',
-  'gr_poly/integral.c',
-  'gr_poly/inv.c',
-  'gr_poly/inv_series_basecase.c',
-  'gr_poly/inv_series.c',
-  'gr_poly/inv_series_newton.c',
-  'gr_poly/is_gen.c',
-  'gr_poly/is_monic.c',
-  'gr_poly/is_one.c',
-  'gr_poly/is_scalar.c',
-  'gr_poly/is_zero.c',
-  'gr_poly/log1p_series.c',
-  'gr_poly/log_series.c',
-  'gr_poly/make_monic.c',
-  'gr_poly/mul.c',
-  'gr_poly/mullow.c',
-  'gr_poly/mul_scalar.c',
-  'gr_poly/neg.c',
-  'gr_poly/neg_one.c',
-  'gr/polynomial.c',
-  'gr_poly/normalise.c',
-  'gr_poly/nth_derivative.c',
-  'gr_poly/one.c',
-  'gr_poly/pow_fmpz.c',
-  'gr_poly/pow_series_fmpq_recurrence.c',
-  'gr_poly/pow_series_ui_binexp.c',
-  'gr_poly/pow_series_ui.c',
-  'gr_poly/pow_ui_binexp.c',
-  'gr_poly/pow_ui.c',
-  'gr_poly/randtest.c',
-  'gr_poly/rem.c',
-  'gr_poly/resultant.c',
-  'gr_poly/resultant_euclidean.c',
-  'gr_poly/resultant_hgcd.c',
-  'gr_poly/resultant_small.c',
-  'gr_poly/resultant_sylvester.c',
-  'gr_poly/reverse.c',
-  'gr_poly/revert_series.c',
-  'gr_poly/rsqrt_series_basecase.c',
-  'gr_poly/rsqrt_series.c',
-  'gr_poly/rsqrt_series_miller.c',
-  'gr_poly/rsqrt_series_newton.c',
-  'gr_poly/set.c',
-  'gr_poly/set_coeff_scalar.c',
-  'gr_poly/set_fmpq_poly.c',
-  'gr_poly/set_fmpz_poly.c',
-  'gr_poly/set_gr_poly_other.c',
-  'gr_poly/set_length.c',
-  'gr_poly/set_scalar.c',
-  'gr_poly/shift_left.c',
-  'gr_poly/shift_right.c',
-  'gr_poly/sin_cos_series_basecase.c',
-  'gr_poly/sin_cos_series_tangent.c',
-  'gr_poly/sqrt_series_basecase.c',
-  'gr_poly/sqrt_series.c',
-  'gr_poly/sqrt_series_miller.c',
-  'gr_poly/sqrt_series_newton.c',
-  'gr_poly/squarefree_part.c',
-  'gr_poly/sub.c',
-  'gr_poly/tan_series_basecase.c',
-  'gr_poly/tan_series.c',
-  'gr_poly/tan_series_newton.c',
-  'gr_poly/taylor_shift.c',
-  'gr_poly/taylor_shift_convolution.c',
-  'gr_poly/taylor_shift_divconquer.c',
-  'gr_poly/taylor_shift_horner.c',
-  'gr_poly/truncate.c',
-  'gr_poly/write.c',
-  'gr_poly/xgcd_euclidean.c',
-  'gr_poly/xgcd_hgcd.c',
-  'gr/psl2z.c',
-  'gr/qqbar.c',
-  'gr/series.c',
-  'gr/series_mod.c',
-  'gr_special/bellnum.c',
-  'gr_special/bin.c',
-  'gr_special/chebyshev_t.c',
-  'gr_special/chebyshev_u.c',
-  'gr_special/dirichlet.c',
-  'gr_special/elementary.c',
-  'gr_special/erf.c',
-  'gr_special/fac.c',
-  'gr_special/fib.c',
-  'gr_special/inlines.c',
-  'gr_special/modular.c',
-  'gr_special/partitions.c',
-  'gr/test_ring.c',
-  'gr_vec/append.c',
-  'gr_vec/clear.c',
-  'gr_vec/fit_length.c',
-  'gr_vec/init.c',
-  'gr_vec/inlines.c',
-  'gr_vec/product.c',
-  'gr_vec/randtest.c',
-  'gr_vec/set.c',
-  'gr_vec/set_length.c',
-  'gr_vec/step.c',
-  'gr_vec/sum.c',
-  'gr/vector.c',
-  'gr_vec/write.c',
-  'hypgeom/bound.c',
-  'hypgeom/estimate_terms_d.c',
-  'hypgeom/init.c',
-  'hypgeom/precompute.c',
-  'hypgeom/sum.c',
-  'long_extras/inlines.c',
-  'long_extras/kronecker.c',
-  'long_extras/randint.c',
-  'long_extras/randtest.c',
-  'long_extras/sizeinbase.c',
-  'mag/add_2exp_fmpz.c',
-  'mag/add.c',
-  'mag/addmul.c',
-  'mag/add_ui_2exp_si.c',
-  'mag/add_ui.c',
-  'mag/atan.c',
-  'mag/bernoulli_div_fac_ui.c',
-  'mag/binpow_uiui.c',
-  'mag/bin_uiui.c',
-  'mag/clear.c',
-  'mag/cmp_2exp_si.c',
-  'mag/cmp.c',
-  'mag/const_pi.c',
-  'mag/cosh.c',
-  'mag/div.c',
-  'mag/div_lower.c',
-  'mag/d_log.c',
-  'mag/exp.c',
-  'mag/expinv.c',
-  'mag/expm1.c',
-  'mag/exp_tail.c',
-  'mag/fac_ui.c',
-  'mag/geom_series.c',
-  'mag/get_d.c',
-  'mag/get_d_log2_approx.c',
-  'mag/get_fmpq.c',
-  'mag/get_fmpz.c',
-  'mag/hurwitz_zeta_uiui.c',
-  'mag/hypot.c',
-  'mag/inlines.c',
-  'mag/io.c',
-  'mag/log1p.c',
-  'mag/log.c',
-  'mag/log_ui.c',
-  'mag/mul_2exp_fmpz.c',
-  'mag/mul_2exp_si.c',
-  'mag/mul.c',
-  'mag/polylog_tail.c',
-  'mag/pow_fmpz.c',
-  'mag/pow_ui.c',
-  'mag/randtest.c',
-  'mag/root.c',
-  'mag/rsqrt.c',
-  'mag/set_d_2exp_fmpz.c',
-  'mag/set_d.c',
-  'mag/set_fmpz_2exp_fmpz.c',
-  'mag/set_ui_2exp_si.c',
-  'mag/set_ui.c',
-  'mag/sinh.c',
-  'mag/sqrt.c',
-  'mag/sub.c',
-  'mag/sub_lower.c',
-  'mpfr_mat/clear.c',
-  'mpfr_mat/equal.c',
-  'mpfr_mat/init.c',
-  'mpfr_mat/mul_classical.c',
-  'mpfr_mat/randtest.c',
-  'mpfr_mat/set.c',
-  'mpfr_mat/swap.c',
-  'mpfr_mat/zero.c',
-  'mpfr_vec/add.c',
-  'mpfr_vec/clear.c',
-  'mpfr_vec/equal.c',
-  'mpfr_vec/init.c',
-  'mpfr_vec/randtest.c',
-  'mpfr_vec/scalar_mul_2exp.c',
-  'mpfr_vec/scalar_mul_mpfr.c',
-  'mpfr_vec/scalar_product.c',
-  'mpfr_vec/set.c',
-  'mpfr_vec/zero.c',
-  'mpn_extras/debug.c',
-  'mpn_extras/divides.c',
-  'mpn_extras/divrem_preinv1.c',
-  'mpn_extras/divrem_preinvn.c',
-  'mpn_extras/factor_trial.c',
-  'mpn_extras/factor_trial_tree.c',
-  'mpn_extras/fmms1.c',
-  'mpn_extras/gcd_full.c',
-  'mpn_extras/get_d.c',
-  'mpn_extras/mod_preinvn.c',
-  'mpn_extras/mul_basecase.c',
-  'mpn_extras/mul.c',
-  'mpn_extras/mulhigh_basecase.c',
-  'mpn_extras/mulhigh.c',
-  'mpn_extras/mulmod_2expp1_basecase.c',
-  'mpn_extras/mulmod_preinv1.c',
-  'mpn_extras/mulmod_preinvn.c',
-  'mpn_extras/mul_toom22.c',
-  'mpn_extras/mul_toom32.c',
-  'mpn_extras/preinv1.c',
-  'mpn_extras/preinvn.c',
-  'mpn_extras/remove_2exp.c',
-  'mpn_extras/remove_power.c',
-  'mpn_extras/sqr_basecase.c',
-  'mpn_extras/sqrhigh.c',
-  'mpn_extras/sumdiff_n.c',
-  'mpoly/bidegree.c',
-  'mpoly/bivar_cld_bounds.c',
-  'mpoly/cmp_general.c',
-  'mpoly/compose_mat.c',
-  'mpoly/compression.c',
-  'mpoly/ctx.c',
-  'mpoly/degrees.c',
-  'mpoly/exp_bits_required.c',
-  'mpoly/fill_marks.c',
-  'mpoly/gcd_info.c',
-  'mpoly/gen_bits_required.c',
-  'mpoly/gen_fields.c',
-  'mpoly/gen_monomial_offset_shift.c',
-  'mpoly/gen_shift_left_right.c',
-  'mpoly/get_cmpmask.c',
-  'mpoly/get_monomial.c',
-  'mpoly/get_monomial_var.c',
-  'mpoly/heap_insert1.c',
-  'mpoly/heap_insert.c',
-  'mpoly/heap_pop1.c',
-  'mpoly/heap_pop.c',
-  'mpoly/inlines.c',
-  'mpoly/io.c',
-  'mpoly/is_gen.c',
-  'mpoly/is_poly.c',
-  'mpoly/is_proved_not_square.c',
-  'mpoly/main_variable_split.c',
-  'mpoly/max_fields.c',
-  'mpoly/min_fields.c',
-  'mpoly/monomial_cofactors.c',
-  'mpoly/monomial_exists.c',
-  'mpoly/monomial_index.c',
-  'mpoly/monomial_mul_fmpz.c',
-  'mpoly/monomials_cmp.c',
-  'mpoly/monomials_deflate.c',
-  'mpoly/monomials_deflation.c',
-  'mpoly/monomials_inflate.c',
-  'mpoly/monomials_inorder_test.c',
-  'mpoly/monomials_overflow_test.c',
-  'mpoly/monomials_shift_right_ui.c',
-  'mpoly/monomials_valid_test.c',
-  'mpoly/pack_monomials_tight.c',
-  'mpoly/pack_vec.c',
-  'mpoly/parse_pretty.c',
-  'mpoly/randbits_fmpz.c',
-  'mpoly/rbtree.c',
-  'mpoly/remove_var_powers.c',
-  'mpoly/repack_monomials.c',
-  'mpoly/reverse.c',
-  'mpoly/search_monomials.c',
-  'mpoly/set_monomial.c',
-  'mpoly/term_exp_fits.c',
-  'mpoly/test_irreducible.c',
-  'mpoly/to_from_mpolyl.c',
-  'mpoly/total_degree.c',
-  'mpoly/univar.c',
-  'mpoly/unpack_monomials_tight.c',
-  'mpoly/unpack_vec.c',
-  'mpoly/used_vars.c',
-  'nf/clear.c',
-  'nf_elem/add.c',
-  'nf_elem/clear.c',
-  'nf_elem/div.c',
-  'nf_elem/equal.c',
-  'nf_elem/gen.c',
-  'nf_elem/get_coeff_fmpq.c',
-  'nf_elem/get_coeff_fmpz.c',
-  'nf_elem/get_fmpq_poly.c',
-  'nf_elem/get_fmpz_mat_row.c',
-  'nf_elem/get_fmpz_mod_poly.c',
-  'nf_elem/get_nmod_poly.c',
-  'nf_elem/get_str_pretty.c',
-  'nf_elem/init.c',
-  'nf_elem/inlines.c',
-  'nf_elem/inv.c',
-  'nf_elem/invertible_check.c',
-  'nf_elem/io.c',
-  'nf_elem/is_gen.c',
-  'nf_elem/mod_fmpz.c',
-  'nf_elem/mul.c',
-  'nf_elem/mul_gen.c',
-  'nf_elem/neg.c',
-  'nf_elem/norm.c',
-  'nf_elem/norm_div.c',
-  'nf_elem/one.c',
-  'nf_elem/pow.c',
-  'nf_elem/randtest.c',
-  'nf_elem/reduce.c',
-  'nf_elem/rep_mat.c',
-  'nf_elem/rep_mat_fmpz_mat_den.c',
-  'nf_elem/scalar_div.c',
-  'nf_elem/scalar_mul.c',
-  'nf_elem/set.c',
-  'nf_elem/set_coeff_num_fmpz.c',
-  'nf_elem/set_fmpq_poly.c',
-  'nf_elem/set_fmpz_mat_row.c',
-  'nf_elem/sub.c',
-  'nf_elem/swap.c',
-  'nf_elem/trace.c',
-  'nf_elem/zero.c',
-  'nf/init.c',
-  'nf/init_randtest.c',
-  'nf/print.c',
-  'nmod/divides.c',
-  'nmod/inlines.c',
-  'nmod_mat/add.c',
-  'nmod_mat/addmul.c',
-  'nmod_mat/can_solve.c',
-  'nmod_mat/charpoly.c',
-  'nmod_mat/clear.c',
-  'nmod_mat/concat.c',
-  'nmod_mat/det.c',
-  'nmod_mat/det_howell.c',
-  'nmod_mat/equal.c',
-  'nmod_mat/howell_form.c',
-  'nmod_mat/init.c',
-  'nmod_mat/inlines.c',
-  'nmod_mat/inv.c',
-  'nmod_mat/io.c',
-  'nmod_mat/is_one.c',
-  'nmod_mat/is_zero.c',
-  'nmod_mat/is_zero_row.c',
-  'nmod_mat/lu.c',
-  'nmod_mat/lu_classical.c',
-  'nmod_mat/lu_classical_delayed.c',
-  'nmod_mat/lu_recursive.c',
-  'nmod_mat/minpoly.c',
-  'nmod_mat/mul_blas.c',
-  'nmod_mat/mul.c',
-  'nmod_mat/mul_classical.c',
-  'nmod_mat/mul_classical_threaded.c',
-  'nmod_mat/mul_nmod_vec.c',
-  'nmod_mat/mul_strassen.c',
-  'nmod_mat/neg.c',
-  'nmod_mat/nmod_vec_mul.c',
-  'nmod_mat/nullspace.c',
-  'nmod_mat/one.c',
-  'nmod_mat/permute_rows.c',
-  'nmod_mat/pow.c',
-  'nmod_mat/randfull.c',
-  'nmod_mat/randops.c',
-  'nmod_mat/randpermdiag.c',
-  'nmod_mat/randrank.c',
-  'nmod_mat/randtest.c',
-  'nmod_mat/randtril.c',
-  'nmod_mat/randtriu.c',
-  'nmod_mat/rank.c',
-  'nmod_mat/reduce_row.c',
-  'nmod_mat/rref.c',
-  'nmod_mat/scalar.c',
-  'nmod_mat/set.c',
-  'nmod_mat/set_mod.c',
-  'nmod_mat/similarity.c',
-  'nmod_mat/solve.c',
-  'nmod_mat/solve_tril.c',
-  'nmod_mat/solve_triu.c',
-  'nmod_mat/solve_vec.c',
-  'nmod_mat/strong_echelon_form.c',
-  'nmod_mat/sub.c',
-  'nmod_mat/submul.c',
-  'nmod_mat/swap.c',
-  'nmod_mat/trace.c',
-  'nmod_mat/transpose.c',
-  'nmod_mat/window.c',
-  'nmod_mat/zero.c',
-  'nmod_mpoly/add.c',
-  'nmod_mpoly/add_ui.c',
-  'nmod_mpoly/cmp.c',
-  'nmod_mpoly/combine_like_terms.c',
-  'nmod_mpoly/compose_mat.c',
-  'nmod_mpoly/compose_nmod_mpoly.c',
-  'nmod_mpoly/compose_nmod_mpoly_gen.c',
-  'nmod_mpoly/compose_nmod_mpoly_geobucket.c',
-  'nmod_mpoly/compose_nmod_mpoly_horner.c',
-  'nmod_mpoly/compose_nmod_poly.c',
-  'nmod_mpoly/content_vars.c',
-  'nmod_mpoly/ctx.c',
-  'nmod_mpoly/deflate.c',
-  'nmod_mpoly/deflation.c',
-  'nmod_mpoly/degrees.c',
-  'nmod_mpoly/derivative.c',
-  'nmod_mpoly/discriminant.c',
-  'nmod_mpoly/div.c',
-  'nmod_mpoly/divides.c',
-  'nmod_mpoly/divides_dense.c',
-  'nmod_mpoly/divides_heap_threaded.c',
-  'nmod_mpoly/divides_monagan_pearce.c',
-  'nmod_mpoly/div_monagan_pearce.c',
-  'nmod_mpoly/divrem.c',
-  'nmod_mpoly/divrem_ideal.c',
-  'nmod_mpoly/divrem_ideal_monagan_pearce.c',
-  'nmod_mpoly/divrem_monagan_pearce.c',
-  'nmod_mpoly/equal.c',
-  'nmod_mpoly/evaluate_all.c',
-  'nmod_mpoly/evaluate_one.c',
-  'nmod_mpoly_factor/append.c',
-  'nmod_mpoly_factor/clear.c',
-  'nmod_mpoly_factor/cmp.c',
-  'nmod_mpoly_factor/compression.c',
-  'nmod_mpoly_factor/eval.c',
-  'nmod_mpoly_factor/expand.c',
-  'nmod_mpoly_factor/factor.c',
-  'nmod_mpoly_factor/factor_content.c',
-  'nmod_mpoly_factor/factor_squarefree.c',
-  'nmod_mpoly_factor/fit_length.c',
-  'nmod_mpoly_factor/gcd_zippel.c',
-  'nmod_mpoly_factor/get_set.c',
-  'nmod_mpoly_factor/init.c',
-  'nmod_mpoly_factor/inlines.c',
-  'nmod_mpoly_factor/io.c',
-  'nmod_mpoly_factor/irred_lgprime.c',
-  'nmod_mpoly_factor/irred_medprime.c',
-  'nmod_mpoly_factor/irred_smprime_wang.c',
-  'nmod_mpoly_factor/irred_smprime_zassenhaus.c',
-  'nmod_mpoly_factor/irred_smprime_zippel.c',
-  'nmod_mpoly_factor/lcc_wang.c',
-  'nmod_mpoly_factor/mpoly_hlift.c',
-  'nmod_mpoly_factor/mpoly_hlift_zippel.c',
-  'nmod_mpoly_factor/mpoly_pfrac.c',
-  'nmod_mpoly_factor/mpolyu.c',
-  'nmod_mpoly_factor/mpolyv.c',
-  'nmod_mpoly_factor/n_bpoly_mod.c',
-  'nmod_mpoly_factor/n_bpoly_mod_factor_lgprime.c',
-  'nmod_mpoly_factor/n_bpoly_mod_factor_smprime.c',
-  'nmod_mpoly_factor/n_bpoly_mod_hlift.c',
-  'nmod_mpoly_factor/n_bpoly_mod_pfrac.c',
-  'nmod_mpoly_factor/nmod_mat_extras.c',
-  'nmod_mpoly_factor/n_poly_vec.c',
-  'nmod_mpoly_factor/polyu3_mod_hlift.c',
-  'nmod_mpoly_factor/polyun.c',
-  'nmod_mpoly_factor/realloc.c',
-  'nmod_mpoly_factor/sort.c',
-  'nmod_mpoly_factor/zip_helpers.c',
-  'nmod_mpoly/fit_length.c',
-  'nmod_mpoly/gcd_brown.c',
-  'nmod_mpoly/gcd.c',
-  'nmod_mpoly/gcd_cofactors.c',
-  'nmod_mpoly/gcd_hensel.c',
-  'nmod_mpoly/gcd_zippel2.c',
-  'nmod_mpoly/gcd_zippel.c',
-  'nmod_mpoly/gen.c',
-  'nmod_mpoly/geobuckets.c',
-  'nmod_mpoly/get_coeff.c',
-  'nmod_mpoly/get_set_is_nmod_poly.c',
-  'nmod_mpoly/get_str_pretty.c',
-  'nmod_mpoly/get_term.c',
-  'nmod_mpoly/get_term_coeff_ui.c',
-  'nmod_mpoly/get_term_exp.c',
-  'nmod_mpoly/get_term_monomial.c',
-  'nmod_mpoly/get_term_ui_fmpz.c',
-  'nmod_mpoly/get_term_ui_ui.c',
-  'nmod_mpoly/get_term_var_exp.c',
-  'nmod_mpoly/get_ui.c',
-  'nmod_mpoly/inflate.c',
-  'nmod_mpoly/init.c',
-  'nmod_mpoly/inlines.c',
-  'nmod_mpoly/interp.c',
-  'nmod_mpoly/io.c',
-  'nmod_mpoly/is_canonical.c',
-  'nmod_mpoly/is_gen.c',
-  'nmod_mpoly/is_ui.c',
-  'nmod_mpoly/lead_coeff_vars.c',
-  'nmod_mpoly/make_monic.c',
-  'nmod_mpoly/mpolyd.c',
-  'nmod_mpoly/mpolyn.c',
-  'nmod_mpoly/mpolyn_divides_threaded.c',
-  'nmod_mpoly/mpolyn_gcd_brown.c',
-  'nmod_mpoly/mpolyu.c',
-  'nmod_mpoly/mpolyu_divides.c',
-  'nmod_mpoly/mpolyu_gcdp_zippel.c',
-  'nmod_mpoly/mpolyun.c',
-  'nmod_mpoly/mpolyun_divides.c',
-  'nmod_mpoly/mul_array.c',
-  'nmod_mpoly/mul_array_threaded.c',
-  'nmod_mpoly/mul.c',
-  'nmod_mpoly/mul_dense.c',
-  'nmod_mpoly/mul_heap_threaded.c',
-  'nmod_mpoly/mul_johnson.c',
-  'nmod_mpoly/neg.c',
-  'nmod_mpoly/pow_fmpz.c',
-  'nmod_mpoly/pow_rmul.c',
-  'nmod_mpoly/pow_ui.c',
-  'nmod_mpoly/push_term.c',
-  'nmod_mpoly/quadratic_root.c',
-  'nmod_mpoly/randtest.c',
-  'nmod_mpoly/realloc.c',
-  'nmod_mpoly/repack_bits.c',
-  'nmod_mpoly/resize.c',
-  'nmod_mpoly/resultant.c',
-  'nmod_mpoly/reverse.c',
-  'nmod_mpoly/scalar.c',
-  'nmod_mpoly/set.c',
-  'nmod_mpoly/set_coeff.c',
-  'nmod_mpoly/set_fmpz.c',
-  'nmod_mpoly/setform.c',
-  'nmod_mpoly/set_str_pretty.c',
-  'nmod_mpoly/set_term_coeff_ui.c',
-  'nmod_mpoly/set_term_exp.c',
-  'nmod_mpoly/sort_terms.c',
-  'nmod_mpoly/sqrt_heap.c',
-  'nmod_mpoly/stack.c',
-  'nmod_mpoly/sub.c',
-  'nmod_mpoly/sub_ui.c',
-  'nmod_mpoly/term_content.c',
-  'nmod_mpoly/term_exp_fits.c',
-  'nmod_mpoly/to_from_nmod_poly.c',
-  'nmod_mpoly/univar.c',
-  'nmod_mpoly/void_ring.c',
-  'nmod_poly/add.c',
-  'nmod_poly/add_series.c',
-  'nmod_poly/add_ui.c',
-  'nmod_poly/asinh_series.c',
-  'nmod_poly/asin_series.c',
-  'nmod_poly/atanh_series.c',
-  'nmod_poly/atan_series.c',
-  'nmod_poly/berlekamp_massey.c',
-  'nmod_poly/bit_pack.c',
-  'nmod_poly/bit_unpack.c',
-  'nmod_poly/clear.c',
-  'nmod_poly/compose.c',
-  'nmod_poly/compose_horner.c',
-  'nmod_poly/compose_mod_brent_kung.c',
-  'nmod_poly/compose_mod_brent_kung_precomp_preinv.c',
-  'nmod_poly/compose_mod_brent_kung_preinv.c',
-  'nmod_poly/compose_mod_brent_kung_vec_preinv.c',
-  'nmod_poly/compose_mod_brent_kung_vec_preinv_threaded.c',
-  'nmod_poly/compose_mod.c',
-  'nmod_poly/compose_mod_horner.c',
-  'nmod_poly/compose_series.c',
-  'nmod_poly/conway.c',
-  'nmod_poly/conway_polynomial_data.c',
-  'nmod_poly/cosh_series.c',
-  'nmod_poly/cos_series.c',
-  'nmod_poly/deflate.c',
-  'nmod_poly/deflation.c',
-  'nmod_poly/derivative.c',
-  'nmod_poly/discriminant.c',
-  'nmod_poly/div.c',
-  'nmod_poly/divexact.c',
-  'nmod_poly/divides.c',
-  'nmod_poly/div_newton_n_preinv.c',
-  'nmod_poly/divrem_basecase.c',
-  'nmod_poly/divrem.c',
-  'nmod_poly/divrem_newton_n_preinv.c',
-  'nmod_poly/div_root.c',
-  'nmod_poly/div_series.c',
-  'nmod_poly/equal.c',
-  'nmod_poly/equal_trunc.c',
-  'nmod_poly/evaluate_mat.c',
-  'nmod_poly/evaluate_nmod.c',
-  'nmod_poly/evaluate_nmod_vec.c',
-  'nmod_poly/exp_series.c',
-  'nmod_poly_factor/clear.c',
-  'nmod_poly_factor/concat.c',
-  'nmod_poly_factor/factor_berlekamp.c',
-  'nmod_poly_factor/factor.c',
-  'nmod_poly_factor/factor_cantor_zassenhaus.c',
-  'nmod_poly_factor/factor_distinct_deg.c',
-  'nmod_poly_factor/factor_distinct_deg_threaded.c',
-  'nmod_poly_factor/factor_equal_deg.c',
-  'nmod_poly_factor/factor_equal_deg_prob.c',
-  'nmod_poly_factor/factor_kaltofen_shoup.c',
-  'nmod_poly_factor/factor_squarefree.c',
-  'nmod_poly_factor/fit_length.c',
-  'nmod_poly_factor/get_poly.c',
-  'nmod_poly_factor/init.c',
-  'nmod_poly_factor/inlines.c',
-  'nmod_poly_factor/insert.c',
-  'nmod_poly_factor/is_irreducible.c',
-  'nmod_poly_factor/is_squarefree.c',
-  'nmod_poly_factor/pow.c',
-  'nmod_poly_factor/print.c',
-  'nmod_poly_factor/realloc.c',
-  'nmod_poly_factor/roots.c',
-  'nmod_poly_factor/roots_factored.c',
-  'nmod_poly_factor/set.c',
-  'nmod_poly/find_distinct_nonzero_roots.c',
-  'nmod_poly/fit_length.c',
-  'nmod_poly/gcd.c',
-  'nmod_poly/gcdinv.c',
-  'nmod_poly/get_str.c',
-  'nmod_poly/hgcd.c',
-  'nmod_poly/inflate.c',
-  'nmod_poly/init.c',
-  'nmod_poly/inlines.c',
-  'nmod_poly/integral.c',
-  'nmod_poly/interpolate_nmod_vec.c',
-  'nmod_poly/invmod.c',
-  'nmod_poly/inv_series.c',
-  'nmod_poly/inv_series_newton.c',
-  'nmod_poly/invsqrt_series.c',
-  'nmod_poly/io.c',
-  'nmod_poly/KS2_pack.c',
-  'nmod_poly/KS2_reduce.c',
-  'nmod_poly/KS2_unpack.c',
-  'nmod_poly/log_series.c',
-  'nmod_poly/make_monic.c',
-  'nmod_poly_mat/add.c',
-  'nmod_poly_mat/clear.c',
-  'nmod_poly_mat/concat.c',
-  'nmod_poly_mat/det.c',
-  'nmod_poly_mat/equal.c',
-  'nmod_poly_mat/evaluate_nmod.c',
-  'nmod_poly_mat/fflu.c',
-  'nmod_poly_mat/find_pivot_any.c',
-  'nmod_poly_mat/find_pivot_partial.c',
-  'nmod_poly_mat/get_set_coeff_mat.c',
-  'nmod_poly_mat/init.c',
-  'nmod_poly_mat/init_set.c',
-  'nmod_poly_mat/inlines.c',
-  'nmod_poly_mat/inv.c',
-  'nmod_poly_mat/is_one.c',
-  'nmod_poly_mat/is_zero.c',
-  'nmod_poly_mat/max_length.c',
-  'nmod_poly_mat/mul.c',
-  'nmod_poly_mat/mul_classical.c',
-  'nmod_poly_mat/mul_interpolate.c',
-  'nmod_poly_mat/mul_KS.c',
-  'nmod_poly_mat/neg.c',
-  'nmod_poly_mat/nullspace.c',
-  'nmod_poly_mat/one.c',
-  'nmod_poly_mat/pow.c',
-  'nmod_poly_mat/print.c',
-  'nmod_poly_mat/rand.c',
-  'nmod_poly_mat/rank.c',
-  'nmod_poly_mat/rref.c',
-  'nmod_poly_mat/scalar.c',
-  'nmod_poly_mat/set.c',
-  'nmod_poly_mat/set_trunc.c',
-  'nmod_poly_mat/shift_left_right.c',
-  'nmod_poly_mat/solve.c',
-  'nmod_poly_mat/solve_fflu.c',
-  'nmod_poly_mat/solve_fflu_precomp.c',
-  'nmod_poly_mat/sqr.c',
-  'nmod_poly_mat/sub.c',
-  'nmod_poly_mat/trace.c',
-  'nmod_poly_mat/window.c',
-  'nmod_poly_mat/zero.c',
-  'nmod_poly/max_bits.c',
-  'nmod_poly/mul.c',
-  'nmod_poly/mul_classical.c',
-  'nmod_poly/mulhigh.c',
-  'nmod_poly/mulhigh_classical.c',
-  'nmod_poly/mul_KS2.c',
-  'nmod_poly/mul_KS4.c',
-  'nmod_poly/mul_KS.c',
-  'nmod_poly/mullow.c',
-  'nmod_poly/mullow_classical.c',
-  'nmod_poly/mullow_KS.c',
-  'nmod_poly/mulmod.c',
-  'nmod_poly/mulmod_preinv.c',
-  'nmod_poly/multi_crt.c',
-  'nmod_poly/neg.c',
-  'nmod_poly/pow_binexp.c',
-  'nmod_poly/pow.c',
-  'nmod_poly/powers_mod.c',
-  'nmod_poly/power_sums.c',
-  'nmod_poly/power_sums_to_poly.c',
-  'nmod_poly/powmod_binexp.c',
-  'nmod_poly/powmod_binexp_preinv.c',
-  'nmod_poly/powmod_x_preinv.c',
-  'nmod_poly/pow_trunc.c',
-  'nmod_poly/product_roots_nmod_vec.c',
-  'nmod_poly/randtest.c',
-  'nmod_poly/randtest_monic_primitive.c',
-  'nmod_poly/realloc.c',
-  'nmod_poly/rem.c',
-  'nmod_poly/remove.c',
-  'nmod_poly/resultant.c',
-  'nmod_poly/reverse.c',
-  'nmod_poly/revert_series.c',
-  'nmod_poly/scalar.c',
-  'nmod_poly/set_coeff_ui.c',
-  'nmod_poly/set_str.c',
-  'nmod_poly/set_trunc.c',
-  'nmod_poly/shift_left_right.c',
-  'nmod_poly/sinh_series.c',
-  'nmod_poly/sin_series.c',
-  'nmod_poly/sqrt.c',
-  'nmod_poly/sqrt_series.c',
-  'nmod_poly/sub.c',
-  'nmod_poly/sub_series.c',
-  'nmod_poly/sub_ui.c',
-  'nmod_poly/tanh_series.c',
-  'nmod_poly/tan_series.c',
-  'nmod_poly/taylor_shift.c',
-  'nmod_poly/tree.c',
-  'nmod_poly/xgcd.c',
-  'nmod_vec/add.c',
-  'nmod_vec/discrete_log_pohlig_hellman.c',
-  'nmod_vec/dot.c',
-  'nmod_vec/inlines.c',
-  'nmod_vec/io.c',
-  'nmod_vec/max_bits.c',
-  'nmod_vec/neg.c',
-  'nmod_vec/randtest.c',
-  'nmod_vec/reduce.c',
-  'nmod_vec/scalar.c',
-  'nmod_vec/sub.c',
-  'n_poly/io.c',
-  'n_poly/n_bpoly.c',
-  'n_poly/n_bpoly_mod.c',
-  'n_poly/n_bpoly_mod_gcd.c',
-  'n_poly/n_bpoly_stack.c',
-  'n_poly/n_fq_bpoly.c',
-  'n_poly/n_fq_bpoly_gcd.c',
-  'n_poly/n_fq_bpoly_taylor_shift.c',
-  'n_poly/n_fq.c',
-  'n_poly/n_fq_poly_add.c',
-  'n_poly/n_fq_poly_add_si.c',
-  'n_poly/n_fq_poly.c',
-  'n_poly/n_fq_poly_divrem.c',
-  'n_poly/n_fq_poly_gcd.c',
-  'n_poly/n_fq_poly_inv_series.c',
-  'n_poly/n_fq_poly_mul.c',
-  'n_poly/n_fq_poly_mullow.c',
-  'n_poly/n_fq_poly_mulmod.c',
-  'n_poly/n_fq_poly_neg.c',
-  'n_poly/n_fq_poly_pow.c',
-  'n_poly/n_fq_poly_rem.c',
-  'n_poly/n_fq_poly_sub.c',
-  'n_poly/n_fq_polyun.c',
-  'n_poly/n_fq_poly_xgcd.c',
-  'n_poly/n_fq_pow_cache.c',
-  'n_poly/nmod_n_fq_interp.c',
-  'n_poly/nmod_pow_cache.c',
-  'n_poly/n_poly.c',
-  'n_poly/n_poly_mod.c',
-  'n_poly/n_poly_stack.c',
-  'n_poly/n_polyu1n_gcd.c',
-  'n_poly/n_polyu.c',
-  'n_poly/n_polyun.c',
-  'n_poly/n_polyun_stack.c',
-  'n_poly/n_tpoly.c',
-  'n_poly/zippel_helpers.c',
-  'padic/add.c',
-  'padic/clear.c',
-  'padic/ctx_clear.c',
-  'padic/ctx_init.c',
-  'padic/div.c',
-  'padic/exp_balanced.c',
-  'padic/exp.c',
-  'padic/exp_rectangular.c',
-  'padic/get_fmpq.c',
-  'padic/get_fmpz.c',
-  'padic/get_mpq.c',
-  'padic/get_mpz.c',
-  'padic/get_str.c',
-  'padic/init.c',
-  'padic/inlines.c',
-  'padic/inv.c',
-  'padic/io.c',
-  'padic/lifts.c',
-  'padic/log_balanced.c',
-  'padic/log.c',
-  'padic/log_rectangular.c',
-  'padic/log_satoh.c',
-  'padic_mat/add.c',
-  'padic_mat/canonicalise.c',
-  'padic_mat/clear.c',
-  'padic_mat/equal.c',
-  'padic_mat/get_entry_padic.c',
-  'padic_mat/get_fmpq_mat.c',
-  'padic_mat/init.c',
-  'padic_mat/inlines.c',
-  'padic_mat/io.c',
-  'padic_mat/is_canonical.c',
-  'padic_mat/is_reduced.c',
-  'padic_mat/is_zero.c',
-  'padic_mat/mul.c',
-  'padic_mat/neg.c',
-  'padic_mat/one.c',
-  'padic_mat/randtest.c',
-  'padic_mat/reduce.c',
-  'padic_mat/scalar.c',
-  'padic_mat/set.c',
-  'padic_mat/set_entry_padic.c',
-  'padic_mat/set_fmpq_mat.c',
-  'padic_mat/sub.c',
-  'padic_mat/swap.c',
-  'padic_mat/transpose.c',
-  'padic_mat/zero.c',
-  'padic/mul.c',
-  'padic/neg.c',
-  'padic_poly/add.c',
-  'padic_poly/canonicalise.c',
-  'padic_poly/clear.c',
-  'padic_poly/compose.c',
-  'padic_poly/compose_pow.c',
-  'padic_poly/derivative.c',
-  'padic_poly/equal.c',
-  'padic_poly/evaluate_padic.c',
-  'padic_poly/fit_length.c',
-  'padic_poly/get_coeff_padic.c',
-  'padic_poly/get_fmpq_poly.c',
-  'padic_poly/get_fmpz_poly.c',
-  'padic_poly/init.c',
-  'padic_poly/inlines.c',
-  'padic_poly/inv_series.c',
-  'padic_poly/io.c',
-  'padic_poly/is_canonical.c',
-  'padic_poly/is_reduced.c',
-  'padic_poly/mul.c',
-  'padic_poly/neg.c',
-  'padic_poly/normalise.c',
-  'padic_poly/pow.c',
-  'padic_poly/randtest.c',
-  'padic_poly/realloc.c',
-  'padic_poly/reduce.c',
-  'padic_poly/scalar_mul_padic.c',
-  'padic_poly/set.c',
-  'padic_poly/set_coeff_padic.c',
-  'padic_poly/set_fmpq.c',
-  'padic_poly/set_fmpq_poly.c',
-  'padic_poly/set_fmpz.c',
-  'padic_poly/set_fmpz_poly.c',
-  'padic_poly/set_padic.c',
-  'padic_poly/set_si.c',
-  'padic_poly/set_ui.c',
-  'padic_poly/shift_left.c',
-  'padic_poly/shift_right.c',
-  'padic_poly/sub.c',
-  'padic_poly/swap.c',
-  'padic/pow_si.c',
-  'padic/randtest.c',
-  'padic/reduce.c',
-  'padic/set.c',
-  'padic/set_fmpq.c',
-  'padic/set_fmpz.c',
-  'padic/set_mpq.c',
-  'padic/set_mpz.c',
-  'padic/set_si.c',
-  'padic/set_ui.c',
-  'padic/shift.c',
-  'padic/sqrt.c',
-  'padic/sub.c',
-  'padic/teichmuller.c',
-  'padic/val_fac.c',
-  'partitions/fmpz_fmpz.c',
-  'partitions/hrr_sum_arb.c',
-  'partitions/leading_fmpz.c',
-  'partitions/rademacher_bound.c',
-  'perm/inlines.c',
-  'perm/parity.c',
-  'perm/randtest.c',
-  'qadic/ctx_clear.c',
-  'qadic/ctx_init.c',
-  'qadic/exp_balanced.c',
-  'qadic/exp.c',
-  'qadic/exp_rectangular.c',
-  'qadic/frobenius.c',
-  'qadic/inlines.c',
-  'qadic/inv.c',
-  'qadic/io.c',
-  'qadic/log_balanced.c',
-  'qadic/log.c',
-  'qadic/log_rectangular.c',
-  'qadic/mul.c',
-  'qadic/norm_analytic.c',
-  'qadic/norm.c',
-  'qadic/norm_resultant.c',
-  'qadic/pow.c',
-  'qadic/set_fmpz_poly.c',
-  'qadic/sqrt.c',
-  'qadic/teichmuller.c',
-  'qadic/trace.c',
-  'qfb/exponent.c',
-  'qfb/exponent_element.c',
-  'qfb/exponent_grh.c',
-  'qfb/hash_clear.c',
-  'qfb/hash_find.c',
-  'qfb/hash_init.c',
-  'qfb/hash_insert.c',
-  'qfb/inlines.c',
-  'qfb/io.c',
-  'qfb/is_reduced.c',
-  'qfb/nucomp.c',
-  'qfb/nudupl.c',
-  'qfb/pow.c',
-  'qfb/pow_ui.c',
-  'qfb/prime_form.c',
-  'qfb/reduce.c',
-  'qfb/reduced_forms.c',
-  'qqbar/abs2.c',
-  'qqbar/abs.c',
-  'qqbar/acb_lindep.c',
-  'qqbar/acos_pi.c',
-  'qqbar/acot_pi.c',
-  'qqbar/acsc_pi.c',
-  'qqbar/add.c',
-  'qqbar/affine_transform.c',
-  'qqbar/asec_pi.c',
-  'qqbar/asin_pi.c',
-  'qqbar/atan_pi.c',
-  'qqbar/cache_enclosure.c',
-  'qqbar/ceil.c',
-  'qqbar/clear.c',
-  'qqbar/cmpabs.c',
-  'qqbar/cmpabs_im.c',
-  'qqbar/cmpabs_re.c',
-  'qqbar/cmp_im.c',
-  'qqbar/cmp_re.c',
-  'qqbar/cmp_root_order.c',
-  'qqbar/composed_op.c',
-  'qqbar/conj.c',
-  'qqbar/conjugates.c',
-  'qqbar/cos_pi.c',
-  'qqbar/cot_pi.c',
-  'qqbar/csc_pi.c',
-  'qqbar/csgn.c',
-  'qqbar/denominator.c',
-  'qqbar/div.c',
-  'qqbar/eigenvalues_fmpq_mat.c',
-  'qqbar/eigenvalues_fmpz_mat.c',
-  'qqbar/enclosure_raw.c',
-  'qqbar/equal.c',
-  'qqbar/equal_fmpq_poly_val.c',
-  'qqbar/evaluate_fmpq_poly.c',
-  'qqbar/evaluate_fmpz_mpoly.c',
-  'qqbar/evaluate_fmpz_poly.c',
-  'qqbar/exp_pi_i.c',
-  'qqbar/express_in_field.c',
-  'qqbar/floor.c',
-  'qqbar/fmpq_pow_si_ui.c',
-  'qqbar/fmpq_root_ui.c',
-  'qqbar/get_acb.c',
-  'qqbar/get_arb.c',
-  'qqbar/get_arb_im.c',
-  'qqbar/get_arb_re.c',
-  'qqbar/get_fexpr.c',
-  'qqbar/get_fmpq.c',
-  'qqbar/get_fmpz.c',
-  'qqbar/get_quadratic.c',
-  'qqbar/guess.c',
-  'qqbar/hash.c',
-  'qqbar/height_bits.c',
-  'qqbar/height.c',
-  'qqbar/i.c',
-  'qqbar/im.c',
-  'qqbar/init.c',
-  'qqbar/inlines.c',
-  'qqbar/inv.c',
-  'qqbar/log_pi_i.c',
-  'qqbar/mul_2exp_si.c',
-  'qqbar/mul.c',
-  'qqbar/neg.c',
-  'qqbar/numerator.c',
-  'qqbar/phi.c',
-  'qqbar/pow.c',
-  'qqbar/print.c',
-  'qqbar/printn.c',
-  'qqbar/randtest.c',
-  'qqbar/re.c',
-  'qqbar/re_im.c',
-  'qqbar/root_of_unity.c',
-  'qqbar/roots_fmpq_poly.c',
-  'qqbar/roots_fmpz_poly.c',
-  'qqbar/roots_poly_squarefree.c',
-  'qqbar/root_ui.c',
-  'qqbar/sec_pi.c',
-  'qqbar/set.c',
-  'qqbar/set_d.c',
-  'qqbar/set_fexpr.c',
-  'qqbar/set_fmpq.c',
-  'qqbar/set_fmpz.c',
-  'qqbar/set_re_im.c',
-  'qqbar/set_re_im_d.c',
-  'qqbar/set_si.c',
-  'qqbar/set_ui.c',
-  'qqbar/sgn.c',
-  'qqbar/sgn_im.c',
-  'qqbar/sgn_re.c',
-  'qqbar/sin_pi.c',
-  'qqbar/sub.c',
-  'qqbar/swap.c',
-  'qqbar/tan_pi.c',
-  'qqbar/validate_enclosure.c',
-  'qqbar/write.c',
-  'qsieve/block_lanczos.c',
-  'qsieve/clear.c',
-  'qsieve/collect_relations.c',
-  'qsieve/compute_poly_data.c',
-  'qsieve/factor.c',
-  'qsieve/init.c',
-  'qsieve/knuth_schroeppel.c',
-  'qsieve/large_prime_variant.c',
-  'qsieve/linalg.c',
-  'qsieve/poly.c',
-  'qsieve/primes_init.c',
-  'qsieve/square_root.c',
-  #'test/main.c',
-  'thread_pool/clear.c',
-  'thread_pool/distribute_work.c',
-  'thread_pool/find_work.c',
-  'thread_pool/get_size.c',
-  'thread_pool/give_back.c',
-  'thread_pool/init.c',
-  'thread_pool/request.c',
-  'thread_pool/restore_affinity.c',
-  'thread_pool/set_affinity.c',
-  'thread_pool/set_size.c',
-  'thread_pool/wait.c',
-  'thread_pool/wake.c',
-  'thread_support/get_num_available_threads.c',
-  'thread_support/thread_support.c',
-  'ulong_extras/cbrt.c',
-  'ulong_extras/cleanup_primes.c',
-  'ulong_extras/clog.c',
-  'ulong_extras/compute_primes.c',
-  'ulong_extras/CRT.c',
-  'ulong_extras/discrete_log_bsgs.c',
-  'ulong_extras/div2_preinv.c',
-  'ulong_extras/divides.c',
-  'ulong_extras/divrem2_precomp.c',
-  'ulong_extras/divrem2_preinv.c',
-  'ulong_extras/euler_phi.c',
-  'ulong_extras/factor.c',
-  'ulong_extras/factor_ecm.c',
-  'ulong_extras/factor_misc.c',
-  'ulong_extras/factorial_fast_mod2_preinv.c',
-  'ulong_extras/factorial_mod2_preinv.c',
-  'ulong_extras/factor_insert.c',
-  'ulong_extras/factor_lehman.c',
-  'ulong_extras/factor_one_line.c',
-  'ulong_extras/factor_partial.c',
-  'ulong_extras/factor_pollard_brent.c',
-  'ulong_extras/factor_power235.c',
-  'ulong_extras/factor_pp1.c',
-  'ulong_extras/factor_SQUFOF.c',
-  'ulong_extras/factor_trial.c',
-  'ulong_extras/flog.c',
-  'ulong_extras/gcdinv.c',
-  'ulong_extras/inlines.c',
-  'ulong_extras/is_oddprime.c',
-  'ulong_extras/is_perfect_power235.c',
-  'ulong_extras/is_perfect_power.c',
-  'ulong_extras/is_prime.c',
-  'ulong_extras/is_probabprime.c',
-  'ulong_extras/is_square.c',
-  'ulong_extras/is_squarefree.c',
-  'ulong_extras/is_strong_probabprime2_preinv.c',
-  'ulong_extras/is_strong_probabprime_precomp.c',
-  'ulong_extras/jacobi.c',
-  'ulong_extras/lll_mod_preinv.c',
-  'ulong_extras/ll_mod_preinv.c',
-  'ulong_extras/mod2_precomp.c',
-  'ulong_extras/mod2_preinv.c',
-  'ulong_extras/mod_precomp.c',
-  'ulong_extras/moebius_mu.c',
-  'ulong_extras/mulmod_precomp.c',
-  'ulong_extras/mulmod_precomp_shoup.c',
-  'ulong_extras/mulmod_preinv.c',
-  'ulong_extras/nextprime.c',
-  'ulong_extras/nth_prime.c',
-  'ulong_extras/pow.c',
-  'ulong_extras/powmod2_preinv.c',
-  'ulong_extras/powmod2_ui_preinv.c',
-  'ulong_extras/powmod_precomp.c',
-  'ulong_extras/powmod_ui_preinv.c',
-  'ulong_extras/preinvert_limb.c',
-  'ulong_extras/prime_inverses_arr_readonly.c',
-  'ulong_extras/prime_pi_bounds.c',
-  'ulong_extras/prime_pi.c',
-  'ulong_extras/primes_arr_readonly.c',
-  'ulong_extras/primes_clear.c',
-  'ulong_extras/primes_extend_small.c',
-  'ulong_extras/primes_init.c',
-  'ulong_extras/primes_jump_after.c',
-  'ulong_extras/primes_next.c',
-  'ulong_extras/primes_sieve_range.c',
-  'ulong_extras/primitive_root_prime.c',
-  'ulong_extras/randomisation.c',
-  'ulong_extras/remove2_precomp.c',
-  'ulong_extras/remove.c',
-  'ulong_extras/revbin.c',
-  'ulong_extras/root.c',
-  'ulong_extras/root_estimate.c',
-  'ulong_extras/rootrem.c',
-  'ulong_extras/sizeinbase.c',
-  'ulong_extras/sqrt.c',
-  'ulong_extras/sqrtmod.c',
-  'ulong_extras/sqrtmodn.c',
-  'ulong_extras/sqrtmod_primepow.c',
-  'ulong_extras/sqrtrem.c',
-  'ulong_extras/xgcd.c',
-]
diff --git a/src/ulong_extras/test/meson.build b/src/ulong_extras/test/meson.build
deleted file mode 100644
index d9ae8dd9a1..0000000000
--- a/src/ulong_extras/test/meson.build
+++ /dev/null
@@ -1,8 +0,0 @@
-test_exe = executable('main',
-  'main.c',
-  dependencies: flint_deps,
-  link_with: libflint,
-  include_directories: src_inc,
-  install: false,
-)
-test('ulong_extras', test_exe)

From e1132fa074c5ceb30e3ad395a716a4d6bc2e5bdf Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 00:30:01 +0100
Subject: [PATCH 09/36] build: generate build for fft_small and assembly

---
 _meson_build/generate_meson_build.py | 176 ++++++++++++++++++++-------
 _meson_build/meson.build             |  13 +-
 detection/meson.build                |  88 ++------------
 3 files changed, 151 insertions(+), 126 deletions(-)

diff --git a/_meson_build/generate_meson_build.py b/_meson_build/generate_meson_build.py
index a6d79513b7..d14c75f7b8 100644
--- a/_meson_build/generate_meson_build.py
+++ b/_meson_build/generate_meson_build.py
@@ -6,14 +6,14 @@
 
 this_dir = dirname(abspath(__file__))
 
-files = [
+files_to_copy = [
     'configure',
     'Makefile',
     'meson.build',
     'meson.options',
 ]
 
-# Directories in src that are not modules to be built as part of libflint
+# Directories in src that are not modules or that need special handling
 exclude_mod_dirs = [
     'test',
     'profile',
@@ -21,6 +21,10 @@
     'python',
 ]
 
+conditional_modules = [
+    'fft_small',
+]
+
 # Modules that do not have a corresponding header file
 mod_no_header = [
     'generic_files',
@@ -91,6 +95,12 @@
 #   python _meson_build/generate_meson_build.py
 #
 
+configure_file(
+  input: 'flint.h.in',
+  output: 'flint.h',
+  configuration: cfg_data,
+)
+
 src_dir_inc = include_directories('.')
 
 modules = [
@@ -126,6 +136,14 @@
   endif
 endforeach
 
+# Add conditional modules
+
+if have_fft_small
+  subdir('fft_small')
+  mod_tests += ['fft_small/test']
+  headers_all += ['fft_small.h']
+endif
+
 headers_all = files(headers_all)
 '''
 
@@ -160,7 +178,70 @@
 test('%s', test_exe)
 '''
 
+asm_submodule_arm64 = '''\
+
+asm_deps = [
+  '../../../config.m4',
+  '../asm-defs.m4',
+]
+
+if host_machine.system() == 'darwin'
+  asm_deps += ['darwin.m4']
+else
+  asm_deps += ['arm64-defs.m4']
+endif
+
+asm_files = [
+%s
+]
+'''
+
+asm_submodule_x86_broadwell = '''\
+
+asm_deps = [
+    '../../../config.m4',
+    '../asm-defs.m4',
+    'x86-defs.m4',
+]
+
+if host_machine.system() == 'darwin'
+  asm_deps += ['darwin.m4']
+endif
+
+asm_files = [
+%s
+]
+'''
+
+asm_to_s_files = '''\
+
+m4_prog = find_program('m4', native: true)
+
+foreach asm_file: asm_files
+  s_filename = fs.stem(asm_file) + '.s'
+  s_file = custom_target(s_filename,
+    input: [asm_file] + asm_deps,
+    output: s_filename,
+    command: [m4_prog, '-I..', '@INPUT0@'],
+    capture: true,
+  )
+  s_files += [s_file]
+endforeach
+'''
+
+
+asm_modules = [
+    ('mpn_extras/arm64', asm_submodule_arm64),
+    ('mpn_extras/x86_64/broadwell', asm_submodule_x86_broadwell),
+]
+
+
 def get_flint_modules(flint_root):
+    """
+    Scan the src directory and return a list of all modules.
+
+    Also check for possible mismatches between subdirs and headers.
+    """
     src_path = join(flint_root, 'src')
     is_mod = lambda p: isdir(join(src_path, p)) and p not in exclude_mod_dirs
     subdirs = [p for p in listdir(src_path) if is_mod(p)]
@@ -184,76 +265,83 @@ def get_flint_modules(flint_root):
 
     return subdirs
 
-parser = ArgumentParser(description='Generate Meson build files')
 
+parser = ArgumentParser(description='Generate Meson build files')
 parser.add_argument('-q', '--quiet', action='store_true',
                     help='Do not print anything')
 parser.add_argument('--error-if-changed', action='store_true',
                     help='Exit with error code 1 if the files have changed')
 parser.add_argument('output_dir', default='.', help='Output directory')
 
+
 def main(args):
     args = parser.parse_args(args)
 
-    for fname in files:
+    for fname in files_to_copy:
         src_path = join(this_dir, fname)
         dst_path = join(args.output_dir, fname)
-        if not args.quiet:
-            print('Copying {} to {}'.format(src_path, dst_path))
-        if args.error_if_changed:
-            if not same_files(src_path, dst_path):
-                print('File {} has changed'.format(dst))
-                return 1
-        copyfile(src_path, dst_path)
+        copy_file(src_path, dst_path, args)
 
     modules = get_flint_modules(args.output_dir)
 
-    modules_str = '\n'.join(f"  '{m}'," for m in sorted(modules))
-    mod_no_head_str = '\n'.join(f"  '{m}'," for m in sorted(mod_no_header))
-    mod_no_test_str = '\n'.join(f"  '{m}'," for m in sorted(mod_no_tests))
-    head_no_dir_str = '\n'.join(f"  '{m}'," for m in sorted(head_no_dir))
+    # We will generate the meson.build file for conditional modules but the
+    # main meson.build file will decide whether to include them or not.
+    modules_unconditional = set(modules) - set(conditional_modules)
 
+    # src/meson.build
     src_meson_build_text = src_meson_build % (
-        modules_str, mod_no_head_str, mod_no_test_str, head_no_dir_str)
-
+        format_lines(modules_unconditional),
+        format_lines(mod_no_header),
+        format_lines(mod_no_tests),
+        format_lines(head_no_dir),
+    )
     dst_path = join(args.output_dir, 'src', 'meson.build')
+    write_file(dst_path, src_meson_build_text, args)
 
-    if not args.quiet:
-        print('Writing meson.build to {}'.format(src_path))
-    if args.error_if_changed:
-        if not same_content(src_meson_build_text, src_path):
-            print('File {} has changed'.format(src_path))
-            return 1
-    with open(dst_path, 'w') as fout:
-        fout.write(src_meson_build_text)
-
+    # src/mod/meson.build
     for mod in modules + mod_no_header:
         mod_dir = join(args.output_dir, 'src', mod)
         c_files = [f for f in listdir(mod_dir) if f.endswith('.c')]
-        c_files_str = '\n'.join(f"  '{f}'," for f in sorted(c_files))
-        src_mod_meson_build_text = src_mod_meson_build % c_files_str
+        src_mod_meson_build_text = src_mod_meson_build % format_lines(c_files)
         dst_path = join(mod_dir, 'meson.build')
-        if not args.quiet:
-            print('Writing meson.build to {}'.format(dst_path))
-        if args.error_if_changed:
-            if not same_content(src_mod_meson_build_text, dst_path):
-                print('File {} has changed'.format(dst_path))
-                return 1
-        with open(dst_path, 'w') as fout:
-            fout.write(src_mod_meson_build_text)
+        write_file(dst_path, src_mod_meson_build_text, args)
 
+        # src/mod/test/meson.build
         if mod not in mod_no_tests:
             test_dir = join(mod_dir, 'test')
             test_mod_meson_build_text = test_mod_meson_build % mod
             dst_path = join(test_dir, 'meson.build')
-            if not args.quiet:
-                print('Writing meson.build to {}'.format(dst_path))
-            if args.error_if_changed:
-                if not same_content(test_mod_meson_build_text, dst_path):
-                    print('File {} has changed'.format(dst_path))
-                    return 1
-            with open(dst_path, 'w') as fout:
-                fout.write(test_mod_meson_build_text)
+            write_file(dst_path, test_mod_meson_build_text, args)
+
+    # src/mpn_extras/*/meson.build
+    for path, asm_submodule in asm_modules:
+        asm_dir = join(args.output_dir, 'src', path)
+        asm_files = [f for f in listdir(asm_dir) if f.endswith('.asm')]
+        asm_submodule_text = asm_submodule % format_lines(asm_files)
+        asm_submodule_text += asm_to_s_files
+        dst_path = join(asm_dir, 'meson.build')
+        write_file(dst_path, asm_submodule_text, args)
+
+
+def format_lines(lst):
+    return '\n'.join(f"  '{m}'," for m in sorted(lst))
+
+
+def write_file(dst_path, text, args):
+    if not args.quiet:
+        print('Writing %s' % dst_path)
+    if args.error_if_changed:
+        if not same_content(text, dst_path):
+            print('File {} has changed'.format(dst_path))
+            sys.exit(1)
+    with open(dst_path, 'w') as fout:
+        fout.write(text)
+
+
+def copy_file(src_path, dst_path, args):
+    with open(src_path, 'r') as f:
+        src_content = f.read()
+    write_file(dst_path, src_content, args)
 
 
 def same_files(src_path, dst_path):
diff --git a/_meson_build/meson.build b/_meson_build/meson.build
index 326220d250..5b292dd904 100644
--- a/_meson_build/meson.build
+++ b/_meson_build/meson.build
@@ -1,5 +1,5 @@
 project('FLINT', 'c',
-  version: '3.1.0',
+  version: '3.2.0-dev',
   license: 'LGPL3+',
   default_options: [
     'buildtype=release',
@@ -7,8 +7,13 @@ project('FLINT', 'c',
   ],
 )
 
-cc = meson.get_compiler('c')
 cfg_data = configuration_data()
+cfg_data.set('FLINT_MAJOR', meson.project_version().split('.')[0])
+cfg_data.set('FLINT_MINOR', meson.project_version().split('.')[1])
+cfg_data.set('FLINT_PATCH', meson.project_version().split('.')[2])
+cfg_data.set('FLINT_VERSION_FULL', meson.project_version())
+
+cc = meson.get_compiler('c')
 fs = import('fs')
 
 m_dep = cc.find_library('m', required: false)
@@ -23,10 +28,12 @@ add_project_arguments(
   language: 'c',
 )
 
-subdir('src')
 subdir('detection')
+subdir('src')
 
 if have_assembly
+  s_files = []
+  subdir('src' / assembly_dir)
   c_files_all += s_files
 endif
 
diff --git a/detection/meson.build b/detection/meson.build
index 9310f76348..a08f2d03f2 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -1,7 +1,11 @@
+# -----------------------------------------------------------------------------
+#    fft_small
+# -----------------------------------------------------------------------------
 
 fft_small_opt = get_option('fft_small')
 
 # check for headers used by fft_small
+# XXX: Need to actually compile a test program to check for AVX support
 has_avx = cc.has_header('immintrin.h')
 has_neon = cc.has_header('arm_neon.h')
 
@@ -22,21 +26,9 @@ if have_fft_small
         description: 'Define to use the fft_small module')
 endif
 
-if have_fft_small
-  c_files_all += [
-    'src/fft_small/default_ctx.c',
-    'src/fft_small/fmpz_poly_mul.c',
-    'src/fft_small/mpn_helpers.c',
-    'src/fft_small/mpn_mul.c',
-    'src/fft_small/mulmod_statisfies_bounds.c',
-    'src/fft_small/nmod_poly_mul.c',
-    'src/fft_small/sd_fft.c',
-    'src/fft_small/sd_fft_ctx.c',
-    'src/fft_small/sd_ifft.c',
-  ]
-  # Maybe fft_small.h should only be added conditionally as well...
-  # headers_all += ['src/fft_small.h']
-endif
+# -----------------------------------------------------------------------------
+#   assembly
+# -----------------------------------------------------------------------------
 
 assembly_opt = get_option('assembly')
 
@@ -52,11 +44,11 @@ assembly_opt = assembly_opt.require(host_machine.system() != 'windows',
 # those systems.
 if host_machine.cpu_family() == 'aarch64'
   assembly_cpu_supported = true
-  assembly_dir = 'arm64'
+  assembly_dir = 'mpn_extras/arm64'
   # FLINT_HAVE_ASSEMBLY_armv8
 elif host_machine.cpu_family() == 'x86_64'
   assembly_cpu_supported = true
-  assembly_dir = 'x86_64/broadwell'
+  assembly_dir = 'mpn_extras/x86_64/broadwell'
   # FLINT_HAVE_ASSEMBLY_x86_64_adx
 else
   assembly_cpu_supported = false
@@ -69,65 +61,3 @@ assembly_opt = assembly_opt.enable_auto_if(true)
 have_assembly = assembly_opt.enabled()
 
 message('ASSEMBLY: ', have_assembly ? 'enabled' : 'disabled')
-
-if have_assembly
-
-  asm_deps = [
-    '../config.m4',
-    '../src/mpn_extras/asm-defs.m4',
-  ]
-
-  if assembly_dir == 'arm64'
-    asm_files = [
-      'src/mpn_extras/arm64/mul_2.asm',
-      'src/mpn_extras/arm64/mulhigh_hard.asm',
-      'src/mpn_extras/arm64/mul_hard.asm',
-      'src/mpn_extras/arm64/sqrhigh_hard.asm',
-      'src/mpn_extras/arm64/mulhigh_basecase.asm',
-      'src/mpn_extras/arm64/sqr_hard.asm',
-    ]
-    asm_deps += [
-      '../src/mpn_extras/arm64/darwin.m4',
-      '../src/mpn_extras/arm64/arm64-defs.m4',
-    ]
-  elif assembly_dir == 'x86_64/broadwell'
-    asm_files = [
-      'src/mpn_extras/x86_64/broadwell/mullow_hard.asm',
-      'src/mpn_extras/x86_64/broadwell/2add_n_inplace.asm',
-      'src/mpn_extras/x86_64/broadwell/mulhigh_hard.asm',
-      'src/mpn_extras/x86_64/broadwell/sqrhigh_basecase_odd.asm',
-      'src/mpn_extras/x86_64/broadwell/mul_hard.asm',
-      'src/mpn_extras/x86_64/broadwell/mulhigh_normalised_hard.asm',
-      'src/mpn_extras/x86_64/broadwell/sqrhigh_hard.asm',
-      'src/mpn_extras/x86_64/broadwell/mullow_basecase.asm',
-      'src/mpn_extras/x86_64/broadwell/mulhigh_basecase.asm',
-      'src/mpn_extras/x86_64/broadwell/sqrhigh_basecase_even.asm',
-      'src/mpn_extras/x86_64/broadwell/sqr_hard.asm',
-    ]
-    asm_deps += [
-      '../src/mpn_extras/x86_64/broadwell/x86_64-defs.m4',
-    ]
-    if host_machine.system() == 'darwin'
-      asm_deps += [
-        '../src/mpn_extras/x86_64/broadwell/darwin.m4',
-      ]
-    endif
-  else
-    error('Unknown assembly_dir: ', assembly_dir)
-  endif
-
-  m4_prog = find_program('m4', native: true)
-
-  s_files = []
-  foreach asm_file: asm_files
-    s_filename = fs.stem(asm_file) + '.s'
-    s_file = custom_target(s_filename,
-      input: ['..' / asm_file] + asm_deps,
-      output: s_filename,
-      command: [m4_prog, '-I..', '@INPUT0@'],
-      capture: true,
-    )
-    s_files += [s_file]
-  endforeach
-
-endif

From 2996ea3a218b034a5c54ca9eb40c299405e09622 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 00:37:21 +0100
Subject: [PATCH 10/36] build: add dummy configure script

---
 _meson_build/configure | 158 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 158 insertions(+)
 create mode 100644 _meson_build/configure

diff --git a/_meson_build/configure b/_meson_build/configure
new file mode 100644
index 0000000000..9e4bb23582
--- /dev/null
+++ b/_meson_build/configure
@@ -0,0 +1,158 @@
+#!/usr/bin/env python
+
+from os.path import join, abspath, dirname
+import sys
+import shutil
+from subprocess import check_call
+from argparse import ArgumentParser
+
+
+parser = ArgumentParser(description='Configure FLINT for building with meson')
+
+parser.add_argument('--build-dir', default='build', help='Build directory')
+
+parser.add_argument('--prefix', default=None, help='Installation prefix')
+parser.add_argument('--bindir', default=None, help='Binary directory')
+parser.add_argument('--libdir', default=None, help='Library directory')
+parser.add_argument('--includedir', default=None, help='Include directory')
+
+parser.add_argument('--build', default=None, help='Not supported...')
+parser.add_argument('--host', default=None, help='Not supported...')
+
+parser.add_argument('--disable-shared', default=False, action='store_true', help='Do not build shared libraries')
+parser.add_argument('--enable-static', default=False, action='store_true', help='Build static libraries')
+
+parser.add_argument('--disable-libtool-lock', default=None, help='Not supported...')
+parser.add_argument('--enable-pthread', default=None, help='Not supported...')
+parser.add_argument('--enable-reentrant', default=None, help='Not supported...')
+parser.add_argument('--enable-thread-safe', default=None, help='Not supported...')
+parser.add_argument('--enable-assert', default=None, help='Not supported...')
+parser.add_argument('--enable-coverage', default=None, help='Not supported...')
+parser.add_argument('--enable-debug', default=None, help='Not supported...')
+parser.add_argument('--enable-dependency-tracking', default=None, help='Not supported...')
+parser.add_argument('--enable-pretty-tests', default=None, help='Not supported...')
+
+parser.add_argument('--enable-gmp-internals', default=None, help='Not supported...')
+
+parser.add_argument('--enable-assembly', default=None, choices=['yes', 'no', 'auto'], help='Enable assembly routines (if available)')
+parser.add_argument('--enable-avx2', default=None, choices=['yes', 'no', 'auto'], help='Use AVX2 instructions')
+parser.add_argument('--enable-avx512', default=None, choices=['yes', 'no', 'auto'], help='Use AVX512 instructions')
+
+parser.add_argument('--with-gmp', default=None, help='GMP install directory')
+parser.add_argument('--with-mpfr', default=None, help='MPFR install directory')
+
+parser.add_argument('--with-blas', default=None, help='Not supported...')
+parser.add_argument('--with-gc', default=None, help='Not supported...')
+parser.add_argument('--with-ntl', default=None, help='Not supported...')
+
+
+def run_command(cmd):
+    print('-' * 80)
+    print('$', ' '.join(cmd))
+    print('-' * 80)
+    check_call(cmd)
+
+
+def enabled_disabled(value):
+    if value == 'yes':
+        return 'enabled'
+    elif value == 'no':
+        return 'disabled'
+    elif value == 'auto':
+        return 'auto'
+    else:
+        raise ValueError('Invalid value: ' + value)
+
+
+def get_meson_command_from_configure_args(args):
+    """
+    Translate e.g. 
+        ./configure --prefix=/opt/foo --enable-assembly=no
+    to
+        meson setup build --prefix=/opt/foo -Dassembly=disabled
+    Raise ValueError if modifying an option is not supported.
+    """
+    args = parser.parse_args(args)
+
+    setup_args = []
+
+    if args.bindir is not None:
+        setup_args.append('--bindir=' + args.bindir)
+    if args.libdir is not None:
+        setup_args.append('--libdir=' + args.libdir)
+    if args.includedir is not None:
+        setup_args.append('--includedir=' + args.includedir)
+    if args.prefix is not None:
+        setup_args.append('--prefix=' + args.prefix)
+
+    if args.enable_static and args.disable_shared:
+        setup_args.append('--default-library=static')
+    elif args.enable_static and not args.disable_shared:
+        setup_args.append('--default-library=both')
+    elif not args.enable_static and not args.disable_shared:
+        pass
+    elif not args.enable_static and args.disable_shared:
+        raise ValueError('Cannot use --enable-static and --disable-shared together')
+
+    if args.disable_libtool_lock is not None:
+        raise ValueError('--disable-libtool-lock is not supported')
+    if args.enable_pthread is not None:
+        raise ValueError('--enable-pthread is not supported')
+    if args.enable_reentrant is not None:
+        raise ValueError('--enable-reentrant is not supported')
+    if args.enable_thread_safe is not None:
+        raise ValueError('--enable-thread-safe is not supported')
+    if args.enable_assert is not None:
+        raise ValueError('--enable-assert is not supported')
+    if args.enable_coverage is not None:
+        raise ValueError('--enable-coverage is not supported')
+    if args.enable_debug is not None:
+        raise ValueError('--enable-debug is not supported')
+    if args.enable_dependency_tracking is not None:
+        raise ValueError('--enable-dependency-tracking is not supported')
+    if args.enable_pretty_tests is not None:
+        raise ValueError('--enable-pretty-tests is not supported')
+
+    if args.enable_gmp_internals is not None:
+        raise ValueError('--enable-gmp-internals is not supported')
+
+    if args.enable_assembly is not None:
+        setup_args.append('-Dassembly=' + enabled_disabled(args.enable_assembly))
+
+    if args.enable_avx2 is not None or args.enable_avx512 is not None:
+        if 'enableds' in (args.enable_avx2, args.enable_avx512):
+            fft_small = 'enabled'
+        elif 'disabled' in (args.enable_avx2, args.enable_avx512):
+            fft_small = 'disabled'
+        else:
+            fft_small = 'auto'
+        setup_args.append('-Dfft_small=' + fft_small)
+
+    if args.with_gmp is not None:
+        setup_args.append('--pkg-config-path=' + join(args.with_gmp, 'lib', 'pkgconfig'))
+    if args.with_mpfr is not None:
+        setup_args.append('--pkg-config-path=' + join(args.with_mpfr, 'lib', 'pkgconfig'))
+
+    if args.with_blas is not None:
+        raise ValueError('--with-blas is not supported')
+    if args.with_gc is not None:
+        raise ValueError('--with-gc is not supported')
+    if args.with_ntl is not None:
+        raise ValueError('--with-ntl is not supported')
+
+    cmd = ['meson', 'setup', args.build_dir] + setup_args
+    return cmd, args
+
+
+def main(*args):
+    cmd, args = get_meson_command_from_configure_args(args)
+    # The default behaviour of ./configure is to basically wipe out the build.
+    # Everything is then rebuilt from scratch. We will do the same here to
+    # match the semantics of configure which does not preserve any settings
+    # from one run of configure to the next.
+    shutil.rmtree(args.build_dir, ignore_errors=True)
+    run_command(cmd)
+
+
+if __name__ == '__main__':
+    sys.exit(main(*sys.argv[1:]))

From bccb23937902d675cd4915efa33ad7aed07b3823 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 01:11:21 +0100
Subject: [PATCH 11/36] build: fix paths in meson Makefile/configure

---
 _meson_build/Makefile  | 2 +-
 _meson_build/configure | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/_meson_build/Makefile b/_meson_build/Makefile
index e7f05671e9..db6fd8946a 100644
--- a/_meson_build/Makefile
+++ b/_meson_build/Makefile
@@ -1,4 +1,4 @@
-BUILDDIR = build2
+BUILDDIR = build.meson
 
 all: setup
 	meson compile -C $(BUILDDIR)
diff --git a/_meson_build/configure b/_meson_build/configure
index 9e4bb23582..f3c9346c62 100644
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -9,7 +9,7 @@ from argparse import ArgumentParser
 
 parser = ArgumentParser(description='Configure FLINT for building with meson')
 
-parser.add_argument('--build-dir', default='build', help='Build directory')
+parser.add_argument('--build-dir', default='build.meson', help='Build directory')
 
 parser.add_argument('--prefix', default=None, help='Installation prefix')
 parser.add_argument('--bindir', default=None, help='Binary directory')

From bc1ab5bb96ba14a6e3ae4dc0d5fd3074ca298ef3 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 01:13:51 +0100
Subject: [PATCH 12/36] fix typo

---
 _meson_build/configure | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/_meson_build/configure b/_meson_build/configure
index f3c9346c62..77bcc6d885 100644
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -120,7 +120,7 @@ def get_meson_command_from_configure_args(args):
         setup_args.append('-Dassembly=' + enabled_disabled(args.enable_assembly))
 
     if args.enable_avx2 is not None or args.enable_avx512 is not None:
-        if 'enableds' in (args.enable_avx2, args.enable_avx512):
+        if 'enabled' in (args.enable_avx2, args.enable_avx512):
             fft_small = 'enabled'
         elif 'disabled' in (args.enable_avx2, args.enable_avx512):
             fft_small = 'disabled'

From ee38152c366adc997a514a637bd56194446918ce Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 01:30:31 +0100
Subject: [PATCH 13/36] build: fix options in dummy configure script

---
 _meson_build/configure | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/_meson_build/configure b/_meson_build/configure
index 77bcc6d885..9e5c6010d2 100644
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -120,9 +120,9 @@ def get_meson_command_from_configure_args(args):
         setup_args.append('-Dassembly=' + enabled_disabled(args.enable_assembly))
 
     if args.enable_avx2 is not None or args.enable_avx512 is not None:
-        if 'enabled' in (args.enable_avx2, args.enable_avx512):
+        if 'yes' in (args.enable_avx2, args.enable_avx512):
             fft_small = 'enabled'
-        elif 'disabled' in (args.enable_avx2, args.enable_avx512):
+        elif 'no' in (args.enable_avx2, args.enable_avx512):
             fft_small = 'disabled'
         else:
             fft_small = 'auto'

From 0ae65c75f1a55d129b6b110ddf4035f206f44cf0 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 15:35:26 +0100
Subject: [PATCH 14/36] build: make a generated headers dir in build

---
 _meson_build/generate_meson_build.py | 35 ++++++++++++++--------------
 _meson_build/include/meson.build     |  3 +++
 _meson_build/meson.build             | 18 ++++++++++----
 detection/meson.build                | 17 ++++++++++++--
 4 files changed, 49 insertions(+), 24 deletions(-)
 create mode 100644 _meson_build/include/meson.build

diff --git a/_meson_build/generate_meson_build.py b/_meson_build/generate_meson_build.py
index d14c75f7b8..59b83873ae 100644
--- a/_meson_build/generate_meson_build.py
+++ b/_meson_build/generate_meson_build.py
@@ -1,5 +1,5 @@
 import sys
-from os import listdir
+from os import listdir, makedirs
 from os.path import join, dirname, abspath, isdir
 from shutil import copyfile
 from argparse import ArgumentParser
@@ -11,6 +11,8 @@
     'Makefile',
     'meson.build',
     'meson.options',
+    'include/meson.build',
+    'include/flint/meson.build',
 ]
 
 # Directories in src that are not modules or that need special handling
@@ -19,6 +21,7 @@
     'profile',
     'interfaces',
     'python',
+    'include',
 ]
 
 conditional_modules = [
@@ -37,11 +40,7 @@
     'acf_types',
     'arb_types',
     'arf_types',
-    'config',
     'crt_helpers',
-    'flint',
-    'flint-config',
-    'flint-mparam',
     'fmpq_types',
     'fmpz_mod_types',
     'fmpz_types',
@@ -49,7 +48,6 @@
     'fq_types',
     'fq_zech_types',
     'gettimeofday',
-    'gmpcompat',
     'limb_types',
     'longlong',
     'longlong_asm_clang',
@@ -69,6 +67,14 @@
     'test_helpers',
 ]
 
+headers_skip = [
+    'flint',
+    'config',
+    'flint-config',
+    'flint-mparam',
+    'gmpcompat',
+]
+
 mod_no_tests = [
     'ca_vec',
     'calcium',
@@ -95,14 +101,6 @@
 #   python _meson_build/generate_meson_build.py
 #
 
-configure_file(
-  input: 'flint.h.in',
-  output: 'flint.h',
-  configuration: cfg_data,
-)
-
-src_dir_inc = include_directories('.')
-
 modules = [
 %s
 ]
@@ -171,7 +169,7 @@
   'main.c',
   dependencies: flint_deps,
   link_with: libflint,
-  include_directories: src_dir_inc,
+  include_directories: [headers_built_nodir_inc, '../..'],
   install: false,
 )
 
@@ -194,6 +192,8 @@
 asm_files = [
 %s
 ]
+
+src_dir_inc = include_directories('.')
 '''
 
 asm_submodule_x86_broadwell = '''\
@@ -249,8 +249,8 @@ def get_flint_modules(flint_root):
 
     # Check for mismatches between subdirs and headers apart from the
     # known exceptions (exclude_mod_dirs, mod_no_header, head_no_dir)
-    extra_dirs = set(subdirs) - set(headers) != set(mod_no_header)
-    extra_headers = set(headers) - set(subdirs) != set(head_no_dir)
+    extra_dirs = set(subdirs) - set(headers) - set(mod_no_header)
+    extra_headers = set(headers) - set(subdirs) - set(head_no_dir) - set(headers_skip)
     if extra_dirs or extra_headers:
         print('Mismatch between subdirs and headers in src')
         print('Extra headers:\n', '\n'.join(sorted(extra_headers)))
@@ -334,6 +334,7 @@ def write_file(dst_path, text, args):
         if not same_content(text, dst_path):
             print('File {} has changed'.format(dst_path))
             sys.exit(1)
+    makedirs(dirname(dst_path), exist_ok=True)
     with open(dst_path, 'w') as fout:
         fout.write(text)
 
diff --git a/_meson_build/include/meson.build b/_meson_build/include/meson.build
new file mode 100644
index 0000000000..a670a21e97
--- /dev/null
+++ b/_meson_build/include/meson.build
@@ -0,0 +1,3 @@
+subdir('flint')
+headers_built_inc = include_directories('.')
+headers_built_nodir_inc = include_directories('flint')
diff --git a/_meson_build/meson.build b/_meson_build/meson.build
index 5b292dd904..545f482697 100644
--- a/_meson_build/meson.build
+++ b/_meson_build/meson.build
@@ -7,11 +7,16 @@ project('FLINT', 'c',
   ],
 )
 
+FLINT_MAJOR = meson.project_version().split('.')[0]
+FLINT_MINOR = meson.project_version().split('.')[1]
+FLINT_PATCH = meson.project_version().split('.')[2]
+FLINT_VERSION_FULL = meson.project_version()
+
 cfg_data = configuration_data()
-cfg_data.set('FLINT_MAJOR', meson.project_version().split('.')[0])
-cfg_data.set('FLINT_MINOR', meson.project_version().split('.')[1])
-cfg_data.set('FLINT_PATCH', meson.project_version().split('.')[2])
-cfg_data.set('FLINT_VERSION_FULL', meson.project_version())
+cfg_data.set('FLINT_MAJOR', FLINT_MAJOR)
+cfg_data.set('FLINT_MINOR', FLINT_MINOR)
+cfg_data.set('FLINT_PATCH', FLINT_PATCH)
+cfg_data.set('FLINT_VERSION_FULL', FLINT_VERSION_FULL)
 
 cc = meson.get_compiler('c')
 fs = import('fs')
@@ -37,11 +42,14 @@ if have_assembly
   c_files_all += s_files
 endif
 
+# Build include directory after list of all source files is complete
+subdir('include')
+
 install_headers(headers_all, subdir: 'flint')
 
 libflint = library('flint', c_files_all,
   dependencies: flint_deps,
-  include_directories: include_directories('src'),
+  include_directories: [headers_built_nodir_inc, 'src'],
   install: true,
   c_args: [
     '-DBUILDING_FLINT',
diff --git a/detection/meson.build b/detection/meson.build
index a08f2d03f2..770313b41b 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -45,13 +45,14 @@ assembly_opt = assembly_opt.require(host_machine.system() != 'windows',
 if host_machine.cpu_family() == 'aarch64'
   assembly_cpu_supported = true
   assembly_dir = 'mpn_extras/arm64'
-  # FLINT_HAVE_ASSEMBLY_armv8
+  FLINT_HAVE_ASSEMBLY = 'armv8'
 elif host_machine.cpu_family() == 'x86_64'
   assembly_cpu_supported = true
   assembly_dir = 'mpn_extras/x86_64/broadwell'
-  # FLINT_HAVE_ASSEMBLY_x86_64_adx
+  FLINT_HAVE_ASSEMBLY = 'x86_64_adx'
 else
   assembly_cpu_supported = false
+  FLINT_HAVE_ASSEMBLY = ''
 endif
 
 assembly_opt = assembly_opt.require(assembly_cpu_supported,
@@ -61,3 +62,15 @@ assembly_opt = assembly_opt.enable_auto_if(true)
 have_assembly = assembly_opt.enabled()
 
 message('ASSEMBLY: ', have_assembly ? 'enabled' : 'disabled')
+
+# -----------------------------------------------------------------------------
+#  internal configuration for config.h
+# -----------------------------------------------------------------------------
+
+cfg_data_internal = cfg_data
+
+cfg_data_internal.set_quoted('LSYM_PREFIX', 'L')
+
+if FLINT_HAVE_ASSEMBLY != ''
+    cfg_data_internal.set('FLINT_HAVE_ASSEMBLY_' + FLINT_HAVE_ASSEMBLY, 1)
+endif

From 27137bf6606402336bea9ca113d635beea30453e Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 19:56:50 +0100
Subject: [PATCH 15/36] build: add variables to config.h and flint-config.h

---
 _meson_build/meson.build |   6 --
 detection/meson.build    | 144 ++++++++++++++++++++++++++++++++++++---
 2 files changed, 136 insertions(+), 14 deletions(-)

diff --git a/_meson_build/meson.build b/_meson_build/meson.build
index 545f482697..c7b7b15dbe 100644
--- a/_meson_build/meson.build
+++ b/_meson_build/meson.build
@@ -12,12 +12,6 @@ FLINT_MINOR = meson.project_version().split('.')[1]
 FLINT_PATCH = meson.project_version().split('.')[2]
 FLINT_VERSION_FULL = meson.project_version()
 
-cfg_data = configuration_data()
-cfg_data.set('FLINT_MAJOR', FLINT_MAJOR)
-cfg_data.set('FLINT_MINOR', FLINT_MINOR)
-cfg_data.set('FLINT_PATCH', FLINT_PATCH)
-cfg_data.set('FLINT_VERSION_FULL', FLINT_VERSION_FULL)
-
 cc = meson.get_compiler('c')
 fs = import('fs')
 
diff --git a/detection/meson.build b/detection/meson.build
index 770313b41b..7988cc23aa 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -1,3 +1,11 @@
+# -----------------------------------------------------------------------------
+#   FLINT configuration
+# -----------------------------------------------------------------------------
+
+# Data set on cfg_data is used to generate flint_config.h
+# Data set on cfg_data_internal (below) is used to generate config.h
+cfg_data = configuration_data()
+
 # -----------------------------------------------------------------------------
 #    fft_small
 # -----------------------------------------------------------------------------
@@ -21,11 +29,6 @@ have_fft_small = fft_small_opt.enabled()
 
 message('FFT_SMALL: ', have_fft_small ? 'enabled' : 'disabled')
 
-if have_fft_small
-    cfg_data.set('FLINT_HAVE_FFT_SMALL', 1,
-        description: 'Define to use the fft_small module')
-endif
-
 # -----------------------------------------------------------------------------
 #   assembly
 # -----------------------------------------------------------------------------
@@ -63,14 +66,139 @@ have_assembly = assembly_opt.enabled()
 
 message('ASSEMBLY: ', have_assembly ? 'enabled' : 'disabled')
 
+# -----------------------------------------------------------------------------
+#  external configuration for flint_config.h
+# -----------------------------------------------------------------------------
+
+# cfg_data.set('FLINT_BIG_ENDIAN', 1,
+#   description: 'Define if system is big endian.')
+
+if FLINT_HAVE_ASSEMBLY == 'armv8'
+  cfg_data.set('FLINT_HAVE_ASSEMBLY_armv8', 1,
+    description: 'Define if Arm v8 assembly is available')
+elif FLINT_HAVE_ASSEMBLY == 'x86_64_adx'
+  cfg_data.set('FLINT_HAVE_ASSEMBLY_x86_64_adx', 1,
+    description: 'Define if x86_64 ADX assembly is available')
+endif
+
+if have_fft_small
+    cfg_data.set('FLINT_HAVE_FFT_SMALL', 1,
+        description: 'Define to use the fft_small module')
+endif
+
+cfg_data.set('FLINT_HAVE_NATIVE_mpn_add_n_sub_n', 1,
+  description: 'Define if GMP has mpn_add_n_sub_n')
+cfg_data.set('FLINT_HAVE_NATIVE_mpn_add_nc', 1,
+  description: 'Define if GMP has mpn_add_nc')
+cfg_data.set('FLINT_HAVE_NATIVE_mpn_addlsh1_n', 1,
+  description: 'Define if GMP has mpn_addlsh1_n')
+# cfg_data.set('FLINT_HAVE_NATIVE_mpn_addlsh1_n_ip1', 0,
+#   description: 'Define if GMP has mpn_addlsh1_n_ip1')
+# cfg_data.set('FLINT_HAVE_NATIVE_mpn_addmul_2', 0,
+#   description: 'Define if GMP has mpn_addmul_2')
+# cfg_data.set('FLINT_HAVE_NATIVE_mpn_modexact_1_odd', 0,
+#   description: 'Define if system has mpn_modexact_1_odd')
+cfg_data.set('FLINT_HAVE_NATIVE_mpn_rsh1add_n', 1,
+  description: 'Define if GMP has mpn_rsh1add_n')
+cfg_data.set('FLINT_HAVE_NATIVE_mpn_rsh1sub_n', 1,
+  description: 'Define if GMP has mpn_rsh1sub_n')
+cfg_data.set('FLINT_HAVE_NATIVE_mpn_sub_nc', 1,
+  description: 'Define if GMP has mpn_sub_nc')
+# cfg_data.set('FLINT_KNOW_STRONG_ORDER', 1,
+#   description: 'Define if system is strongly ordered')
+# cfg_data.set('FLINT_REENTRANT', 0,
+#   description: 'Define to enable reentrant.')
+cfg_data.set('FLINT_UNROLL_LOOPS', 1,
+  description: 'Define to locally unroll some loops')
+# cfg_data.set('FLINT_USES_BLAS', 0,
+#   description: 'Define to enable BLAS.')
+# cfg_data.set('FLINT_USES_CPUSET', 0,
+#   description: 'Define if system has cpu_set_t')
+# cfg_data.set('FLINT_USES_GC', 0,
+#   description: 'Define to enable the Boehm-Demers-Weise garbage collector.')
+cfg_data.set('FLINT_USES_PTHREAD', 1,
+  description: 'Define to enable the use of pthread.')
+
+cfg_data.set('FLINT_USES_TLS', 1,
+  description: 'Define to enable thread-local storage.')
+# cfg_data.set('FLINT_WANT_WANT_ASSERT', 1,
+#   description: 'Define to enable use of asserts.')
+cfg_data.set('FLINT_WANT_GMP_INTERNALS', 1,
+  description: 'Define to enable use of GMP internals.')
+cfg_data.set('FLINT_WANT_PRETTY_TESTS', 1,
+  description: 'Define to enable pretty printing for tests.')
+
 # -----------------------------------------------------------------------------
 #  internal configuration for config.h
 # -----------------------------------------------------------------------------
 
 cfg_data_internal = cfg_data
 
-cfg_data_internal.set_quoted('LSYM_PREFIX', 'L')
+#cfg_data_internal.set('AC_APPLE_UNIVERSAL_BUILD', 1)
 
-if FLINT_HAVE_ASSEMBLY != ''
-    cfg_data_internal.set('FLINT_HAVE_ASSEMBLY_' + FLINT_HAVE_ASSEMBLY, 1)
+# XXX: Change this when coverage options are added
+#cfg_data_internal.set('FLINT_COVERAGE', 1)
+
+if cc.has_header_symbol('stdlib.h', 'aligned_alloc')
+  cfg_data_internal.set('HAVE_ALIGNED_ALLOC', 1,
+    description: 'Define to 1 if you have the \'aligned_alloc\' function.')
 endif
+
+ac_headers_check = [
+  'alloca.h',
+  'arm_neon.h',
+  'dlfcn.h',
+  'errno.h',
+  'fenv.h',
+  'float.h',
+  'immintrin.h', # XXX: has_header is not equivalent to autotools check...
+  'inttypes.h',
+  'malloc.h',
+  'math.h',
+  'pthread_np.h',
+  'stdarg.h',
+  'stdint.h',
+  'stdio.h',
+  'stdlib.h',
+  'string.h',
+  'strings.h',
+  'sys/param.h',
+  'sys/stat.h',
+  'sys/types.h',
+  'unistd.h',
+  'windows.h',
+]
+
+foreach h : ac_headers_check
+  if cc.has_header(h)
+    cfg_data_internal.set('HAVE_' + h.underscorify().to_upper(), 1,
+      description: f'Define to 1 if you have the <@h@> header file.')
+  endif
+endforeach
+
+# XXX: Do we need to check for _alligned_malloc?
+
+cfg_data_internal.set_quoted('LSYM_PREFIX', 'L',
+  description: 'Assembler local label prefix')
+cfg_data_internal.set_quoted('LT_OBJDIR', '.libs/',
+  description: 'Define to the sub-directory where libtool stores uninstalled libraries.')
+cfg_data_internal.set_quoted('PACKAGE_BUGREPORT',
+  'https://github.com/flintlib/flint/issues/',
+  description: 'Define to the address where bug reports for this package should be sent.')
+cfg_data_internal.set_quoted('PACKAGE_NAME', 'FLINT',
+  description: 'Define to the full name of this package.')
+cfg_data_internal.set_quoted('PACKAGE_STRING', 'FLINT ' + FLINT_VERSION_FULL,
+  description: 'Define to the full name and version of this package.')
+cfg_data_internal.set_quoted('PACKAGE_TARNAME', 'flint',
+  description: 'Define to the one symbol short name of this package.')
+cfg_data_internal.set_quoted('PACKAGE_URL', 'https://flintlib.org/',
+  description: 'Define to the home page for this package.')
+cfg_data_internal.set_quoted('PACKAGE_VERSION', FLINT_VERSION_FULL,
+  description: 'Define to the version of this package.')
+
+cfg_data_internal.set('STDC_HEADERS', 1,
+  description: '''Define to 1 if all of the C89 standard headers exist (not just the ones
+   required in a freestanding environment). This macro is provided for
+   backward compatibility; new code need not use it.''')
+
+# XXX: set WORDS_BIGENDIAN or undef inline here?

From daa719e030a8c53440b6296c4a445da7bcb76a59 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 21:40:32 +0100
Subject: [PATCH 16/36] build: generate all built headers in meson build

---
 _meson_build/include/flint/meson.build | 54 ++++++++++++++++++++++++++
 detection/meson.build                  | 34 ++++++++++++++++
 2 files changed, 88 insertions(+)
 create mode 100644 _meson_build/include/flint/meson.build

diff --git a/_meson_build/include/flint/meson.build b/_meson_build/include/flint/meson.build
new file mode 100644
index 0000000000..2515f636af
--- /dev/null
+++ b/_meson_build/include/flint/meson.build
@@ -0,0 +1,54 @@
+flint_h = configure_file(
+  input: '../../src/flint.h.in',
+  output: 'flint.h',
+  configuration: {
+    'FLINT_MAJOR': FLINT_MAJOR,
+    'FLINT_MINOR': FLINT_MINOR,
+    'FLINT_PATCH': FLINT_PATCH,
+    'FLINT_VERSION_FULL': FLINT_VERSION_FULL,
+  }
+)
+
+flint_config_h = configure_file(
+  output: 'flint-config.h',
+  configuration: cfg_data,
+)
+
+config_h = configure_file(
+  output: 'config.h',
+  configuration: cfg_data_internal,
+)
+
+if gmp_long_long_limb
+  gmpcompat_h_in = 'gmpcompat-longlong.h.in'
+else
+  gmpcompat_h_in = 'gmpcompat.h.in'
+endif
+
+gmpcompat_h = configure_file(
+  input: '../../src' / gmpcompat_h_in,
+  output: 'gmpcompat.h',
+  copy: true,
+)
+
+flint_mparam_h_in = '../../src/mpn_extras' / flint_mparam / 'flint-mparam.h'
+
+flint_mparam_h = configure_file(
+  input: flint_mparam_h_in,
+  output: 'flint-mparam.h',
+  copy: true,
+)
+
+# Copy all the other headers to the build directory so you can do
+#   gcc -Ibuild-dir/include ...
+foreach h: headers_all
+  fs.copyfile(h)
+endforeach
+
+headers_all += [
+  flint_h,
+  flint_config_h,
+  config_h,
+  gmpcompat_h,
+  flint_mparam_h,
+]
diff --git a/detection/meson.build b/detection/meson.build
index 7988cc23aa..b36170be23 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -6,6 +6,17 @@
 # Data set on cfg_data_internal (below) is used to generate config.h
 cfg_data = configuration_data()
 
+# -----------------------------------------------------------------------------
+#   GMP
+# -----------------------------------------------------------------------------
+
+gmp_long_long_limb = cc.compiles('''
+#include <gmp.h>
+#if !defined(_LONG_LONG_LIMB)
+# error mp_limb_t != unsigned long long int
+#endif
+''')
+
 # -----------------------------------------------------------------------------
 #    fft_small
 # -----------------------------------------------------------------------------
@@ -29,6 +40,29 @@ have_fft_small = fft_small_opt.enabled()
 
 message('FFT_SMALL: ', have_fft_small ? 'enabled' : 'disabled')
 
+# -----------------------------------------------------------------------------
+#   mparam
+# -----------------------------------------------------------------------------
+
+flint_mparam = 'generic'
+
+if host_machine.system() != 'windows'
+  if host_machine.cpu_family() == 'aarch64'
+    if host_machine.system() == 'darwin'
+      flint_mparam = 'arm64/applem1'
+    else
+      flint_mparam = 'arm64'
+    endif
+  elif host_machine.cpu_family() == 'x86_64'
+    # XXX: Need better CPU detection
+    if have_assembly
+      flint_mparam = 'x86_64/broadwell'
+    else
+      flint_mparam = 'generic'
+    endif
+  endif
+endif
+
 # -----------------------------------------------------------------------------
 #   assembly
 # -----------------------------------------------------------------------------

From 27e2309126368d16173848aa977c8499361a7df4 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 22:35:04 +0100
Subject: [PATCH 17/36] build: generate fmpz.c and config.m4 in meson build

---
 .gitignore                           |  1 +
 _meson_build/generate_meson_build.py | 12 +++++++----
 _meson_build/meson.build             |  7 +++++++
 _meson_build/meson.options           |  6 ++++++
 detection/meson.build                | 31 ++++++++++++++++++++++++++--
 5 files changed, 51 insertions(+), 6 deletions(-)

diff --git a/.gitignore b/.gitignore
index 846ed9711e..ce3183f3d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,6 +63,7 @@ libtool
 flint.pc
 autom4te.cache/
 config.m4
+config.m4.in
 src/flint-mparam.h
 .gdb_history
 vgcore.*
diff --git a/_meson_build/generate_meson_build.py b/_meson_build/generate_meson_build.py
index 59b83873ae..edd78c72fa 100644
--- a/_meson_build/generate_meson_build.py
+++ b/_meson_build/generate_meson_build.py
@@ -13,6 +13,7 @@
     'meson.options',
     'include/meson.build',
     'include/flint/meson.build',
+    'config.m4.in',
 ]
 
 # Directories in src that are not modules or that need special handling
@@ -121,6 +122,9 @@
 c_files_all = []
 mod_tests = []
 
+# Select the right version of fmpz.c (see configuration)
+c_files_all += files('fmpz/link' / fmpz_c_in)
+
 foreach mod : modules
   subdir(mod)
   if mod not in modules_no_tests
@@ -179,7 +183,6 @@
 asm_submodule_arm64 = '''\
 
 asm_deps = [
-  '../../../config.m4',
   '../asm-defs.m4',
 ]
 
@@ -199,7 +202,6 @@
 asm_submodule_x86_broadwell = '''\
 
 asm_deps = [
-    '../../../config.m4',
     '../asm-defs.m4',
     'x86-defs.m4',
 ]
@@ -220,9 +222,9 @@
 foreach asm_file: asm_files
   s_filename = fs.stem(asm_file) + '.s'
   s_file = custom_target(s_filename,
-    input: [asm_file] + asm_deps,
+    input: [asm_file, config_m4] + asm_deps,
     output: s_filename,
-    command: [m4_prog, '-I..', '@INPUT0@'],
+    command: [m4_prog, '@INPUT0@'],
     capture: true,
   )
   s_files += [s_file]
@@ -302,6 +304,8 @@ def main(args):
     for mod in modules + mod_no_header:
         mod_dir = join(args.output_dir, 'src', mod)
         c_files = [f for f in listdir(mod_dir) if f.endswith('.c')]
+        if mod == 'fmpz':
+            c_files = [f for f in c_files if f != 'fmpz.c']
         src_mod_meson_build_text = src_mod_meson_build % format_lines(c_files)
         dst_path = join(mod_dir, 'meson.build')
         write_file(dst_path, src_mod_meson_build_text, args)
diff --git a/_meson_build/meson.build b/_meson_build/meson.build
index c7b7b15dbe..96a32fffc2 100644
--- a/_meson_build/meson.build
+++ b/_meson_build/meson.build
@@ -31,6 +31,13 @@ subdir('detection')
 subdir('src')
 
 if have_assembly
+  # Generate config.m4 with assembly language configuration
+  config_m4 = configure_file(
+    input: 'config.m4.in',
+    output: 'config.m4',
+    configuration: {'LSYM_PREFIX': LSYM_PREFIX},
+  )
+
   s_files = []
   subdir('src' / assembly_dir)
   c_files_all += s_files
diff --git a/_meson_build/meson.options b/_meson_build/meson.options
index 64a30b276c..b98e07e85a 100644
--- a/_meson_build/meson.options
+++ b/_meson_build/meson.options
@@ -4,3 +4,9 @@ option('fft_small', type : 'feature', value : 'auto',
         description: 'Build the fft_small module')
 option('assembly', type : 'feature', value : 'auto',
         description: 'Use assembly code')
+option('gc', type : 'feature', value : 'disabled',
+        description: 'Use the Boehm garbage collector')
+option('reentrant', type : 'feature', value : 'disabled',
+        description: 'Build the reentrant module')
+option('threadsafe', type : 'feature', value : 'enabled',
+        description: 'Build the threadsafe module')
diff --git a/detection/meson.build b/detection/meson.build
index b36170be23..6a0bc68a32 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -2,10 +2,32 @@
 #   FLINT configuration
 # -----------------------------------------------------------------------------
 
-# Data set on cfg_data is used to generate flint_config.h
-# Data set on cfg_data_internal (below) is used to generate config.h
+# Data set on cfg_data is used to generate flint-config.h
+# Data set on cfg_data_internal (below) is also used to generate config.h
 cfg_data = configuration_data()
 
+# -----------------------------------------------------------------------------
+#   fmpz memory management
+# -----------------------------------------------------------------------------
+
+enable_gc = get_option('gc').enabled()
+enable_reentrant = get_option('reentrant').enabled()
+enable_thread_safe = get_option('threadsafe').enabled()
+
+if enable_gc
+  if enable_thread_safe
+    error('Garbage collection is not thread safe')
+  else
+    fmpz_c_in = 'fmpz_gc.c'
+  endif
+else
+  if enable_reentrant
+    fmpz_c_in = 'fmpz_reentrant.c'
+  else
+    fmpz_c_in = 'fmpz_single.c'
+  endif
+endif
+
 # -----------------------------------------------------------------------------
 #   GMP
 # -----------------------------------------------------------------------------
@@ -100,6 +122,11 @@ have_assembly = assembly_opt.enabled()
 
 message('ASSEMBLY: ', have_assembly ? 'enabled' : 'disabled')
 
+# XXX: Need better detection of ASM language support
+if have_assembly
+  LSYM_PREFIX = 'L'
+endif
+
 # -----------------------------------------------------------------------------
 #  external configuration for flint_config.h
 # -----------------------------------------------------------------------------

From b55d477d164d3e86011998893873921304a41610 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sun, 14 Apr 2024 22:38:22 +0100
Subject: [PATCH 18/36] build: add config.m4.in

---
 _meson_build/config.m4.in | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 _meson_build/config.m4.in

diff --git a/_meson_build/config.m4.in b/_meson_build/config.m4.in
new file mode 100644
index 0000000000..2a36c4c373
--- /dev/null
+++ b/_meson_build/config.m4.in
@@ -0,0 +1,21 @@
+dnl config.m4.  Generated automatically by configure.
+changequote(<,>)
+ifdef(<__CONFIG_M4_INCLUDED__>,,<
+define(<TEXT>, <.text>)
+define(<DATA>, <.data>)
+define(<LABEL_SUFFIX>, <:>)
+define(<GLOBL>, <.globl>)
+define(<GLOBL_ATTR>, <>)
+define(<GSYM_PREFIX>, <_>)
+define(<RODATA>, <	.section	__TEXT,__const>)
+define(<TYPE>, <>)
+define(<SIZE>, <>)
+define(<LSYM_PREFIX>, @LSYM_PREFIX@)
+define(<ALIGN_LOGARITHMIC>,<yes>)
+>)
+changequote(`,')
+ifdef(`__CONFIG_M4_INCLUDED__',,`
+include(`../src/mpn_extras/asm-defs.m4')
+include(`../src/mpn_extras/arm64/darwin.m4')
+')
+define(`__CONFIG_M4_INCLUDED__')

From b52714facc061ef396751821f875db72f7d2e707 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Mon, 15 Apr 2024 12:45:33 +0100
Subject: [PATCH 19/36] build: add gmp_internals option to meson build

---
 _meson_build/meson.options |   2 +
 detection/meson.build      | 138 +++++++++++++++++++++++++++++++------
 2 files changed, 120 insertions(+), 20 deletions(-)

diff --git a/_meson_build/meson.options b/_meson_build/meson.options
index b98e07e85a..cded6689ba 100644
--- a/_meson_build/meson.options
+++ b/_meson_build/meson.options
@@ -10,3 +10,5 @@ option('reentrant', type : 'feature', value : 'disabled',
         description: 'Build the reentrant module')
 option('threadsafe', type : 'feature', value : 'enabled',
         description: 'Build the threadsafe module')
+option('gmp_internals', type : 'feature', value : 'auto',
+        description: 'Use GMP internals')
diff --git a/detection/meson.build b/detection/meson.build
index 6a0bc68a32..03d889369c 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -6,6 +6,12 @@
 # Data set on cfg_data_internal (below) is also used to generate config.h
 cfg_data = configuration_data()
 
+# -----------------------------------------------------------------------------
+#   Project options
+# -----------------------------------------------------------------------------
+
+gmp_internals_opt = get_option('gmp_internals')
+
 # -----------------------------------------------------------------------------
 #   fmpz memory management
 # -----------------------------------------------------------------------------
@@ -28,6 +34,14 @@ else
   endif
 endif
 
+# -----------------------------------------------------------------------------
+#   libm
+# -----------------------------------------------------------------------------
+
+if not cc.has_function('atan2', dependencies: m_dep)
+  error('libm is required')
+endif
+
 # -----------------------------------------------------------------------------
 #   GMP
 # -----------------------------------------------------------------------------
@@ -39,6 +53,104 @@ gmp_long_long_limb = cc.compiles('''
 #endif
 ''')
 
+# We need to check with cc.links rather than cc.has_function etc because we
+# are checking if we can link symbols not in the headers.
+
+gmp_test_code = '''
+#include <gmp.h>
+
+@0@
+
+int main() {
+  @1@
+  return 0;
+}
+'''
+
+gmp_base_tests = {
+  'mpz_init': ['', 'mpz_t x; __gmpz_init(x);'],
+  'mpn_mul_basecase': [
+    'void __gmpn_mul_basecase(mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);',
+    'mp_limb_t a[2], b[2], p[4]; __gmpn_mul_basecase(p, a, (mp_size_t) 1, b, (mp_size_t) 1);',
+  ],
+}
+
+foreach name, snippets : gmp_base_tests
+  _code = gmp_test_code.format(snippets[0], snippets[1])
+  if not cc.links(_code, dependencies: gmp_dep, name: name + ' links')
+    message('This code did not link with -lgmp: ', _code)
+    error('GMP does not have ' + name)
+  endif
+endforeach
+
+if gmp_internals_opt.allowed()
+
+  gmp_internals_required = {
+    'mpn_gcd_11': ['', 'mp_limb_t res, a=0, b=0; res = __gmpn_gcd_11(a, b);'],
+    'mpn_div_q': [
+      'void __gmpn_div_q(mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);',
+      'mp_limb_t q[2], n[2], d[2], t[2]; __gmpn_div_q(q, t, (mp_size_t) 1, n, (mp_size_t) 1, d);'
+    ],
+  }
+
+  foreach name, snippets : gmp_internals_required
+    _code = gmp_test_code.format(snippets[0], snippets[1])
+    if not cc.links(_code, dependencies: gmp_dep, name: name + ' links')
+      message('This code did not link with -lgmp: ', _code)
+      # Maybe disable gmp_internals rather than error?
+      error('GMP does not have ' + name)
+    endif
+  endforeach
+
+  gmp_internals_optional = {
+    'mpn_add_n_sub_n': [
+      'void __gmpn_add_n_sub_n(mp_ptr, mp_ptr, mp_ptr, mp_size_t);',
+      'mp_limb_t a[2], b[2], c[2], d[2]; __gmpn_add_n_sub_n(a, b, c, (mp_size_t) 1);',
+    ],
+    'mpn_add_nc': [
+      'mp_limb_t __gmpn_add_nc(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_add_nc(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+    'mpn_addlsh1_n': [
+      'mp_limb_t __gmpn_addlsh1_n(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_addlsh1_n(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+    'mpn_addlsh1_n_ip1': [
+      'mp_limb_t __gmpn_addlsh1_n_ip1(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_addlsh1_n_ip1(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+    'mpn_addmul_2': [
+      'void __gmpn_addmul_2(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_addmul_2(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+    'mpn_modexact_1_odd': [
+      'mp_limb_t __gmpn_modexact_1_odd(mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2]; __gmpn_modexact_1_odd(a, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+    'mpn_rsh1add_n': [
+      'mp_limb_t __gmpn_rsh1add_n(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_rsh1add_n(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+    'mpn_rsh1sub_n': [
+      'mp_limb_t __gmpn_rsh1sub_n(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_rsh1sub_n(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+    'mpn_sub_nc': [
+      'mp_limb_t __gmpn_sub_nc(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_sub_nc(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+    ],
+  }
+
+  foreach name, snippets : gmp_internals_optional
+    _code = gmp_test_code.format(snippets[0], snippets[1])
+    if cc.links(_code, dependencies: gmp_dep, name: name + ' links')
+      cfg_data.set('FLINT_HAVE_NATIVE_' + name, 1,
+        description: 'Define if GMP has ' + name)
+    endif
+  endforeach
+
+endif
+
 # -----------------------------------------------------------------------------
 #    fft_small
 # -----------------------------------------------------------------------------
@@ -147,24 +259,6 @@ if have_fft_small
         description: 'Define to use the fft_small module')
 endif
 
-cfg_data.set('FLINT_HAVE_NATIVE_mpn_add_n_sub_n', 1,
-  description: 'Define if GMP has mpn_add_n_sub_n')
-cfg_data.set('FLINT_HAVE_NATIVE_mpn_add_nc', 1,
-  description: 'Define if GMP has mpn_add_nc')
-cfg_data.set('FLINT_HAVE_NATIVE_mpn_addlsh1_n', 1,
-  description: 'Define if GMP has mpn_addlsh1_n')
-# cfg_data.set('FLINT_HAVE_NATIVE_mpn_addlsh1_n_ip1', 0,
-#   description: 'Define if GMP has mpn_addlsh1_n_ip1')
-# cfg_data.set('FLINT_HAVE_NATIVE_mpn_addmul_2', 0,
-#   description: 'Define if GMP has mpn_addmul_2')
-# cfg_data.set('FLINT_HAVE_NATIVE_mpn_modexact_1_odd', 0,
-#   description: 'Define if system has mpn_modexact_1_odd')
-cfg_data.set('FLINT_HAVE_NATIVE_mpn_rsh1add_n', 1,
-  description: 'Define if GMP has mpn_rsh1add_n')
-cfg_data.set('FLINT_HAVE_NATIVE_mpn_rsh1sub_n', 1,
-  description: 'Define if GMP has mpn_rsh1sub_n')
-cfg_data.set('FLINT_HAVE_NATIVE_mpn_sub_nc', 1,
-  description: 'Define if GMP has mpn_sub_nc')
 # cfg_data.set('FLINT_KNOW_STRONG_ORDER', 1,
 #   description: 'Define if system is strongly ordered')
 # cfg_data.set('FLINT_REENTRANT', 0,
@@ -184,8 +278,12 @@ cfg_data.set('FLINT_USES_TLS', 1,
   description: 'Define to enable thread-local storage.')
 # cfg_data.set('FLINT_WANT_WANT_ASSERT', 1,
 #   description: 'Define to enable use of asserts.')
-cfg_data.set('FLINT_WANT_GMP_INTERNALS', 1,
-  description: 'Define to enable use of GMP internals.')
+
+if gmp_internals_opt.allowed()
+  cfg_data.set('FLINT_WANT_GMP_INTERNALS', 1,
+    description: 'Define to enable use of GMP internals.')
+endif
+
 cfg_data.set('FLINT_WANT_PRETTY_TESTS', 1,
   description: 'Define to enable pretty printing for tests.')
 

From d88fba332800a0b36c342ea7bf75472915fa1c27 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Mon, 15 Apr 2024 12:47:19 +0100
Subject: [PATCH 20/36] move mparam check after assembly

---
 detection/meson.build | 46 +++++++++++++++++++++----------------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/detection/meson.build b/detection/meson.build
index 03d889369c..6ea30327db 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -174,29 +174,6 @@ have_fft_small = fft_small_opt.enabled()
 
 message('FFT_SMALL: ', have_fft_small ? 'enabled' : 'disabled')
 
-# -----------------------------------------------------------------------------
-#   mparam
-# -----------------------------------------------------------------------------
-
-flint_mparam = 'generic'
-
-if host_machine.system() != 'windows'
-  if host_machine.cpu_family() == 'aarch64'
-    if host_machine.system() == 'darwin'
-      flint_mparam = 'arm64/applem1'
-    else
-      flint_mparam = 'arm64'
-    endif
-  elif host_machine.cpu_family() == 'x86_64'
-    # XXX: Need better CPU detection
-    if have_assembly
-      flint_mparam = 'x86_64/broadwell'
-    else
-      flint_mparam = 'generic'
-    endif
-  endif
-endif
-
 # -----------------------------------------------------------------------------
 #   assembly
 # -----------------------------------------------------------------------------
@@ -239,6 +216,29 @@ if have_assembly
   LSYM_PREFIX = 'L'
 endif
 
+# -----------------------------------------------------------------------------
+#   mparam
+# -----------------------------------------------------------------------------
+
+flint_mparam = 'generic'
+
+if host_machine.system() != 'windows'
+  if host_machine.cpu_family() == 'aarch64'
+    if host_machine.system() == 'darwin'
+      flint_mparam = 'arm64/applem1'
+    else
+      flint_mparam = 'arm64'
+    endif
+  elif host_machine.cpu_family() == 'x86_64'
+    # XXX: Need better CPU detection
+    if have_assembly
+      flint_mparam = 'x86_64/broadwell'
+    else
+      flint_mparam = 'generic'
+    endif
+  endif
+endif
+
 # -----------------------------------------------------------------------------
 #  external configuration for flint_config.h
 # -----------------------------------------------------------------------------

From 8d06fab2359729cade0f5a489740c49b5f7253d5 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Mon, 15 Apr 2024 13:18:20 +0100
Subject: [PATCH 21/36] don't compile assembly if option disabled

---
 detection/meson.build | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/detection/meson.build b/detection/meson.build
index 6ea30327db..98596a13d3 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -116,8 +116,8 @@ if gmp_internals_opt.allowed()
       'mp_limb_t a[2], b[2]; __gmpn_addlsh1_n(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
     ],
     'mpn_addlsh1_n_ip1': [
-      'mp_limb_t __gmpn_addlsh1_n_ip1(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
-      'mp_limb_t a[2], b[2]; __gmpn_addlsh1_n_ip1(a, b, (mp_size_t) 1, (mp_limb_t) 0);',
+      'mp_limb_t __gmpn_addlsh1_n_ip1(mp_ptr, mp_srcptr, mp_size_t);',
+      'mp_limb_t a[2], b[2]; __gmpn_addlsh1_n_ip1(a, b, (mp_size_t) 1);',
     ],
     'mpn_addmul_2': [
       'void __gmpn_addmul_2(mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);',
@@ -246,10 +246,10 @@ endif
 # cfg_data.set('FLINT_BIG_ENDIAN', 1,
 #   description: 'Define if system is big endian.')
 
-if FLINT_HAVE_ASSEMBLY == 'armv8'
+if have_assembly and FLINT_HAVE_ASSEMBLY == 'armv8'
   cfg_data.set('FLINT_HAVE_ASSEMBLY_armv8', 1,
     description: 'Define if Arm v8 assembly is available')
-elif FLINT_HAVE_ASSEMBLY == 'x86_64_adx'
+elif have_assembly and FLINT_HAVE_ASSEMBLY == 'x86_64_adx'
   cfg_data.set('FLINT_HAVE_ASSEMBLY_x86_64_adx', 1,
     description: 'Define if x86_64 ADX assembly is available')
 endif

From faa848d552ce56e39d8b454fe1d62a6fa6aba889 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Mon, 15 Apr 2024 17:27:38 +0100
Subject: [PATCH 22/36] build: add pthread and tls options

---
 _meson_build/configure               | 12 ++++----
 _meson_build/generate_meson_build.py | 45 +++++++++++++++-------------
 _meson_build/meson.options           |  4 ++-
 detection/meson.build                | 21 ++++++++-----
 4 files changed, 48 insertions(+), 34 deletions(-)
 mode change 100644 => 100755 _meson_build/configure

diff --git a/_meson_build/configure b/_meson_build/configure
old mode 100644
new mode 100755
index 9e5c6010d2..4035c2f9d9
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -23,16 +23,16 @@ parser.add_argument('--disable-shared', default=False, action='store_true', help
 parser.add_argument('--enable-static', default=False, action='store_true', help='Build static libraries')
 
 parser.add_argument('--disable-libtool-lock', default=None, help='Not supported...')
-parser.add_argument('--enable-pthread', default=None, help='Not supported...')
+parser.add_argument('--enable-pthread', default=None, help='Enable pthread support')
 parser.add_argument('--enable-reentrant', default=None, help='Not supported...')
-parser.add_argument('--enable-thread-safe', default=None, help='Not supported...')
+parser.add_argument('--enable-thread-safe', default=None, help='Make the library thread-safe')
 parser.add_argument('--enable-assert', default=None, help='Not supported...')
 parser.add_argument('--enable-coverage', default=None, help='Not supported...')
 parser.add_argument('--enable-debug', default=None, help='Not supported...')
 parser.add_argument('--enable-dependency-tracking', default=None, help='Not supported...')
 parser.add_argument('--enable-pretty-tests', default=None, help='Not supported...')
 
-parser.add_argument('--enable-gmp-internals', default=None, help='Not supported...')
+parser.add_argument('--enable-gmp-internals', default=None, help='Use GMP internals')
 
 parser.add_argument('--enable-assembly', default=None, choices=['yes', 'no', 'auto'], help='Enable assembly routines (if available)')
 parser.add_argument('--enable-avx2', default=None, choices=['yes', 'no', 'auto'], help='Use AVX2 instructions')
@@ -97,11 +97,11 @@ def get_meson_command_from_configure_args(args):
     if args.disable_libtool_lock is not None:
         raise ValueError('--disable-libtool-lock is not supported')
     if args.enable_pthread is not None:
-        raise ValueError('--enable-pthread is not supported')
+        setup_args.append('-Dpthread=' + enabled_disabled(args.enable_pthread))
     if args.enable_reentrant is not None:
         raise ValueError('--enable-reentrant is not supported')
     if args.enable_thread_safe is not None:
-        raise ValueError('--enable-thread-safe is not supported')
+        setup_args.append('-Dthread_safe=' + enabled_disabled(args.enable_thread_safe))
     if args.enable_assert is not None:
         raise ValueError('--enable-assert is not supported')
     if args.enable_coverage is not None:
@@ -114,7 +114,7 @@ def get_meson_command_from_configure_args(args):
         raise ValueError('--enable-pretty-tests is not supported')
 
     if args.enable_gmp_internals is not None:
-        raise ValueError('--enable-gmp-internals is not supported')
+        setup_args.append('-Dgmp_internals=' + enabled_disabled(args.enable_gmp_internals))
 
     if args.enable_assembly is not None:
         setup_args.append('-Dassembly=' + enabled_disabled(args.enable_assembly))
diff --git a/_meson_build/generate_meson_build.py b/_meson_build/generate_meson_build.py
index edd78c72fa..2e1805eb5b 100644
--- a/_meson_build/generate_meson_build.py
+++ b/_meson_build/generate_meson_build.py
@@ -202,8 +202,8 @@
 asm_submodule_x86_broadwell = '''\
 
 asm_deps = [
-    '../asm-defs.m4',
-    'x86-defs.m4',
+    '../../asm-defs.m4',
+    '../x86_64-defs.m4',
 ]
 
 if host_machine.system() == 'darwin'
@@ -271,8 +271,8 @@ def get_flint_modules(flint_root):
 parser = ArgumentParser(description='Generate Meson build files')
 parser.add_argument('-q', '--quiet', action='store_true',
                     help='Do not print anything')
-parser.add_argument('--error-if-changed', action='store_true',
-                    help='Exit with error code 1 if the files have changed')
+parser.add_argument('-v', '--verbose', action='store_true',
+                    help='Show all steps')
 parser.add_argument('output_dir', default='.', help='Output directory')
 
 
@@ -282,7 +282,9 @@ def main(args):
     for fname in files_to_copy:
         src_path = join(this_dir, fname)
         dst_path = join(args.output_dir, fname)
-        copy_file(src_path, dst_path, args)
+        if not args.quiet:
+            print('Copying %s to %s' % (src_path, dst_path))
+        copy_file(src_path, dst_path)
 
     modules = get_flint_modules(args.output_dir)
 
@@ -298,8 +300,12 @@ def main(args):
         format_lines(head_no_dir),
     )
     dst_path = join(args.output_dir, 'src', 'meson.build')
-    write_file(dst_path, src_meson_build_text, args)
+    if not args.quiet:
+        print('Writing %s' % dst_path)
+    write_file(dst_path, src_meson_build_text)
 
+    if not args.quiet:
+        print('Making meson.build files in all modules')
     # src/mod/meson.build
     for mod in modules + mod_no_header:
         mod_dir = join(args.output_dir, 'src', mod)
@@ -308,14 +314,18 @@ def main(args):
             c_files = [f for f in c_files if f != 'fmpz.c']
         src_mod_meson_build_text = src_mod_meson_build % format_lines(c_files)
         dst_path = join(mod_dir, 'meson.build')
-        write_file(dst_path, src_mod_meson_build_text, args)
+        if args.verbose:
+            print('Writing %s' % dst_path)
+        write_file(dst_path, src_mod_meson_build_text)
 
         # src/mod/test/meson.build
         if mod not in mod_no_tests:
             test_dir = join(mod_dir, 'test')
             test_mod_meson_build_text = test_mod_meson_build % mod
             dst_path = join(test_dir, 'meson.build')
-            write_file(dst_path, test_mod_meson_build_text, args)
+            if args.verbose:
+                print('Writing %s' % dst_path)
+            write_file(dst_path, test_mod_meson_build_text)
 
     # src/mpn_extras/*/meson.build
     for path, asm_submodule in asm_modules:
@@ -324,29 +334,24 @@ def main(args):
         asm_submodule_text = asm_submodule % format_lines(asm_files)
         asm_submodule_text += asm_to_s_files
         dst_path = join(asm_dir, 'meson.build')
-        write_file(dst_path, asm_submodule_text, args)
+        if args.verbose:
+            print('Writing %s' % dst_path)
+        write_file(dst_path, asm_submodule_text)
 
 
 def format_lines(lst):
     return '\n'.join(f"  '{m}'," for m in sorted(lst))
 
 
-def write_file(dst_path, text, args):
-    if not args.quiet:
-        print('Writing %s' % dst_path)
-    if args.error_if_changed:
-        if not same_content(text, dst_path):
-            print('File {} has changed'.format(dst_path))
-            sys.exit(1)
+def write_file(dst_path, text):
     makedirs(dirname(dst_path), exist_ok=True)
     with open(dst_path, 'w') as fout:
         fout.write(text)
 
 
-def copy_file(src_path, dst_path, args):
-    with open(src_path, 'r') as f:
-        src_content = f.read()
-    write_file(dst_path, src_content, args)
+def copy_file(src_path, dst_path):
+    makedirs(dirname(dst_path), exist_ok=True)
+    copyfile(src_path, dst_path)
 
 
 def same_files(src_path, dst_path):
diff --git a/_meson_build/meson.options b/_meson_build/meson.options
index cded6689ba..d5dc9d2d32 100644
--- a/_meson_build/meson.options
+++ b/_meson_build/meson.options
@@ -6,9 +6,11 @@ option('assembly', type : 'feature', value : 'auto',
         description: 'Use assembly code')
 option('gc', type : 'feature', value : 'disabled',
         description: 'Use the Boehm garbage collector')
+option('pthread', type : 'feature', value : 'auto',
+        description: 'Use pthread')
 option('reentrant', type : 'feature', value : 'disabled',
         description: 'Build the reentrant module')
-option('threadsafe', type : 'feature', value : 'enabled',
+option('thread_safe', type : 'feature', value : 'enabled',
         description: 'Build the threadsafe module')
 option('gmp_internals', type : 'feature', value : 'auto',
         description: 'Use GMP internals')
diff --git a/detection/meson.build b/detection/meson.build
index 98596a13d3..92414e0a62 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -11,6 +11,7 @@ cfg_data = configuration_data()
 # -----------------------------------------------------------------------------
 
 gmp_internals_opt = get_option('gmp_internals')
+pthread_opt = get_option('pthread')
 
 # -----------------------------------------------------------------------------
 #   fmpz memory management
@@ -18,7 +19,7 @@ gmp_internals_opt = get_option('gmp_internals')
 
 enable_gc = get_option('gc').enabled()
 enable_reentrant = get_option('reentrant').enabled()
-enable_thread_safe = get_option('threadsafe').enabled()
+enable_thread_safe = get_option('thread_safe').enabled()
 
 if enable_gc
   if enable_thread_safe
@@ -255,8 +256,8 @@ elif have_assembly and FLINT_HAVE_ASSEMBLY == 'x86_64_adx'
 endif
 
 if have_fft_small
-    cfg_data.set('FLINT_HAVE_FFT_SMALL', 1,
-        description: 'Define to use the fft_small module')
+  cfg_data.set('FLINT_HAVE_FFT_SMALL', 1,
+    description: 'Define to use the fft_small module')
 endif
 
 # cfg_data.set('FLINT_KNOW_STRONG_ORDER', 1,
@@ -271,11 +272,17 @@ cfg_data.set('FLINT_UNROLL_LOOPS', 1,
 #   description: 'Define if system has cpu_set_t')
 # cfg_data.set('FLINT_USES_GC', 0,
 #   description: 'Define to enable the Boehm-Demers-Weise garbage collector.')
-cfg_data.set('FLINT_USES_PTHREAD', 1,
-  description: 'Define to enable the use of pthread.')
 
-cfg_data.set('FLINT_USES_TLS', 1,
-  description: 'Define to enable thread-local storage.')
+if pthread_opt.allowed()
+  cfg_data.set('FLINT_USES_PTHREAD', 1,
+    description: 'Define to enable the use of pthread.')
+endif
+
+if enable_thread_safe
+  cfg_data.set('FLINT_USES_TLS', 1,
+    description: 'Define to enable thread-local storage.')
+endif
+
 # cfg_data.set('FLINT_WANT_WANT_ASSERT', 1,
 #   description: 'Define to enable use of asserts.')
 

From 726909c3d6e7c5c8bef79aedd6eb17deb5301d87 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Tue, 16 Apr 2024 10:27:14 +0100
Subject: [PATCH 23/36] build: add most options to meson build

---
 _meson_build/Makefile      |   8 ++
 _meson_build/configure     | 198 +++++++++++++++++++++++--------------
 _meson_build/meson.options |  36 +++++--
 detection/meson.build      | 113 ++++++++++++++++-----
 4 files changed, 248 insertions(+), 107 deletions(-)

diff --git a/_meson_build/Makefile b/_meson_build/Makefile
index db6fd8946a..bba723902f 100644
--- a/_meson_build/Makefile
+++ b/_meson_build/Makefile
@@ -18,3 +18,11 @@ install: compile
 test: setup
 	meson configure $(BUILDDIR) -Dtests=enabled
 	meson test -C $(BUILDDIR)
+
+coverage: setup
+	# Coverage tool e.g. gcovr needs to be installed *before* meson configure:
+	#    pip install gcovr
+	meson configure $(BUILDDIR) -Dtests=enabled -Db_coverage=true
+	meson test -C $(BUILDDIR)
+	cd $(BUILDDIR) && ninja coverage-html
+	# open $(BUILDDIR)/meson-logs/coveragereport/index.html
diff --git a/_meson_build/configure b/_meson_build/configure
index 4035c2f9d9..a0c82952bc 100755
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -7,6 +7,52 @@ from subprocess import check_call
 from argparse import ArgumentParser
 
 
+def enable_disable_to_do(args, feature):
+    """Translate --enable-foo=no etc to foo=True/False/None"""
+    enable = getattr(args, 'enable_' + feature)
+    disable = getattr(args, 'disable_' + feature)
+    if enable is not None and disable is not None:
+        msg = 'Cannot use --enable-{} and --disable-{} together'
+        raise ValueError(msg.format(feature, feature))
+    if enable is not None:
+        return enable == 'yes'
+    if disable is not None:
+        return disable == 'no'
+    return None
+
+
+def run_command(cmd):
+    print('-' * 80)
+    print('$', ' '.join(cmd))
+    print('-' * 80)
+    check_call(cmd)
+
+
+def enabled_disabled(value):
+    if value is True:
+        return 'enabled'
+    elif value is False:
+        return 'disabled'
+    else:
+        raise ValueError('Invalid value: ' + value)
+
+
+def true_false(value):
+    if value is True:
+        return 'true'
+    elif value is False:
+        return 'false'
+    else:
+        raise ValueError('Invalid value: ' + str(value))
+
+
+def add_feature_option(parser, feature):
+    parser.add_argument('--enable-' + feature, help='Enable ' + feature,
+        choices=['yes', 'no', 'auto'], nargs='?', const='yes', action='store')
+    parser.add_argument('--disable-' + feature, help='Disable ' + feature,
+        choices=['yes', 'no', 'auto'], nargs='?', const='yes', action='store')
+
+
 parser = ArgumentParser(description='Configure FLINT for building with meson')
 
 parser.add_argument('--build-dir', default='build.meson', help='Build directory')
@@ -19,24 +65,23 @@ parser.add_argument('--includedir', default=None, help='Include directory')
 parser.add_argument('--build', default=None, help='Not supported...')
 parser.add_argument('--host', default=None, help='Not supported...')
 
-parser.add_argument('--disable-shared', default=False, action='store_true', help='Do not build shared libraries')
-parser.add_argument('--enable-static', default=False, action='store_true', help='Build static libraries')
-
-parser.add_argument('--disable-libtool-lock', default=None, help='Not supported...')
-parser.add_argument('--enable-pthread', default=None, help='Enable pthread support')
-parser.add_argument('--enable-reentrant', default=None, help='Not supported...')
-parser.add_argument('--enable-thread-safe', default=None, help='Make the library thread-safe')
-parser.add_argument('--enable-assert', default=None, help='Not supported...')
-parser.add_argument('--enable-coverage', default=None, help='Not supported...')
-parser.add_argument('--enable-debug', default=None, help='Not supported...')
-parser.add_argument('--enable-dependency-tracking', default=None, help='Not supported...')
-parser.add_argument('--enable-pretty-tests', default=None, help='Not supported...')
+add_feature_option(parser, 'shared')
+add_feature_option(parser, 'static')
 
-parser.add_argument('--enable-gmp-internals', default=None, help='Use GMP internals')
+add_feature_option(parser, 'libtool-lock')
+add_feature_option(parser, 'pthread')
+add_feature_option(parser, 'reentrant')
+add_feature_option(parser, 'thread-safe')
+add_feature_option(parser, 'assert')
+add_feature_option(parser, 'coverage')
+add_feature_option(parser, 'debug')
+add_feature_option(parser, 'dependency-tracking')
+add_feature_option(parser, 'pretty-tests')
 
-parser.add_argument('--enable-assembly', default=None, choices=['yes', 'no', 'auto'], help='Enable assembly routines (if available)')
-parser.add_argument('--enable-avx2', default=None, choices=['yes', 'no', 'auto'], help='Use AVX2 instructions')
-parser.add_argument('--enable-avx512', default=None, choices=['yes', 'no', 'auto'], help='Use AVX512 instructions')
+add_feature_option(parser, 'gmp-internals')
+add_feature_option(parser, 'assembly')
+add_feature_option(parser, 'avx2')
+add_feature_option(parser, 'avx512')
 
 parser.add_argument('--with-gmp', default=None, help='GMP install directory')
 parser.add_argument('--with-mpfr', default=None, help='MPFR install directory')
@@ -46,24 +91,6 @@ parser.add_argument('--with-gc', default=None, help='Not supported...')
 parser.add_argument('--with-ntl', default=None, help='Not supported...')
 
 
-def run_command(cmd):
-    print('-' * 80)
-    print('$', ' '.join(cmd))
-    print('-' * 80)
-    check_call(cmd)
-
-
-def enabled_disabled(value):
-    if value == 'yes':
-        return 'enabled'
-    elif value == 'no':
-        return 'disabled'
-    elif value == 'auto':
-        return 'auto'
-    else:
-        raise ValueError('Invalid value: ' + value)
-
-
 def get_meson_command_from_configure_args(args):
     """
     Translate e.g. 
@@ -85,48 +112,68 @@ def get_meson_command_from_configure_args(args):
     if args.prefix is not None:
         setup_args.append('--prefix=' + args.prefix)
 
-    if args.enable_static and args.disable_shared:
+    do_shared = enable_disable_to_do(args, 'shared')
+    do_static = enable_disable_to_do(args, 'static')
+
+    do_libtool_lock = enable_disable_to_do(args, 'libtool_lock')
+    do_pthread = enable_disable_to_do(args, 'pthread')
+    do_reentrant = enable_disable_to_do(args, 'reentrant')
+    do_thread_safe = enable_disable_to_do(args, 'thread_safe')
+    do_assert = enable_disable_to_do(args, 'assert')
+    do_coverage = enable_disable_to_do(args, 'coverage')
+    do_debug = enable_disable_to_do(args, 'debug')
+    do_dependency_tracking = enable_disable_to_do(args, 'dependency_tracking')
+    do_pretty_tests = enable_disable_to_do(args, 'pretty_tests')
+
+    do_gmp_internals = enable_disable_to_do(args, 'gmp_internals')
+    do_assembly = enable_disable_to_do(args, 'assembly')
+    do_avx2 = enable_disable_to_do(args, 'avx2')
+    do_avx512 = enable_disable_to_do(args, 'avx512')
+
+    if do_shared is None:
+        do_shared = True
+    if do_static is None:
+        do_static = False
+
+    if do_shared and not do_static:
+        pass
+    elif not do_shared and do_static:
         setup_args.append('--default-library=static')
-    elif args.enable_static and not args.disable_shared:
+    elif do_shared and do_static:
         setup_args.append('--default-library=both')
-    elif not args.enable_static and not args.disable_shared:
-        pass
-    elif not args.enable_static and args.disable_shared:
-        raise ValueError('Cannot use --enable-static and --disable-shared together')
-
-    if args.disable_libtool_lock is not None:
-        raise ValueError('--disable-libtool-lock is not supported')
-    if args.enable_pthread is not None:
-        setup_args.append('-Dpthread=' + enabled_disabled(args.enable_pthread))
-    if args.enable_reentrant is not None:
-        raise ValueError('--enable-reentrant is not supported')
-    if args.enable_thread_safe is not None:
-        setup_args.append('-Dthread_safe=' + enabled_disabled(args.enable_thread_safe))
-    if args.enable_assert is not None:
-        raise ValueError('--enable-assert is not supported')
-    if args.enable_coverage is not None:
-        raise ValueError('--enable-coverage is not supported')
-    if args.enable_debug is not None:
-        raise ValueError('--enable-debug is not supported')
-    if args.enable_dependency_tracking is not None:
-        raise ValueError('--enable-dependency-tracking is not supported')
-    if args.enable_pretty_tests is not None:
-        raise ValueError('--enable-pretty-tests is not supported')
-
-    if args.enable_gmp_internals is not None:
-        setup_args.append('-Dgmp_internals=' + enabled_disabled(args.enable_gmp_internals))
-
-    if args.enable_assembly is not None:
-        setup_args.append('-Dassembly=' + enabled_disabled(args.enable_assembly))
-
-    if args.enable_avx2 is not None or args.enable_avx512 is not None:
-        if 'yes' in (args.enable_avx2, args.enable_avx512):
-            fft_small = 'enabled'
-        elif 'no' in (args.enable_avx2, args.enable_avx512):
-            fft_small = 'disabled'
-        else:
-            fft_small = 'auto'
-        setup_args.append('-Dfft_small=' + fft_small)
+    else:
+        raise ValueError('Cannot disable both shared and static libraries')
+
+    if do_debug is True:
+        setup_args.append('--buildtype=debugoptimized')
+
+    if do_libtool_lock is not None:
+        setup_args.append('-Dlibtool_lock=' + 'disabled')
+    if do_pthread is not None:
+        setup_args.append('-Dpthread=' + enabled_disabled(do_pthread))
+    if do_reentrant is not None:
+        setup_args.append('-Dreentrant=' + enabled_disabled(do_reentrant))
+    if do_thread_safe is not None:
+        setup_args.append('-Dthread_safe=' + enabled_disabled(do_thread_safe))
+    if do_assert is not None:
+        setup_args.append('-Dassert=' + enabled_disabled(do_assert))
+    if do_coverage is not None:
+        setup_args.append('-Db_coverage=' + true_false(do_coverage))
+    if do_dependency_tracking is not None:
+        pass # Meson always does dependency tracking with Ninja
+    if do_pretty_tests is not None:
+        setup_args.append('-Dpretty_tests=' + enabled_disabled(do_pretty_tests))
+
+    if do_gmp_internals is not None:
+        setup_args.append('-Dgmp_internals=' + enabled_disabled(do_gmp_internals))
+
+    if do_assembly is not None:
+        setup_args.append('-Dassembly=' + enabled_disabled(do_assembly))
+
+    if do_avx2 is False or do_avx512 is False:
+        setup_args.append('-Dfft_small=' + 'disabled')
+    elif do_avx2 is True or do_avx512 is True:
+        setup_args.append('-Dfft_small=' + 'enabled')
 
     if args.with_gmp is not None:
         setup_args.append('--pkg-config-path=' + join(args.with_gmp, 'lib', 'pkgconfig'))
@@ -149,7 +196,8 @@ def main(*args):
     # The default behaviour of ./configure is to basically wipe out the build.
     # Everything is then rebuilt from scratch. We will do the same here to
     # match the semantics of configure which does not preserve any settings
-    # from one run of configure to the next.
+    # from one run of configure to the next. When using meson directly, it is
+    # better not to do this because the files might not need to be rebuilt.
     shutil.rmtree(args.build_dir, ignore_errors=True)
     run_command(cmd)
 
diff --git a/_meson_build/meson.options b/_meson_build/meson.options
index d5dc9d2d32..88b74613de 100644
--- a/_meson_build/meson.options
+++ b/_meson_build/meson.options
@@ -1,16 +1,38 @@
 option('tests', type : 'feature', value : 'disabled',
         description: 'Build the tests')
-option('fft_small', type : 'feature', value : 'auto',
-        description: 'Build the fft_small module')
-option('assembly', type : 'feature', value : 'auto',
-        description: 'Use assembly code')
-option('gc', type : 'feature', value : 'disabled',
-        description: 'Use the Boehm garbage collector')
-option('pthread', type : 'feature', value : 'auto',
+option('libtool_lock', type : 'feature', value : 'enabled',
+        description: 'Use libtool lock')
+option('pthread', type : 'feature', value : 'enabled',
         description: 'Use pthread')
 option('reentrant', type : 'feature', value : 'disabled',
         description: 'Build the reentrant module')
 option('thread_safe', type : 'feature', value : 'enabled',
         description: 'Build the threadsafe module')
+option('assert', type : 'feature', value : 'disabled',
+        description: 'Enable assertions')
+option('pretty_tests', type : 'feature', value : 'enabled',
+        description: 'Pretty print test output')
 option('gmp_internals', type : 'feature', value : 'auto',
         description: 'Use GMP internals')
+option('assembly', type : 'feature', value : 'auto',
+        description: 'Use assembly code')
+option('avx2', type : 'feature', value : 'auto',
+        description: 'Use AVX2 instructions')
+option('avx512', type : 'feature', value : 'auto',
+        description: 'Use AVX512 instructions')
+option('fft_small', type : 'feature', value : 'auto',
+        description: 'Build the fft_small module')
+option('blas', type : 'feature', value : 'disabled',
+        description: 'Use BLAS')
+option('gc', type : 'feature', value : 'disabled',
+        description: 'Use the Boehm garbage collector')
+option('ntl', type : 'feature', value : 'disabled',
+        description: 'Use NTL (in tests)')
+# Not included from original configure:
+# coverage  -Db_coverage=true
+# debug
+# dependency_tracking
+# with-pic
+# with-aix-soname
+# with-gnu-ld
+# with-sysroot
diff --git a/detection/meson.build b/detection/meson.build
index 92414e0a62..24baea53f4 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -10,25 +10,49 @@ cfg_data = configuration_data()
 #   Project options
 # -----------------------------------------------------------------------------
 
-gmp_internals_opt = get_option('gmp_internals')
+libtool_lock_opt = get_option('libtool_lock')
 pthread_opt = get_option('pthread')
+reentrant_opt = get_option('reentrant')
+thread_safe_opt = get_option('thread_safe')
+assert_opt = get_option('assert')
+pretty_tests_opt = get_option('pretty_tests')
+gmp_internals_opt = get_option('gmp_internals')
+assembly_opt = get_option('assembly')
+avx2_opt = get_option('avx2')
+avx512_opt = get_option('avx512')
+fft_small_opt = get_option('fft_small')
+blas_opt = get_option('blas')
+gc_opt = get_option('gc')
+ntl_opt = get_option('ntl')
 
 # -----------------------------------------------------------------------------
-#   fmpz memory management
+#   Unsupported options
 # -----------------------------------------------------------------------------
 
-enable_gc = get_option('gc').enabled()
-enable_reentrant = get_option('reentrant').enabled()
-enable_thread_safe = get_option('thread_safe').enabled()
+if avx2_opt.enabled()
+  error('AVX2 support is not yet implemented')
+elif avx512_opt.enabled()
+  error('AVX512 support is not yet implemented')
+elif blas_opt.enabled()
+  error('BLAS support is not yet implemented')
+elif gc_opt.enabled()
+  error('Garbage collection is not yet implemented')
+elif ntl_opt.enabled()
+  error('NTL support is not yet implemented')
+endif
 
-if enable_gc
-  if enable_thread_safe
+# -----------------------------------------------------------------------------
+#   fmpz memory management
+# -----------------------------------------------------------------------------
+
+if gc_opt.allowed()
+  if thread_safe_opt.allowed()
     error('Garbage collection is not thread safe')
   else
     fmpz_c_in = 'fmpz_gc.c'
   endif
 else
-  if enable_reentrant
+  if reentrant_opt.enabled()
     fmpz_c_in = 'fmpz_reentrant.c'
   else
     fmpz_c_in = 'fmpz_single.c'
@@ -240,12 +264,31 @@ if host_machine.system() != 'windows'
   endif
 endif
 
+# -----------------------------------------------------------------------------
+#   cpu_set_t support
+# -----------------------------------------------------------------------------
+
+have_cpu_set_t = cc.compiles('''
+#define _GNU_SOURCE
+#include <sched.h>
+#include <pthread.h>
+
+int main() {
+  cpu_set_t s;
+  CPU_ZERO(&s);
+  pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &s);
+  return 0;
+}
+''')
+
 # -----------------------------------------------------------------------------
 #  external configuration for flint_config.h
 # -----------------------------------------------------------------------------
 
-# cfg_data.set('FLINT_BIG_ENDIAN', 1,
-#   description: 'Define if system is big endian.')
+if host_machine.endian() == 'big'
+  cfg_data.set('FLINT_BIG_ENDIAN', 1,
+    description: 'Define if system is big endian.')
+endif
 
 if have_assembly and FLINT_HAVE_ASSEMBLY == 'armv8'
   cfg_data.set('FLINT_HAVE_ASSEMBLY_armv8', 1,
@@ -260,39 +303,57 @@ if have_fft_small
     description: 'Define to use the fft_small module')
 endif
 
+# XXX: Need better CPU detection
 # cfg_data.set('FLINT_KNOW_STRONG_ORDER', 1,
 #   description: 'Define if system is strongly ordered')
-# cfg_data.set('FLINT_REENTRANT', 0,
-#   description: 'Define to enable reentrant.')
+
+if reentrant_opt.enabled()
+  cfg_data.set('FLINT_REENTRANT', 1,
+    description: 'Define to enable reentrant.')
+endif
+
 cfg_data.set('FLINT_UNROLL_LOOPS', 1,
   description: 'Define to locally unroll some loops')
-# cfg_data.set('FLINT_USES_BLAS', 0,
-#   description: 'Define to enable BLAS.')
-# cfg_data.set('FLINT_USES_CPUSET', 0,
-#   description: 'Define if system has cpu_set_t')
-# cfg_data.set('FLINT_USES_GC', 0,
-#   description: 'Define to enable the Boehm-Demers-Weise garbage collector.')
-
-if pthread_opt.allowed()
+
+if blas_opt.enabled()
+  cfg_data.set('FLINT_USES_BLAS', 1,
+    description: 'Define to enable BLAS.')
+endif
+
+if have_cpu_set_t
+  cfg_data.set('FLINT_USES_CPUSET', 1,
+    description: 'Define if system has cpu_set_t')
+endif
+
+if gc_opt.enabled()
+  cfg_data.set('FLINT_USES_GC', 1,
+    description: 'Define to enable the Boehm-Demers-Weise garbage collector.')
+endif
+
+if pthread_opt.enabled()
   cfg_data.set('FLINT_USES_PTHREAD', 1,
     description: 'Define to enable the use of pthread.')
 endif
 
-if enable_thread_safe
+if thread_safe_opt.enabled()
   cfg_data.set('FLINT_USES_TLS', 1,
     description: 'Define to enable thread-local storage.')
 endif
 
-# cfg_data.set('FLINT_WANT_WANT_ASSERT', 1,
-#   description: 'Define to enable use of asserts.')
+if assert_opt.enabled()
+  cfg_data.set('FLINT_WANT_ASSERT', 1,
+    description: 'Define to enable use of asserts.')
+endif
 
 if gmp_internals_opt.allowed()
   cfg_data.set('FLINT_WANT_GMP_INTERNALS', 1,
     description: 'Define to enable use of GMP internals.')
 endif
 
-cfg_data.set('FLINT_WANT_PRETTY_TESTS', 1,
-  description: 'Define to enable pretty printing for tests.')
+if pretty_tests_opt.enabled()
+  cfg_data.set('FLINT_WANT_PRETTY_TESTS', 1,
+    description: 'Define to enable pretty printing for tests.')
+endif
 
 # -----------------------------------------------------------------------------
 #  internal configuration for config.h
@@ -344,8 +405,10 @@ endforeach
 
 # XXX: Do we need to check for _alligned_malloc?
 
+# XXX: Need better checking for LSYM_PREFIX and related assembly options
 cfg_data_internal.set_quoted('LSYM_PREFIX', 'L',
   description: 'Assembler local label prefix')
+
 cfg_data_internal.set_quoted('LT_OBJDIR', '.libs/',
   description: 'Define to the sub-directory where libtool stores uninstalled libraries.')
 cfg_data_internal.set_quoted('PACKAGE_BUGREPORT',

From a1a34248545a82dfe0a08fc50d92a077c4c05da5 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 20 Apr 2024 11:50:17 +0100
Subject: [PATCH 24/36] build: Fix Makefile install dep in meson build

---
 _meson_build/Makefile  | 2 +-
 _meson_build/configure | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/_meson_build/Makefile b/_meson_build/Makefile
index bba723902f..775b1dd74d 100644
--- a/_meson_build/Makefile
+++ b/_meson_build/Makefile
@@ -12,7 +12,7 @@ $(BUILDDIR)/.build-dir-created:
 clean:
 	rm -rf $(BUILDDIR)
 
-install: compile
+install: setup
 	meson install -C $(BUILDDIR)
 
 test: setup
diff --git a/_meson_build/configure b/_meson_build/configure
index a0c82952bc..a29758345f 100755
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -200,6 +200,9 @@ def main(*args):
     # better not to do this because the files might not need to be rebuilt.
     shutil.rmtree(args.build_dir, ignore_errors=True)
     run_command(cmd)
+    # The Makefile uses this to check if project is configured
+    with open(join(args.build_dir, '.build-dir-created'), 'w') as f:
+        pass
 
 
 if __name__ == '__main__':

From 853cbeeae0e031e2ad3938ae92e8ab8c242a9797 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 20 Apr 2024 12:49:33 +0100
Subject: [PATCH 25/36] build: Add make uninstall

---
 _meson_build/Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/_meson_build/Makefile b/_meson_build/Makefile
index 775b1dd74d..f7c024c34d 100644
--- a/_meson_build/Makefile
+++ b/_meson_build/Makefile
@@ -15,6 +15,9 @@ clean:
 install: setup
 	meson install -C $(BUILDDIR)
 
+uninstall:
+	cd $(BUILDDIR) && ninja uninstall
+
 test: setup
 	meson configure $(BUILDDIR) -Dtests=enabled
 	meson test -C $(BUILDDIR)

From b74cd3f695e816e0891e5de41aebf56de58f389a Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 20 Apr 2024 13:29:48 +0100
Subject: [PATCH 26/36] build: fix installing headers in meson build

---
 _meson_build/configure                 |  2 ++
 _meson_build/include/flint/meson.build | 28 +++++++++++++++++---------
 _meson_build/include/meson.build       |  1 +
 _meson_build/meson.build               |  2 --
 4 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/_meson_build/configure b/_meson_build/configure
index a29758345f..2f0f34592c 100755
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -107,6 +107,8 @@ def get_meson_command_from_configure_args(args):
         setup_args.append('--bindir=' + args.bindir)
     if args.libdir is not None:
         setup_args.append('--libdir=' + args.libdir)
+    else:
+        setup_args.append('--libdir=lib')
     if args.includedir is not None:
         setup_args.append('--includedir=' + args.includedir)
     if args.prefix is not None:
diff --git a/_meson_build/include/flint/meson.build b/_meson_build/include/flint/meson.build
index 2515f636af..9848867438 100644
--- a/_meson_build/include/flint/meson.build
+++ b/_meson_build/include/flint/meson.build
@@ -1,3 +1,8 @@
+header_install_kwargs = {
+  'install_dir': get_option('includedir') / 'flint',
+  'install': true,
+}
+
 flint_h = configure_file(
   input: '../../src/flint.h.in',
   output: 'flint.h',
@@ -6,17 +11,20 @@ flint_h = configure_file(
     'FLINT_MINOR': FLINT_MINOR,
     'FLINT_PATCH': FLINT_PATCH,
     'FLINT_VERSION_FULL': FLINT_VERSION_FULL,
-  }
+  },
+  kwargs: header_install_kwargs,
 )
 
 flint_config_h = configure_file(
   output: 'flint-config.h',
   configuration: cfg_data,
+  kwargs: header_install_kwargs,
 )
 
 config_h = configure_file(
   output: 'config.h',
   configuration: cfg_data_internal,
+  kwargs: header_install_kwargs,
 )
 
 if gmp_long_long_limb
@@ -25,24 +33,24 @@ else
   gmpcompat_h_in = 'gmpcompat.h.in'
 endif
 
-gmpcompat_h = configure_file(
-  input: '../../src' / gmpcompat_h_in,
-  output: 'gmpcompat.h',
-  copy: true,
+gmpcompat_h = fs.copyfile(
+  '../../src' / gmpcompat_h_in,
+  'gmpcompat.h',
+  kwargs: header_install_kwargs,
 )
 
 flint_mparam_h_in = '../../src/mpn_extras' / flint_mparam / 'flint-mparam.h'
 
-flint_mparam_h = configure_file(
-  input: flint_mparam_h_in,
-  output: 'flint-mparam.h',
-  copy: true,
+flint_mparam_h = fs.copyfile(
+  flint_mparam_h_in,
+  'flint-mparam.h',
+  kwargs: header_install_kwargs,
 )
 
 # Copy all the other headers to the build directory so you can do
 #   gcc -Ibuild-dir/include ...
 foreach h: headers_all
-  fs.copyfile(h)
+  fs.copyfile(h, kwargs: header_install_kwargs)
 endforeach
 
 headers_all += [
diff --git a/_meson_build/include/meson.build b/_meson_build/include/meson.build
index a670a21e97..39b83d76e8 100644
--- a/_meson_build/include/meson.build
+++ b/_meson_build/include/meson.build
@@ -1,3 +1,4 @@
 subdir('flint')
+
 headers_built_inc = include_directories('.')
 headers_built_nodir_inc = include_directories('flint')
diff --git a/_meson_build/meson.build b/_meson_build/meson.build
index 96a32fffc2..96d423f35f 100644
--- a/_meson_build/meson.build
+++ b/_meson_build/meson.build
@@ -46,8 +46,6 @@ endif
 # Build include directory after list of all source files is complete
 subdir('include')
 
-install_headers(headers_all, subdir: 'flint')
-
 libflint = library('flint', c_files_all,
   dependencies: flint_deps,
   include_directories: [headers_built_nodir_inc, 'src'],

From 32547246005fd482e0e66f5d25ec5523ce2e925d Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 20 Apr 2024 16:37:48 +0100
Subject: [PATCH 27/36] build: disable avx2 and avx512 by default

---
 _meson_build/meson.options | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/_meson_build/meson.options b/_meson_build/meson.options
index 88b74613de..dbaa7eaaaf 100644
--- a/_meson_build/meson.options
+++ b/_meson_build/meson.options
@@ -16,9 +16,9 @@ option('gmp_internals', type : 'feature', value : 'auto',
         description: 'Use GMP internals')
 option('assembly', type : 'feature', value : 'auto',
         description: 'Use assembly code')
-option('avx2', type : 'feature', value : 'auto',
+option('avx2', type : 'feature', value : 'disabled',
         description: 'Use AVX2 instructions')
-option('avx512', type : 'feature', value : 'auto',
+option('avx512', type : 'feature', value : 'disabled',
         description: 'Use AVX512 instructions')
 option('fft_small', type : 'feature', value : 'auto',
         description: 'Build the fft_small module')

From 4fbfde548d0d327789de65927d066f32bbf63189 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 20 Apr 2024 17:12:21 +0100
Subject: [PATCH 28/36] build: detect fft_small requirements in meson build

---
 detection/meson.build | 49 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 44 insertions(+), 5 deletions(-)

diff --git a/detection/meson.build b/detection/meson.build
index 24baea53f4..a03e2da225 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -182,12 +182,51 @@ endif
 
 fft_small_opt = get_option('fft_small')
 
-# check for headers used by fft_small
-# XXX: Need to actually compile a test program to check for AVX support
-has_avx = cc.has_header('immintrin.h')
-has_neon = cc.has_header('arm_neon.h')
+fft_small_arm_code = '''
+#include <gmp.h>
+#if GMP_LIMB_BITS != 64
+# error
+error
+#endif
+
+#include <arm_neon.h>
+#if !(defined(__GNUC__) && defined(__ARM_NEON))
+# if !(defined(_MSC_VER) && defined(_M_ARM64))
+#  error
+error
+# endif
+#endif
+void main(){};
+'''
+
+fft_small_x86_code = '''
+#include <gmp.h>
+#if GMP_LIMB_BITS != 64
+# error
+error
+#endif
+
+#if defined(__GNUC__)
+# include <x86intrin.h>
+#elif defined(_MSC_VER)
+# include <intrin.h>
+#else
+# error
+error
+#endif
+
+#if !defined(__AVX2__)
+# error
+error
+#endif
+void main(){};
+'''
 
-fft_small_supported = has_avx or has_neon
+# XXX: Do we need to check ARM64_PATTERN/X86_64_PATTERN?
+fft_small_supported = (
+  cc.compiles(fft_small_arm_code, dependencies: gmp_dep)
+  or cc.compiles(fft_small_x86_code, dependencies: gmp_dep)
+)
 
 # Error if fft_small enabled but not possible, otherwise disable if auto
 fft_small_opt = fft_small_opt.require(fft_small_supported,

From 3ca5c2e46cc2bde4f49c8226fefc47df2844747e Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 20 Apr 2024 17:19:06 +0100
Subject: [PATCH 29/36] build: fix fft_small checking

---
 detection/meson.build | 16 ++--------------
 1 file changed, 2 insertions(+), 14 deletions(-)

diff --git a/detection/meson.build b/detection/meson.build
index a03e2da225..08afd407f7 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -183,12 +183,6 @@ endif
 fft_small_opt = get_option('fft_small')
 
 fft_small_arm_code = '''
-#include <gmp.h>
-#if GMP_LIMB_BITS != 64
-# error
-error
-#endif
-
 #include <arm_neon.h>
 #if !(defined(__GNUC__) && defined(__ARM_NEON))
 # if !(defined(_MSC_VER) && defined(_M_ARM64))
@@ -196,16 +190,10 @@ error
 error
 # endif
 #endif
-void main(){};
+int main(){return 0;}
 '''
 
 fft_small_x86_code = '''
-#include <gmp.h>
-#if GMP_LIMB_BITS != 64
-# error
-error
-#endif
-
 #if defined(__GNUC__)
 # include <x86intrin.h>
 #elif defined(_MSC_VER)
@@ -219,7 +207,7 @@ error
 # error
 error
 #endif
-void main(){};
+int main(){return 0;}
 '''
 
 # XXX: Do we need to check ARM64_PATTERN/X86_64_PATTERN?

From 88e6dad025edefeda7539d2148254eaaef5df565 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Thu, 20 Jun 2024 15:11:55 +0100
Subject: [PATCH 30/36] Run config.guess to check for exact CPU

---
 detection/meson.build | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/detection/meson.build b/detection/meson.build
index 08afd407f7..84b7b3cb8e 100644
--- a/detection/meson.build
+++ b/detection/meson.build
@@ -176,6 +176,25 @@ if gmp_internals_opt.allowed()
 
 endif
 
+# -----------------------------------------------------------------------------
+#    CPU detection
+# -----------------------------------------------------------------------------
+
+# We check here for gcc or clang because the config.guess script probably does
+# not work for other compilers. This check will also allow MinGW and cygwin on
+# Windows but not MSVC.
+
+# The config.guess script inspects the current CPU so should not be used for a
+# cross build. Maybe there should be a way to configure the exact CPU as a
+# project build option.
+
+if not meson.is_cross_build() and cc.get_id() in ['gcc', 'clang']
+  config_guess_result = run_command('../config/config.guess', check: true)
+  target_triple = config_guess_result.stdout().strip()
+  exact_cpu = target_triple.split('-')[0]
+  message('EXACT CPU:', exact_cpu)
+endif
+
 # -----------------------------------------------------------------------------
 #    fft_small
 # -----------------------------------------------------------------------------

From b27e820e322ee8b28b80adecb8c9e88c6506d530 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Thu, 20 Jun 2024 15:27:22 +0100
Subject: [PATCH 31/36] Move detection script to config dir

---
 _meson_build/meson.build          | 2 +-
 {detection => config}/meson.build | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename {detection => config}/meson.build (99%)

diff --git a/_meson_build/meson.build b/_meson_build/meson.build
index 96d423f35f..fb81b3588e 100644
--- a/_meson_build/meson.build
+++ b/_meson_build/meson.build
@@ -27,7 +27,7 @@ add_project_arguments(
   language: 'c',
 )
 
-subdir('detection')
+subdir('config')
 subdir('src')
 
 if have_assembly
diff --git a/detection/meson.build b/config/meson.build
similarity index 99%
rename from detection/meson.build
rename to config/meson.build
index 84b7b3cb8e..827173ff76 100644
--- a/detection/meson.build
+++ b/config/meson.build
@@ -189,7 +189,7 @@ endif
 # project build option.
 
 if not meson.is_cross_build() and cc.get_id() in ['gcc', 'clang']
-  config_guess_result = run_command('../config/config.guess', check: true)
+  config_guess_result = run_command('./config.guess', check: true)
   target_triple = config_guess_result.stdout().strip()
   exact_cpu = target_triple.split('-')[0]
   message('EXACT CPU:', exact_cpu)

From 97a96b56306e90619eca9d58c46e1c470a2a3540 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Thu, 20 Jun 2024 18:03:17 +0100
Subject: [PATCH 32/36] Add CPU configuration tables to meson build

---
 config/meson.build | 307 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 306 insertions(+), 1 deletion(-)

diff --git a/config/meson.build b/config/meson.build
index 827173ff76..ea8730cc96 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -192,7 +192,312 @@ if not meson.is_cross_build() and cc.get_id() in ['gcc', 'clang']
   config_guess_result = run_command('./config.guess', check: true)
   target_triple = config_guess_result.stdout().strip()
   exact_cpu = target_triple.split('-')[0]
-  message('EXACT CPU:', exact_cpu)
+else
+  # This could be 'aarch64' or 'x86_64'
+  # https://mesonbuild.com/Reference-tables.html#cpu-families
+  exact_cpu = host_machine.cpu_family()
+endif
+
+message('EXACT CPU:', exact_cpu)
+
+################################################################################
+# architecture specifics
+################################################################################
+
+gcc_cflags = '-O3 -pedantic -std=c11'
+gcc_warnings = '-Werror=implicit-function-declaration -Wall -Wno-stringop-overread -Wno-stringop-overflow'
+
+# We only try to provide specifics for those systems that currently supports
+# our assembly routines. If more combinations are wished for than what is
+# specified, please open up an issue at
+# <https://github.com/flintlib/flint/issues/> and we will consider it.
+#
+# For these systems we aim to provide:
+#
+#   gcc_cflags     flags for GCC-compatible compilers
+#
+#   asm_path       directory for assembly, relative to src/mpn_extras
+#   param_path     directory for flint-mparam.h, relative to src/mpn_extras
+#
+# For x86_64 systems, we can also set:
+#
+#   have_avx512    system has AVX512F and AVX512DQ (we assume this implies have_avx2)
+#   have_avx2      system has AVX2 and FMA
+
+# x86_64 CPUs that have AVX2:
+X86_64_ADX_CPU_NAMES = [
+  'zen1',
+  'zen2',
+  'zen3',
+  'zen4',
+  'coreibwl',
+  'broadwell',
+  'skylake',
+  'skylake_server',
+  'cannonlake',
+  'kabylake',
+  'icelake',
+  'icelake_server',
+  'rocketlake',
+  'tigerlake',
+  'alderlake',
+  'raptorlake',
+  'knightslanding',
+  'sapphirerapids',
+  'cometlake',
+]
+
+if host_machine.cpu_family() == 'aarch64'
+
+  gcc_cflags  =  gcc_cflags
+  gcc_cflags_optlist = 'arch tune'
+  asm_path = 'arm64'
+  param_path = 'arm64'
+  flint_cv_have_fft_small_arm_i = 'yes'
+
+  # NOTE: Cortex values where taken from
+  # https://developer.arm.com/Processors/Cortex-XXX
+
+  if exact_cpu in ['armcortexa35', 'armcortexa35neon']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=cortex-a35'
+
+  elif exact_cpu in ['armcortexa53', 'armcortexa53neon']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=cortex-a53'
+
+  elif exact_cpu in ['armcortexa55', 'armcortexa55neon']
+    gcc_cflags_arch = '-march=armv8.2-a'
+    gcc_cflags_tune = '-mtune=cortex-a55'
+
+  elif exact_cpu in ['armcortexa57', 'armcortexa57neon']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=cortex-a57'
+
+  elif exact_cpu in ['armcortexa72', 'armcortexa72neon']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=cortex-a72'
+
+  elif exact_cpu in ['armcortexa73', 'armcortexa73neon']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=cortex-a73'
+
+  elif exact_cpu in ['armcortexa75', 'armcortexa75neon']
+    gcc_cflags_arch = '-march=armv8.2-a'
+    gcc_cflags_tune = '-mtune=cortex-a75'
+
+  elif exact_cpu in ['armcortexa76', 'armcortexa76neon']
+    gcc_cflags_arch = '-march=armv8.2-a'
+    gcc_cflags_tune = '-mtune=cortex-a76'
+
+  elif exact_cpu in ['armcortexa77', 'armcortexa77neon']
+    gcc_cflags_arch = '-march=armv8.2-a'
+    gcc_cflags_tune = '-mtune=cortex-a77'
+
+  elif exact_cpu in ['armcortexa65', 'armcortexa65neon']
+    gcc_cflags_arch = '-march=armv8.2-a'
+    gcc_cflags_tune = '-mtune=cortex-a65'
+
+  elif exact_cpu in ['armcortexa34', 'armcortexa34neon']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=cortex-a34'
+
+  elif exact_cpu in ['armcortexa78', 'armcortexa78neon']
+    gcc_cflags_arch = '-march=armv8.2-a'
+    gcc_cflags_tune = '-mtune=cortex-a78'
+
+  elif exact_cpu in ['armexynosm1']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=exynos-m1'
+
+  elif exact_cpu in ['armthunderx']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=thunderx'
+
+  elif exact_cpu in ['armxgene1']
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = '-mtune=xgene1'
+
+  elif exact_cpu.startswith('applem1')
+    gcc_cflags_arch = '-march=armv8.5-a'
+    gcc_cflags_tune = ''
+
+  elif exact_cpu.startswith('applem2')
+    gcc_cflags_arch = '-march=armv8.6-a'
+    gcc_cflags_tune = ''
+
+  elif exact_cpu.startswith('applem3')
+    gcc_cflags_arch = '-march=armv8.6-a'
+    gcc_cflags_tune = ''
+
+  elif exact_cpu.startswith('aarch64') or exact_cpu.startswith('armv8')
+    gcc_cflags_arch = '-march=armv8-a'
+    gcc_cflags_tune = ''
+
+  else
+    error_msg = '''
+    Error in deciding flags for @0@.
+    Please report at <https://github.com/flintlib/flint/issues/>
+    '''
+    error(error_msg.format(exact_cpu))
+
+  endif
+
+elif host_machine.cpu_family() == 'x86_64' and exact_cpu in X86_64_ADX_CPU_NAMES
+
+  gcc_cflags = gcc_cflags
+  gcc_cflags_optlist = 'arch'
+  asm_path = 'x86_64/broadwell'
+  param_path = 'x86_64/broadwell'
+
+  have_avx512 = 'no'
+  have_avx2 = 'yes'
+  flint_cv_have_fft_small_x86_i = 'yes'
+
+  if exact_cpu == 'zen'
+    gcc_cflags_arch = '-march=znver1'
+    param_path = 'x86_64/zen3'
+
+  elif exact_cpu == 'zen2'
+    gcc_cflags_arch = '-march=znver2'
+    param_path = 'x86_64/zen3'
+
+  elif exact_cpu == 'zen3'
+    gcc_cflags_arch = '-march=znver3'
+    param_path = 'x86_64/zen3'
+
+  elif exact_cpu == 'zen4'
+    gcc_cflags_arch = '-march=znver4'
+    param_path = 'x86_64/zen3'
+    have_avx512 = 'yes'
+
+  elif exact_cpu in ['coreibwl', 'broadwell']
+    gcc_cflags_arch = '-march=broadwell'
+    param_path = 'x86_64/skylake'
+
+  elif exact_cpu == 'skylake'
+    gcc_cflags_arch = '-march=skylake'
+    param_path = 'x86_64/skylake'
+
+  elif exact_cpu == 'skylake_server'
+    gcc_cflags_arch = '-march=skylake-avx512'
+    param_path = 'x86_64/skylake'
+    have_avx512 = 'yes'
+
+  elif exact_cpu == 'cannonlake'
+    gcc_cflags_arch = '-march=cannonlake'
+    param_path = 'x86_64/skylake'
+    have_avx512 = 'yes'
+
+  elif exact_cpu == 'kabylake'
+    gcc_cflags_arch = '-march=skylake'
+    param_path = 'x86_64/skylake'
+
+  elif exact_cpu == 'icelake'
+    gcc_cflags_arch = '-march=icelake-client'
+    param_path = 'x86_64/skylake'
+    have_avx512 = 'yes'
+
+  elif exact_cpu == 'icelake_server'
+    gcc_cflags_arch = '-march=icelake-server'
+    param_path = 'x86_64/skylake'
+    have_avx512 = 'yes'
+
+  elif exact_cpu == 'rocketlake'
+    gcc_cflags_arch = '-march=rocketlake'
+    param_path = 'x86_64/skylake'
+    have_avx512 = 'yes'
+
+  elif exact_cpu == 'tigerlake'
+    gcc_cflags_arch = '-march=tigerlake'
+    param_path = 'x86_64/skylake'
+    have_avx512 = 'yes'
+
+  elif exact_cpu == 'alderlake'
+    gcc_cflags_arch = '-march=alderlake'
+    param_path = 'x86_64/skylake'
+
+  elif exact_cpu == 'raptorlake'
+    gcc_cflags_arch = '-march=alderlake'
+    param_path = 'x86_64/skylake'
+
+  elif exact_cpu == 'knightslanding'
+    gcc_cflags_arch = '-march=knl'
+    param_path = 'x86_64/skylake'
+
+  elif exact_cpu == 'sapphirerapids'
+    gcc_cflags_arch = '-march=sapphirerapids'
+    param_path = 'x86_64/skylake'
+    have_avx512 = 'yes'
+
+  elif exact_cpu == 'cometlake'
+    gcc_cflags_arch = '-march=kabylake'
+    param_path = 'x86_64/skylake'
+
+  else
+    error_msg = '''
+    Error in deciding flags for @0@.
+    Please report at <https://github.com/flintlib/flint/issues/>
+    '''
+    error(error_msg.format(exact_cpu))
+
+  endif
+
+  # Disable assembly on Windows
+  if host_machine.system() == 'windows'
+    flint_nonstd_abi = 'yes'
+    asm_path = ''
+    param_path = 'x86_64'
+  endif
+
+elif host_machine.cpu_family() == 'x86_64'
+
+  # NOTE: We do not care if the user specifies noavx!
+  gcc_cflags = '$gcc_cflags'
+  gcc_cflags_optlist = 'arch'
+  asm_path = ''
+  param_path = 'x86_64'
+
+  if exact_cpu in ['coreiibr', 'ivybridge']
+    gcc_cflags_arch = '-march=ivybridge'
+
+  elif exact_cpu in ['coreihwl', 'haswell']
+    gcc_cflags_arch = '-march=haswell'
+
+  elif exact_cpu in ['piledriver', 'bd2']
+    gcc_cflags_arch = '-march=bdver2'
+
+  elif exact_cpu in ['steamroller', 'bd3']
+    gcc_cflags_arch = '-march=bdver3'
+
+  elif exact_cpu in ['excavator', 'bd4']
+    gcc_cflags_arch = '-march=bdver4'
+    have_avx2 = 'yes'
+
+  elif exact_cpu in ['x86_64v3']
+    gcc_cflags_arch = '-march=x86-64-v3'
+    have_avx2 = 'yes'
+
+  elif exact_cpu in ['x86_64v4']
+    gcc_cflags_arch = '-march=x86-64-v4'
+    have_avx512 = 'yes'
+
+  endif
+
+  if have_avx512 == 'yes'
+    have_avx2 = 'yes'
+  endif
+
+  if have_avx2 == 'yes'
+    flint_cv_have_fft_small_x86_i = 'yes'
+  endif
+
+else
+  # Generic case for unrecognised CPU
+  asm_path = ''
+  param_path = 'generic'
+  gcc_cflags = gcc_cflags
+
 endif
 
 # -----------------------------------------------------------------------------

From 6c5d15dbfcc7f21b11bc9240000140df2d8324c5 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 22 Jun 2024 13:43:45 +0100
Subject: [PATCH 33/36] Enable assembly based on exact_cpu in meson build

---
 config/meson.build | 86 ++++++++++++++++++++--------------------------
 1 file changed, 38 insertions(+), 48 deletions(-)

diff --git a/config/meson.build b/config/meson.build
index ea8730cc96..4c8c74ac54 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -458,6 +458,9 @@ elif host_machine.cpu_family() == 'x86_64'
   asm_path = ''
   param_path = 'x86_64'
 
+  have_avx512 = 'no'
+  have_avx2 = 'no'
+
   if exact_cpu in ['coreiibr', 'ivybridge']
     gcc_cflags_arch = '-march=ivybridge'
 
@@ -490,6 +493,8 @@ elif host_machine.cpu_family() == 'x86_64'
 
   if have_avx2 == 'yes'
     flint_cv_have_fft_small_x86_i = 'yes'
+  else
+    flint_cv_have_fft_small_x86_i = 'no'
   endif
 
 else
@@ -498,8 +503,17 @@ else
   param_path = 'generic'
   gcc_cflags = gcc_cflags
 
+  have_avx512 = 'no'
+  have_avx2 = 'no'
+
 endif
 
+# -----------------------------------------------------------------------------
+#   mparam
+# -----------------------------------------------------------------------------
+
+flint_mparam = param_path
+
 # -----------------------------------------------------------------------------
 #    fft_small
 # -----------------------------------------------------------------------------
@@ -534,11 +548,17 @@ error
 int main(){return 0;}
 '''
 
-# XXX: Do we need to check ARM64_PATTERN/X86_64_PATTERN?
-fft_small_supported = (
-  cc.compiles(fft_small_arm_code, dependencies: gmp_dep)
-  or cc.compiles(fft_small_x86_code, dependencies: gmp_dep)
-)
+if host_machine.cpu_family() == 'aarch64'
+  fft_small_supported = (
+    flint_cv_have_fft_small_arm_i == 'yes'
+    and cc.compiles(fft_small_arm_code, dependencies: gmp_dep)
+  )
+else
+  fft_small_supported = (
+    flint_cv_have_fft_small_x86_i == 'yes'
+    and cc.compiles(fft_small_x86_code, dependencies: gmp_dep)
+  )
+endif
 
 # Error if fft_small enabled but not possible, otherwise disable if auto
 fft_small_opt = fft_small_opt.require(fft_small_supported,
@@ -551,34 +571,27 @@ have_fft_small = fft_small_opt.enabled()
 message('FFT_SMALL: ', have_fft_small ? 'enabled' : 'disabled')
 
 # -----------------------------------------------------------------------------
-#   assembly
+#   Assembly
 # -----------------------------------------------------------------------------
 
-assembly_opt = get_option('assembly')
-
-# Might be better to check for known good operating systems rather than
-# exclude known bad ones.
-assembly_opt = assembly_opt.require(host_machine.system() != 'windows',
-    error_message: 'No assembly support for Windows')
-
-# Checking for assembly support needs to be more complicated than this. ARM
-# needs to be v8 and not sure exactly what to check for x86_64. For now
-# the checks below would attempt to build assembly on some systems that do not
-# support it. The feature can be disabled with -Dassembly=disabled to build on
-# those systems.
-if host_machine.cpu_family() == 'aarch64'
-  assembly_cpu_supported = true
-  assembly_dir = 'mpn_extras/arm64'
-  FLINT_HAVE_ASSEMBLY = 'armv8'
-elif host_machine.cpu_family() == 'x86_64'
+if asm_path != ''
   assembly_cpu_supported = true
-  assembly_dir = 'mpn_extras/x86_64/broadwell'
-  FLINT_HAVE_ASSEMBLY = 'x86_64_adx'
+  assembly_dir = 'mpn_extras/' + asm_path
+  if host_machine.cpu_family() == 'aarch64'
+    FLINT_HAVE_ASSEMBLY = 'armv8'
+  elif host_machine.cpu_family() == 'x86_64'
+    FLINT_HAVE_ASSEMBLY = 'x86_64_adx'
+  else
+    error('Assembly only supported for x86_64 or aarch64')
+  endif
 else
   assembly_cpu_supported = false
   FLINT_HAVE_ASSEMBLY = ''
 endif
 
+assembly_opt = assembly_opt.require(host_machine.system() != 'windows',
+    error_message: 'No assembly support for Windows')
+
 assembly_opt = assembly_opt.require(assembly_cpu_supported,
     error_message: 'No assembly support for host CPU')
 
@@ -592,29 +605,6 @@ if have_assembly
   LSYM_PREFIX = 'L'
 endif
 
-# -----------------------------------------------------------------------------
-#   mparam
-# -----------------------------------------------------------------------------
-
-flint_mparam = 'generic'
-
-if host_machine.system() != 'windows'
-  if host_machine.cpu_family() == 'aarch64'
-    if host_machine.system() == 'darwin'
-      flint_mparam = 'arm64/applem1'
-    else
-      flint_mparam = 'arm64'
-    endif
-  elif host_machine.cpu_family() == 'x86_64'
-    # XXX: Need better CPU detection
-    if have_assembly
-      flint_mparam = 'x86_64/broadwell'
-    else
-      flint_mparam = 'generic'
-    endif
-  endif
-endif
-
 # -----------------------------------------------------------------------------
 #   cpu_set_t support
 # -----------------------------------------------------------------------------

From fa8fbff2977871dc604b16c56064f2f38f053004 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 22 Jun 2024 13:58:34 +0100
Subject: [PATCH 34/36] Use exact_cpu to detect FLINT_KNOW_STRONG_ORDER

---
 config/meson.build | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/config/meson.build b/config/meson.build
index 4c8c74ac54..fc65ebdce0 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -254,6 +254,7 @@ if host_machine.cpu_family() == 'aarch64'
   asm_path = 'arm64'
   param_path = 'arm64'
   flint_cv_have_fft_small_arm_i = 'yes'
+  flint_know_strong_order = 'no'
 
   # NOTE: Cortex values where taken from
   # https://developer.arm.com/Processors/Cortex-XXX
@@ -353,6 +354,7 @@ elif host_machine.cpu_family() == 'x86_64' and exact_cpu in X86_64_ADX_CPU_NAMES
   have_avx512 = 'no'
   have_avx2 = 'yes'
   flint_cv_have_fft_small_x86_i = 'yes'
+  flint_know_strong_order = 'yes'
 
   if exact_cpu == 'zen'
     gcc_cflags_arch = '-march=znver1'
@@ -460,6 +462,7 @@ elif host_machine.cpu_family() == 'x86_64'
 
   have_avx512 = 'no'
   have_avx2 = 'no'
+  flint_know_strong_order = 'yes'
 
   if exact_cpu in ['coreiibr', 'ivybridge']
     gcc_cflags_arch = '-march=ivybridge'
@@ -485,6 +488,9 @@ elif host_machine.cpu_family() == 'x86_64'
     gcc_cflags_arch = '-march=x86-64-v4'
     have_avx512 = 'yes'
 
+  else
+    flint_know_strong_order = 'no'
+
   endif
 
   if have_avx512 == 'yes'
@@ -505,6 +511,8 @@ else
 
   have_avx512 = 'no'
   have_avx2 = 'no'
+  flint_cv_have_fft_small_x86_i = 'no'
+  flint_know_strong_order = 'no'
 
 endif
 
@@ -644,9 +652,10 @@ if have_fft_small
     description: 'Define to use the fft_small module')
 endif
 
-# XXX: Need better CPU detection
-# cfg_data.set('FLINT_KNOW_STRONG_ORDER', 1,
-#   description: 'Define if system is strongly ordered')
+if flint_know_strong_order == 'yes'
+  cfg_data.set('FLINT_KNOW_STRONG_ORDER', 1,
+    description: 'Define if system is strongly ordered')
+endif
 
 if reentrant_opt.enabled()
   cfg_data.set('FLINT_REENTRANT', 1,

From 88baee40628a274b6ee623d3780eb7f53a58fe18 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 22 Jun 2024 14:28:24 +0100
Subject: [PATCH 35/36] Set FLINT_COVERAGE for coverage build

---
 _meson_build/Makefile | 4 ++--
 config/meson.build    | 6 ++++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/_meson_build/Makefile b/_meson_build/Makefile
index f7c024c34d..88907fd785 100644
--- a/_meson_build/Makefile
+++ b/_meson_build/Makefile
@@ -20,12 +20,12 @@ uninstall:
 
 test: setup
 	meson configure $(BUILDDIR) -Dtests=enabled
-	meson test -C $(BUILDDIR)
+	meson test -C $(BUILDDIR) --timeout-multiplier 10
 
 coverage: setup
 	# Coverage tool e.g. gcovr needs to be installed *before* meson configure:
 	#    pip install gcovr
 	meson configure $(BUILDDIR) -Dtests=enabled -Db_coverage=true
-	meson test -C $(BUILDDIR)
+	meson test -C $(BUILDDIR) --timeout-multiplier 10
 	cd $(BUILDDIR) && ninja coverage-html
 	# open $(BUILDDIR)/meson-logs/coveragereport/index.html
diff --git a/config/meson.build b/config/meson.build
index fc65ebdce0..3ff0b70173 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -24,6 +24,7 @@ fft_small_opt = get_option('fft_small')
 blas_opt = get_option('blas')
 gc_opt = get_option('gc')
 ntl_opt = get_option('ntl')
+coverage_opt = get_option('b_coverage')
 
 # -----------------------------------------------------------------------------
 #   Unsupported options
@@ -713,8 +714,9 @@ cfg_data_internal = cfg_data
 
 #cfg_data_internal.set('AC_APPLE_UNIVERSAL_BUILD', 1)
 
-# XXX: Change this when coverage options are added
-#cfg_data_internal.set('FLINT_COVERAGE', 1)
+if coverage_opt
+  cfg_data_internal.set('FLINT_COVERAGE', 1)
+endif
 
 if cc.has_header_symbol('stdlib.h', 'aligned_alloc')
   cfg_data_internal.set('HAVE_ALIGNED_ALLOC', 1,

From 162be8e283bae87fa0c5bfa87a5ceca823f187b6 Mon Sep 17 00:00:00 2001
From: Oscar Benjamin <oscar.j.benjamin@gmail.com>
Date: Sat, 22 Jun 2024 17:59:36 +0100
Subject: [PATCH 36/36] Add --with-ntl in meson build

---
 _meson_build/configure               | 24 ++++++++++++--------
 _meson_build/generate_meson_build.py | 34 ++++++++++++++++++++++++++++
 _meson_build/meson.build             |  3 ++-
 config/meson.build                   |  2 --
 4 files changed, 51 insertions(+), 12 deletions(-)

diff --git a/_meson_build/configure b/_meson_build/configure
index 2f0f34592c..2985c95bf3 100755
--- a/_meson_build/configure
+++ b/_meson_build/configure
@@ -53,6 +53,11 @@ def add_feature_option(parser, feature):
         choices=['yes', 'no', 'auto'], nargs='?', const='yes', action='store')
 
 
+def add_with_option(parser, libname, default):
+    parser.add_argument('--with-' + libname, help=f'Link to {libname}',
+        default=default, const=True, nargs='?')
+
+
 parser = ArgumentParser(description='Configure FLINT for building with meson')
 
 parser.add_argument('--build-dir', default='build.meson', help='Build directory')
@@ -83,12 +88,12 @@ add_feature_option(parser, 'assembly')
 add_feature_option(parser, 'avx2')
 add_feature_option(parser, 'avx512')
 
-parser.add_argument('--with-gmp', default=None, help='GMP install directory')
-parser.add_argument('--with-mpfr', default=None, help='MPFR install directory')
+add_with_option(parser, 'gmp', default=True)
+add_with_option(parser, 'mpfr', default=True)
+add_with_option(parser, 'ntl', default=False)
 
 parser.add_argument('--with-blas', default=None, help='Not supported...')
 parser.add_argument('--with-gc', default=None, help='Not supported...')
-parser.add_argument('--with-ntl', default=None, help='Not supported...')
 
 
 def get_meson_command_from_configure_args(args):
@@ -177,17 +182,18 @@ def get_meson_command_from_configure_args(args):
     elif do_avx2 is True or do_avx512 is True:
         setup_args.append('-Dfft_small=' + 'enabled')
 
-    if args.with_gmp is not None:
-        setup_args.append('--pkg-config-path=' + join(args.with_gmp, 'lib', 'pkgconfig'))
-    if args.with_mpfr is not None:
-        setup_args.append('--pkg-config-path=' + join(args.with_mpfr, 'lib', 'pkgconfig'))
+    for lib in ['gmp', 'mpfr', 'gc', 'ntl', 'blas']:
+        val = getattr(args, 'with_' + lib)
+        if isinstance(val, str):
+            setup_args.append('--pkg-config-path=' + join(val, 'lib', 'pkgconfig'))
+
+    if args.with_ntl:
+        setup_args.append('-Dntl=enabled')
 
     if args.with_blas is not None:
         raise ValueError('--with-blas is not supported')
     if args.with_gc is not None:
         raise ValueError('--with-gc is not supported')
-    if args.with_ntl is not None:
-        raise ValueError('--with-ntl is not supported')
 
     cmd = ['meson', 'setup', args.build_dir] + setup_args
     return cmd, args
diff --git a/_meson_build/generate_meson_build.py b/_meson_build/generate_meson_build.py
index 2e1805eb5b..2c77ba07ed 100644
--- a/_meson_build/generate_meson_build.py
+++ b/_meson_build/generate_meson_build.py
@@ -146,6 +146,10 @@
   headers_all += ['fft_small.h']
 endif
 
+if ntl_opt.enabled()
+  mod_tests += ['interfaces/test']
+endif
+
 headers_all = files(headers_all)
 '''
 
@@ -180,6 +184,29 @@
 test('%s', test_exe)
 '''
 
+
+test_mod_NTL_meson_build = '''\
+# This file is generated automatically.
+#
+# To regenerate it, run:
+#   python _meson_build/generate_meson_build.py
+#
+
+# NTL no found by pkgconfig
+cpp = meson.get_compiler('cpp')
+ntl_dep = cpp.find_library('ntl')
+
+test_exe = executable('main',
+  't-NTL-interface.cpp',
+  dependencies: flint_deps + [ntl_dep],
+  link_with: libflint,
+  include_directories: [headers_built_nodir_inc, '../..'],
+  install: false,
+)
+
+test('%s', test_exe)
+'''
+
 asm_submodule_arm64 = '''\
 
 asm_deps = [
@@ -327,6 +354,13 @@ def main(args):
                 print('Writing %s' % dst_path)
             write_file(dst_path, test_mod_meson_build_text)
 
+    # Build for the NTL tests
+    dst_path = join(args.output_dir, 'src', 'interfaces', 'test', 'meson.build')
+    test_mod_meson_build_text = test_mod_NTL_meson_build % 'NTL-interface'
+    if args.verbose:
+        print('Writing %s' % dst_path)
+    write_file(dst_path, test_mod_meson_build_text)
+
     # src/mpn_extras/*/meson.build
     for path, asm_submodule in asm_modules:
         asm_dir = join(args.output_dir, 'src', path)
diff --git a/_meson_build/meson.build b/_meson_build/meson.build
index fb81b3588e..375a229e3c 100644
--- a/_meson_build/meson.build
+++ b/_meson_build/meson.build
@@ -1,9 +1,10 @@
-project('FLINT', 'c',
+project('FLINT', 'c', 'cpp',
   version: '3.2.0-dev',
   license: 'LGPL3+',
   default_options: [
     'buildtype=release',
     'c_std=c11',
+    'cpp_std=c++11',
   ],
 )
 
diff --git a/config/meson.build b/config/meson.build
index 3ff0b70173..7a2a644ea8 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -38,8 +38,6 @@ elif blas_opt.enabled()
   error('BLAS support is not yet implemented')
 elif gc_opt.enabled()
   error('Garbage collection is not yet implemented')
-elif ntl_opt.enabled()
-  error('NTL support is not yet implemented')
 endif
 
 # -----------------------------------------------------------------------------