diff --git a/Makefile.in b/Makefile.in
index 1c7b55da8..ac1b4b27d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,801 +1,113 @@
-#
-# Copyright (C) 2023 Albin Ahlbäck
-#
-# This file is part of FLINT.
-#
-# FLINT is free software: you can redistribute it and/or modify it under
-# the terms of the GNU Lesser General Public License (LGPL) as published
-# by the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version. See .
-#
-
-FLINT_DIR:=.
-SRC_DIR:=src
-BUILD_DIR:=build
-ABS_FLINT_DIR:='$(patsubst %/,%, $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))'
-ABS_SRC_DIR:=$(ABS_FLINT_DIR)/$(SRC_DIR)
-ABS_BUILD_DIR:=$(ABS_FLINT_DIR)/$(SRC_DIR)
-
-FLINT_MAJOR:=@FLINT_MAJOR@
-FLINT_MINOR:=@FLINT_MINOR@
-FLINT_PATCH:=@FLINT_PATCH@
-FLINT_MAJOR_SO:=@FLINT_MAJOR_SO@
-FLINT_MINOR_SO:=@FLINT_MINOR_SO@
-FLINT_PATCH_SO:=@FLINT_PATCH_SO@
-
-FLINT_LIB:=@FLINT_LIB@
-FLINT_LIB_MAJOR:=@FLINT_LIB_MAJOR@
-FLINT_LIB_FULL:=@FLINT_LIB_FULL@
-FLINT_IMPLIB:=@FLINT_IMPLIB@
-FLINT_LIB_STATIC:=@FLINT_LIB_STATIC@
-
-FLINT_DLLLIB:=@FLINT_DLLLIB@
-FLINT_DYLIB:=@FLINT_DYLIB@
-FLINT_SOLIB:=@FLINT_SOLIB@
-
-prefix:=@prefix@
-exec_prefix:=@exec_prefix@
-
-INCLUDEDIR:=$(DESTDIR)@includedir@
-LIBDIR:=$(DESTDIR)@libdir@
-BINDIR:=$(DESTDIR)@bindir@
-PKGCONFIGDIR:=$(LIBDIR)/pkgconfig
-
-HOST_OS:=@host_os@
-
-EXEEXT:=@EXEEXT@
-
-AR:=@AR@
-CC:=@CC@
-CXX:=@CC@
-DLLTOOL:=@DLLTOOL@
-LD:=@LD@
-LDCONFIG:=@LDCONFIG@
-LN_S:=@LN_S@
-MKDIR_P:=@MKDIR_P@
-STRIP:=@STRIP@
-RM_F:=rm -f
-RM_RF:=rm -rf
-CP:=cp
-CP_A:=cp -a
-
-STATIC:=@STATIC@
-SHARED:=@SHARED@
-
-COVERAGE:=@COVERAGE@
-WANT_NTL:=@WANT_NTL@
-
-WANT_DEPS:=@WANT_DEPS@
-
-WANT_CXX:=@WANT_CXX@
-
-GMP_LIB_PATH:=@GMP_LIB_PATH@
-MPFR_LIB_PATH:=@MPFR_LIB_PATH@
-BLAS_LIB_PATH:=@BLAS_LIB_PATH@
-GC_LIB_PATH:=@GC_LIB_PATH@
-NTL_LIB_PATH:=@NTL_LIB_PATH@
-
-CFLAGS:=@CFLAGS@
-TESTCFLAGS:=@TESTCFLAGS@
-CPPFLAGS:=@CPPFLAGS@
-CPPFLAGS2:=-L$(FLINT_DIR) $(CPPFLAGS)
-LIB_CPPFLAGS:=@LIB_CPPFLAGS@
-CXXFLAGS:=@CXXFLAGS@
-LIBS:=@LIBS@
-LIBS2:=$(LIBS) -lflint
-PIC_FLAG:=@PIC_FLAG@
-
-LDFLAGS:=@LDFLAGS@
-EXTRA_SHARED_FLAGS:=@EXTRA_SHARED_FLAGS@ $(foreach path, $(GMP_LIB_PATH) $(MPFR_LIB_PATH) $(BLAS_LIB_PATH) $(GC_LIB_PATH) $(NTL_LIB_PATH), @WL@-rpath,$(path))
-EXE_LDFLAGS:=$(LDFLAGS) $(foreach path, $(ABS_FLINT_DIR) $(GMP_LIB_PATH) $(MPFR_LIB_PATH) $(BLAS_LIB_PATH) $(GC_LIB_PATH) $(NTL_LIB_PATH), @WL@-rpath,$(path))
-
-################################################################################
-################################################################################
-# files and directories
-################################################################################
-################################################################################
-
-################################################################################
-# configuration files
-################################################################################
-
-CFG_FILES := \
- $(FLINT_DIR)/config.log $(SRC_DIR)/flint-config.h \
- $(SRC_DIR)/fft_tuning.h $(FLINT_DIR)/flint.pc \
- $(FLINT_DIR)/Makefile $(SRC_DIR)/fmpz/fmpz.c
-
-################################################################################
-# directories
-################################################################################
-
-HEADLESS_DIRS := generic_files
-
-HEADER_DIRS := \
- thread_pool thread_support \
- \
- ulong_extras \
- long_extras \
- perm \
- double_extras d_vec d_mat \
- mpn_extras \
- mpf_vec mpf_mat \
- mpfr_vec mpfr_mat \
- nmod nmod_vec nmod_mat nmod_poly \
- fmpz fmpz_vec fmpz_mat fmpz_poly \
- fmpz_mod fmpz_mod_vec fmpz_mod_mat fmpz_mod_poly \
- fmpq fmpq_vec fmpq_mat fmpq_poly \
- \
- fq fq_vec fq_mat fq_poly \
- fq_nmod fq_nmod_vec fq_nmod_mat fq_nmod_poly \
- fq_zech fq_zech_mat fq_zech_poly \
- fq_default fq_default_mat fq_default_poly \
- fq_embed \
- fq_nmod_embed \
- fq_zech_embed \
- padic padic_mat padic_poly \
- qadic \
- \
- nmod_poly_factor fmpz_factor \
- fmpz_poly_factor fmpz_mod_poly_factor \
- fq_poly_factor fq_nmod_poly_factor \
- fq_zech_poly_factor fq_default_poly_factor \
- \
- nmod_poly_mat fmpz_poly_mat \
- \
- mpoly nmod_mpoly fmpz_mpoly fmpz_mod_mpoly \
- fmpq_mpoly fq_nmod_mpoly fq_zech_mpoly \
- \
- nmod_mpoly_factor fmpz_mpoly_factor \
- fmpz_mod_mpoly_factor fmpq_mpoly_factor \
- fq_nmod_mpoly_factor fq_zech_mpoly_factor \
- \
- fft @FFT_SMALL@ fmpz_poly_q fmpz_lll \
- n_poly arith qsieve aprcl \
- \
- nf nf_elem qfb \
- \
- double_interval dlog \
- fmpz_extras fmpzi \
- bool_mat partitions \
- mag \
- arf acf arb acb \
- arb_mat arb_poly arb_calc arb_hypgeom \
- acb_mat acb_poly acb_calc acb_hypgeom \
- arb_fmpz_poly arb_fpwrap \
- acb_dft acb_elliptic acb_modular acb_dirichlet \
- dirichlet bernoulli hypgeom \
- \
- gr gr_generic gr_vec gr_mat \
- gr_poly gr_mpoly gr_special \
- \
- calcium \
- fmpz_mpoly_q \
- fexpr fexpr_builtin \
- qqbar \
- ca ca_ext ca_field ca_vec \
- ca_poly ca_mat
-
-DIRS := $(HEADLESS_DIRS) $(HEADER_DIRS)
-
-TEMPLATE_DIRS := \
- fq_vec_templates fq_mat_templates \
- fq_poly_templates fq_poly_factor_templates \
- fq_embed_templates fq_templates
-
-BUILD_DIRS := \
- $(BUILD_DIR) \
- $(patsubst %, $(BUILD_DIR)/%, $(DIRS)) \
- $(patsubst %, $(BUILD_DIR)/%/profile, $(DIRS)) \
- $(patsubst %, $(BUILD_DIR)/%/test, $(DIRS)) \
- $(patsubst %, $(BUILD_DIR)/%/tune, $(DIRS)) \
- $(BUILD_DIR)/examples $(BUILD_DIR)/profile \
- $(BUILD_DIR)/test $(BUILD_DIR)/tune
-ifneq ($(WANT_NTL), 0)
-BUILD_DIRS += \
- $(BUILD_DIR)/interfaces $(BUILD_DIR)/interfaces/test
-endif
-ifneq ($(COVERAGE), 0)
-BUILD_DIRS += \
- $(BUILD_DIR)/coverage
-endif
-
-INSTALL_DIRS := \
- $(LIBDIR) $(INCLUDEDIR)/flint \
- $(PKGCONFIGDIR)
-ifneq ($(WANT_CXX),0)
-INSTALL_DIRS += $(INCLUDEDIR)/flint/flintxx
-endif
-ifneq ($(FLINT_DLLLIB),0)
-INSTALL_DIRS += $(BINDIR)
-endif
-
-################################################################################
-# headers
-################################################################################
-
-SINGLE_HEADERS := \
- flint.h longlong.h exception.h gmpcompat.h \
- hashmap.h profiler.h templates.h flint-config.h \
- fft_tuning.h \
- crt_helpers.h machine_vectors.h \
- \
- fq_zech_vec.h \
- \
- limb_types.h mpoly_types.h \
- fmpz_types.h fmpq_types.h \
- nmod_types.h fmpz_mod_types.h \
- fq_types.h fq_nmod_types.h \
- fq_zech_types.h \
- arf_types.h acf_types.h \
- arb_types.h acb_types.h
-ifneq ($(WANT_NTL), 0)
-SINGLE_HEADERS += NTL-interface.h
-endif
-
-HEADERS := $(patsubst %,$(SRC_DIR)/%, \
- $(patsubst %,%,$(SINGLE_HEADERS)) \
- $(patsubst %,%.h,$(HEADER_DIRS)) \
- $(patsubst %,%.h,$(TEMPLATE_DIRS)) \
- )
+## Makefile.in for flintxx, modeled after flint's
+
+# These point to the source directory
+abs_top_srcdir := @abs_top_srcdir@
+SRCDIR := $(abs_top_srcdir)/src
+BUILD_DIR := build
+TEST_BUILD_DIR := $(BUILD_DIR)/test
+EXAMPLE_BUILD_DIR := $(BUILD_DIR)/examples
+
+# These point to the source directory
+FLINTXX_SRCDIR := $(SRCDIR)/flintxx
+FLINTXX_PUBLIC_SRCDIR := $(SRCDIR)/flintxx_public
+
+# Build tools and flags from configure
+CXX := @CXX@
+EXEEXT := @EXEEXT@
+CPPFLAGS := @CPPFLAGS@
+CXXFLAGS := @CXXFLAGS@
+LDFLAGS := @LDFLAGS@
+LIBS := @LIBS@
+FLINT_CFLAGS := @FLINT_CFLAGS@
+FLINT_LIBS := @FLINT_LIBS@
+MKDIR_P := @MKDIR_P@
+INCLUDEDIR := @includedir@
+CP := cp
+RM_F := rm -f
+RM_RF := rm -rf
+
+# Installation directory
+INSTALL_DIR := $(DESTDIR)$(INCLUDEDIR)/flintxx
+
+# Our C++ flags
+AM_CPPFLAGS := -I$(FLINTXX_PUBLIC_SRCDIR) -I$(FLINTXX_SRCDIR) $(FLINT_CFLAGS)
+AM_LDFLAGS := $(LDFLAGS)
+AM_LIBS := $(LIBS) $(FLINT_LIBS)
################################################################################
# sources
################################################################################
-define xxx_SOURCES
-$(1)_SOURCES := $(wildcard $(SRC_DIR)/$(1)/*.c)
-endef
-$(foreach dir, $(DIRS), $(eval $(call xxx_SOURCES,$(dir))))
-SOURCES := $(foreach dir,$(DIRS),$($(dir)_SOURCES))
-# NOTE: We do not add CPP files to C files in SOURCES in order to not screw up
-# the `patsubst' in the object files.
-ifneq ($(WANT_NTL), 0)
-interfaces_SOURCES := $(SRC_DIR)/interfaces/NTL-interface.cpp
-endif
-
-define xxx_PROF_SOURCES
-$(1)_PROF_SOURCES := $(wildcard $(SRC_DIR)/$(1)/profile/*.c)
-endef
-_PROF_SOURCES := $(wildcard $(SRC_DIR)/profile/*.c)
-$(foreach dir, $(DIRS), $(eval $(call xxx_PROF_SOURCES,$(dir))))
-PROF_SOURCES := $(foreach dir,$(DIRS),$($(dir)_PROF_SOURCES)) $(_PROF_SOURCES)
-
-# FIXME: De-hardcode fq_zech_vec from this.
-fq_zech_vec_TEST_SOURCES := $(wildcard $(SRC_DIR)/fq_zech_vec/test/*.c)
-define xxx_TEST_SOURCES
-$(1)_TEST_SOURCES := $(wildcard $(SRC_DIR)/$(1)/test/*.c)
-endef
-_TEST_SOURCES := $(wildcard $(SRC_DIR)/test/*.c)
-$(foreach dir, $(DIRS), $(eval $(call xxx_TEST_SOURCES,$(dir))))
-TEST_SOURCES := $(foreach dir,$(DIRS),$($(dir)_TEST_SOURCES)) $(_TEST_SOURCES) $(fq_zech_vec_TEST_SOURCES)
-ifneq ($(WANT_NTL), 0)
-interfaces_TEST_SOURCES := $(SRC_DIR)/interfaces/test/t-NTL-interface.cpp
-endif
-
-define xxx_TUNE_SOURCES
-$(1)_TUNE_SOURCES := $(wildcard $(SRC_DIR)/$(1)/tune/*.c)
-endef
-_TUNE_SOURCES := $(wildcard $(SRC_DIR)/tune/*.c)
-$(foreach dir, $(DIRS), $(eval $(call xxx_TUNE_SOURCES,$(dir))))
-TUNE_SOURCES := $(foreach dir,$(DIRS),$($(dir)_TUNE_SOURCES)) $(_TUNE_SOURCES)
-
-EXMP_SOURCES := $(wildcard $(FLINT_DIR)/examples/*.c)
-
-################################################################################
-# objects
-################################################################################
-
-ifneq ($(STATIC), 0)
-define xxx_OBJS
-$(1)_OBJS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$($(1)_SOURCES))
-endef
-$(foreach dir, $(DIRS), $(eval $(call xxx_OBJS,$(dir))))
-OBJS := $(foreach dir, $(DIRS), $($(dir)_OBJS))
-ifneq ($(WANT_NTL), 0)
-OBJS += $(BUILD_DIR)/interfaces/NTL-interface.o
-endif
-endif
-
-################################################################################
-# library objects
-################################################################################
-
-ifneq ($(SHARED), 0)
-define xxx_LOBJS
-$(1)_LOBJS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.lo,$($(1)_SOURCES))
-endef
-$(foreach dir, $(DIRS), $(eval $(call xxx_LOBJS,$(dir))))
-LOBJS := $(foreach dir, $(DIRS), $($(dir)_LOBJS))
-ifneq ($(WANT_NTL), 0)
-LOBJS += $(BUILD_DIR)/interfaces/NTL-interface.lo
-endif
-endif
-
-################################################################################
-# executables
-################################################################################
-
-define xxx_PROFS
-$(1)_PROFS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%$(EXEEXT),$($(1)_PROF_SOURCES))
-endef
-_PROFS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%$(EXEEXT),$(_PROF_SOURCES))
-$(foreach dir, $(DIRS), $(eval $(call xxx_PROFS,$(dir))))
-PROFS := $(foreach dir,$(DIRS),$($(dir)_PROFS)) $(_PROFS)
-
-define xxx_TESTS
-$(1)_TESTS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%$(EXEEXT),$($(1)_TEST_SOURCES))
-endef
-_TESTS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%$(EXEEXT),$(_TEST_SOURCES))
-ifneq ($(WANT_NTL), 0)
-interfaces_TESTS := $(BUILD_DIR)/interfaces/test/t-NTL-interface$(EXEEXT)
-endif
-$(foreach dir, $(DIRS), $(eval $(call xxx_TESTS,$(dir))))
-TESTS := $(foreach dir,$(DIRS),$($(dir)_TESTS)) $(_TESTS) $(interfaces_TESTS)
-
-define xxx_TUNES
-$(1)_TUNES := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%$(EXEEXT),$($(1)_TUNE_SOURCES))
-endef
-_TUNES := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%$(EXEEXT),$(_TUNE_SOURCES))
-$(foreach dir, $(DIRS), $(eval $(call xxx_TUNES,$(dir))))
-TUNES := $(foreach dir,$(DIRS),$($(dir)_TUNES)) $(_TUNES)
-
-EXMPS := $(patsubst $(FLINT_DIR)/%.c,$(BUILD_DIR)/%$(EXEEXT),$(EXMP_SOURCES))
-
-################################################################################
-################################################################################
-# recipes
-################################################################################
-################################################################################
-
-################################################################################
-# main recipe
-################################################################################
-
-all: library
-
-################################################################################
-# library
-################################################################################
-
-ifneq ($(SHARED), 0)
-library: shared
-endif
-ifneq ($(STATIC), 0)
-library: static
-endif
+TEST_SOURCES_CPP := $(wildcard $(FLINTXX_SRCDIR)/test/*.cpp)
+TEST_SOURCES_CC := $(filter-out $(FLINTXX_SRCDIR)/test/t-compiler-errors.cc, $(wildcard $(FLINTXX_SRCDIR)/test/*.cc))
+TEST_SOURCES := $(TEST_SOURCES_CPP) $(TEST_SOURCES_CC)
-ifneq ($(SHARED), 0)
-shared: $(FLINT_DIR)/$(FLINT_LIB_FULL)
-
-# The following is to avoid reaching the maximum length of command line
-# arguments, mainly present on MinGW.
-define xxx_merged_lobj_rule
-$(BUILD_DIR)/$(1)_merged.lo: $($(1)_LOBJS) | $(BUILD_DIR)
- @$(LD) -r $($(1)_LOBJS) -o $(BUILD_DIR)/$(1)_merged.lo
-endef
-$(foreach dir, $(DIRS), $(eval $(call xxx_merged_lobj_rule,$(dir))))
-MERGED_LOBJS:=$(foreach dir, $(DIRS),$(BUILD_DIR)/$(dir)_merged.lo)
-
-$(FLINT_DIR)/$(FLINT_LIB_FULL): $(MERGED_LOBJS)
- $(CC) $(CFLAGS) -shared $(EXTRA_SHARED_FLAGS) $(MERGED_LOBJS) -o $(FLINT_LIB_FULL) $(LDFLAGS) $(LIBS)
-ifneq ($(FLINT_SOLIB), 0)
- $(LDCONFIG) -n .
-endif
- $(RM_F) $(FLINT_LIB)
- $(RM_F) $(FLINT_LIB_MAJOR)
- $(LN_S) $(FLINT_LIB_FULL) $(FLINT_LIB)
- $(LN_S) $(FLINT_LIB_FULL) $(FLINT_LIB_MAJOR)
-endif
-
-ifneq ($(STATIC), 0)
-static: $(FLINT_DIR)/$(FLINT_LIB_STATIC)
-
-# The following is to avoid reaching the maximum length of command line
-# arguments, mainly present on MinGW.
-define xxx_merged_obj_rule
-$(BUILD_DIR)/$(1)_merged.o: $($(1)_OBJS) | $(BUILD_DIR)
- @$(LD) -r $($(1)_OBJS) -o $(BUILD_DIR)/$(1)_merged.o
-endef
-$(foreach dir, $(DIRS), $(eval $(call xxx_merged_obj_rule,$(dir))))
-MERGED_OBJS:=$(foreach dir, $(DIRS),$(BUILD_DIR)/$(dir)_merged.o)
-
-$(FLINT_DIR)/$(FLINT_LIB_STATIC): $(MERGED_OBJS)
- $(AR) rcs $(FLINT_DIR)/$(FLINT_LIB_STATIC) $(MERGED_OBJS)
-endif
-
-################################################################################
-# directories
-################################################################################
-
-$(BUILD_DIRS) $(INSTALL_DIRS):
- $(MKDIR_P) $@
+EXAMPLE_SOURCES := $(wildcard $(FLINTXX_SRCDIR)/examples/*.cpp)
################################################################################
-# inclusions
-################################################################################
-
-ifneq ($(WANT_DEPS), 0)
-
-ifeq ($(words $(MAKECMDGOALS)), 0)
-
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
-
-else ifeq ($(words $(MAKECMDGOALS)), 1)
-
-ifeq ($(MAKECMDGOALS), clean)
-# Include nothing
-else ifeq ($(MAKECMDGOALS), dist)
-# Include nothing
-else ifeq ($(MAKECMDGOALS), distclean)
-# Include nothing
-else ifeq ($(MAKECMDGOALS), uninstall)
-# Include nothing
-else ifeq ($(findstring print-,$(MAKECMDGOALS)), print-)
-# Include nothing
-else ifeq ($(MAKECMDGOALS), static)
--include $(BUILD_DIR)/*/*.o.d
-else ifeq ($(MAKECMDGOALS), shared)
--include $(BUILD_DIR)/*/*.lo.d
-else ifeq ($(MAKECMDGOALS), library)
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
-else ifeq ($(MAKECMDGOALS), install)
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
-else ifeq ($(MAKECMDGOALS), examples)
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/examples/*.d
-else ifeq ($(MAKECMDGOALS), profile)
-ifdef MOD
-$(warning Dependency tracking only set to cover the profile executables of $(MOD).)
--include $(foreach dir, $(MOD), $(BUILD_DIR)/$(dir)/profile/*.d)
-else
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/profile/*.d
--include $(BUILD_DIR)/*/profile/*.d
-endif
-else ifeq ($(MAKECMDGOALS), tests)
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/test/*.d
--include $(BUILD_DIR)/*/test/*.d
-else ifeq ($(MAKECMDGOALS), check)
-ifdef MOD
-$(warning Dependency tracking only set to cover the test executables of $(MOD).)
--include $(foreach dir, $(MOD), $(BUILD_DIR)/$(dir)/test/*.d)
-else
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/test/*.d
--include $(BUILD_DIR)/*/test/*.d
-endif
-else ifeq ($(MAKECMDGOALS), tune)
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/tune/*.d
--include $(BUILD_DIR)/*/tune/*.d
-else ifeq ($(MAKECMDGOALS), valgrind)
-ifdef MOD
-$(warning Dependency tracking only set to cover the test executables of $(MOD).)
--include $(foreach dir, $(MOD), $(BUILD_DIR)/$(dir)/test/*.d)
-else
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/test/*.d
--include $(BUILD_DIR)/*/test/*.d
-endif
-else
-# Cannot recognize the command, so we simply include everything
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/test/*.d
--include $(BUILD_DIR)/*/test/*.d
--include $(BUILD_DIR)/profile/*.d
--include $(BUILD_DIR)/*/profile/*.d
--include $(BUILD_DIR)/examples/*.d
-endif
-
-else
-
-# Multiple goals. Not currently implemented, so simply include everything.
--include $(BUILD_DIR)/*/*.o.d
--include $(BUILD_DIR)/*/*.lo.d
--include $(BUILD_DIR)/test/*.d
--include $(BUILD_DIR)/*/test/*.d
--include $(BUILD_DIR)/profile/*.d
--include $(BUILD_DIR)/*/profile/*.d
--include $(BUILD_DIR)/examples/*.d
-
-endif
-
-endif
-
-################################################################################
-# objects
-################################################################################
-
-ifneq ($(STATIC), 0)
-define xxx_OBJS_rule
-$(BUILD_DIR)/$(1)/%.o: $(SRC_DIR)/$(1)/%.c | $(BUILD_DIR)/$(1)
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(CFLAGS) $(CPPFLAGS) $(LIB_CPPFLAGS) -c $$< -o $$@ -MMD -MF $$(@:%=%.d)
-endef
-
-$(foreach dir, $(DIRS), $(eval $(call xxx_OBJS_rule,$(dir))))
-
-ifneq ($(WANT_NTL), 0)
-$(BUILD_DIR)/interfaces/NTL-interface.o: $(SRC_DIR)/interfaces/test/t-NTL-interface.cpp | $(BUILD_DIR)/interfaces
- @echo " CXX $(@:$(BUILD_DIR)/%=%)"
- @$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LIB_CPPFLAGS) -c $< -o $@ -MMD -MF $(@:%=%.d)
-endif
-endif
-
-################################################################################
-# library objects
+# headers
################################################################################
-
-ifneq ($(SHARED), 0)
-define xxx_LOBJS_rule
-$(BUILD_DIR)/$(1)/%.lo: $(SRC_DIR)/$(1)/%.c | $(BUILD_DIR)/$(1)
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(PIC_FLAG) $(CFLAGS) $(CPPFLAGS) $(LIB_CPPFLAGS) -c $$< -o $$@ -MMD -MF $$(@:%=%.d)
-endef
-
-$(foreach dir, $(DIRS), $(eval $(call xxx_LOBJS_rule,$(dir))))
-
-ifneq ($(WANT_NTL), 0)
-$(BUILD_DIR)/interfaces/NTL-interface.lo: $(SRC_DIR)/interfaces/test/t-NTL-interface.cpp | $(BUILD_DIR)/interfaces
- @echo " CXX $(@:$(BUILD_DIR)/%=%)"
- @$(CXX) $(PIC_FLAG) $(CXXFLAGS) $(CPPFLAGS) $(LIB_CPPFLAGS) -c $< -o $@ -MMD -MF $(@:%=.d)
-endif
-endif
+FLINTXX_HEADERS_PUBLIC := $(wildcard $(FLINTXX_PUBLIC_SRCDIR)/*.h)
+FLINTXX_HEADERS_PRIVATE := $(wildcard $(FLINTXX_SRCDIR)/*.h)
################################################################################
# executables
################################################################################
-ifeq ($(SHARED), 0)
-$(BUILD_DIR)/profile/%$(EXEEXT): $(SRC_DIR)/profile/%.c $(FLINT_DIR)/$(FLINT_LIB_STATIC) | $(BUILD_DIR)/profile
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-else
-$(BUILD_DIR)/profile/%$(EXEEXT): $(SRC_DIR)/profile/%.c | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/profile
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-endif
-
-ifeq ($(SHARED), 0)
-define xxx_PROFS_rule
-$(BUILD_DIR)/$(1)/profile/%$(EXEEXT): $(SRC_DIR)/$(1)/profile/%.c $(FLINT_DIR)/$(FLINT_LIB_STATIC) | $(BUILD_DIR)/$(1)/profile
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $$< -o $$@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $$(@:%=%.d)
-endef
-else
-define xxx_PROFS_rule
-$(BUILD_DIR)/$(1)/profile/%$(EXEEXT): $(SRC_DIR)/$(1)/profile/%.c | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/$(1)/profile
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $$< -o $$@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $$(@:%=%.d)
-endef
-endif
-
-$(foreach dir, $(DIRS), $(eval $(call xxx_PROFS_rule,$(dir))))
-
-ifeq ($(SHARED), 0)
-$(BUILD_DIR)/test/%$(EXEEXT): $(SRC_DIR)/test/%.c $(FLINT_DIR)/$(FLINT_LIB_STATIC) | $(BUILD_DIR)/test
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-else
-$(BUILD_DIR)/test/%$(EXEEXT): $(SRC_DIR)/test/%.c | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/test
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-endif
-
-ifeq ($(SHARED), 0)
-define xxx_TESTS_rule
-$(BUILD_DIR)/$(1)/test/%$(EXEEXT): $(SRC_DIR)/$(1)/test/%.c $(FLINT_DIR)/libflint.a | $(BUILD_DIR)/$(1)/test
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $$< -o $$@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $$(@:%=%.d)
-endef
-else
-define xxx_TESTS_rule
-$(BUILD_DIR)/$(1)/test/%$(EXEEXT): $(SRC_DIR)/$(1)/test/%.c | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/$(1)/test
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $$< -o $$@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $$(@:%=%.d)
-endef
-endif
-
-$(foreach dir, $(DIRS), $(eval $(call xxx_TESTS_rule,$(dir))))
+TESTS_FROM_CPP := $(patsubst $(FLINTXX_SRCDIR)/test/%.cpp,$(TEST_BUILD_DIR)/%$(EXEEXT),$(TEST_SOURCES_CPP))
+TESTS_FROM_CC := $(patsubst $(FLINTXX_SRCDIR)/test/%.cc,$(TEST_BUILD_DIR)/%$(EXEEXT),$(TEST_SOURCES_CC))
+TESTS := $(TESTS_FROM_CPP) $(TESTS_FROM_CC)
+TEST_RUNS := $(TESTS:%=%_TEST_RUN)
-ifneq ($(WANT_NTL), 0)
-ifeq ($(SHARED), 0)
-$(BUILD_DIR)/interfaces/test/t-NTL-interface$(EXEEXT): $(SRC_DIR)/interfaces/test/t-NTL-interface.cpp $(FLINT_DIR)/$(FLINT_LIB_STATIC) | $(BUILD_DIR)/interfaces/test
- @echo " CXX $(@:$(BUILD_DIR)/%=%)"
- @$(CXX) $(CXXFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-else
-$(BUILD_DIR)/interfaces/test/t-NTL-interface$(EXEEXT): $(SRC_DIR)/interfaces/test/t-NTL-interface.cpp | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/interfaces/test
- @echo " CXX $(@:$(BUILD_DIR)/%=%)"
- @$(CXX) $(CXXFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-endif
-endif
+EXAMPLES := $(patsubst $(FLINTXX_SRCDIR)/examples/%.cpp,$(EXAMPLE_BUILD_DIR)/%$(EXEEXT),$(EXAMPLE_SOURCES))
-ifeq ($(SHARED), 0)
-$(BUILD_DIR)/tune/%$(EXEEXT): $(SRC_DIR)/tune/%.c $(FLINT_DIR)/$(FLINT_LIB_STATIC) | $(BUILD_DIR)/tune
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-else
-$(BUILD_DIR)/tune/%$(EXEEXT): $(SRC_DIR)/tune/%.c | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/tune
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-endif
+# Targets
+all: examples
-ifeq ($(SHARED), 0)
-define xxx_TUNES_rule
-$(BUILD_DIR)/$(1)/tune/%$(EXEEXT): $(SRC_DIR)/$(1)/tune/%.c $(FLINT_DIR)/$(FLINT_LIB_STATIC) | $(BUILD_DIR)/$(1)/tune
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $$< -o $$@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $$(@:%=%.d)
-endef
-else
-define xxx_TUNES_rule
-$(BUILD_DIR)/$(1)/tune/%$(EXEEXT): $(SRC_DIR)/$(1)/tune/%.c | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/$(1)/tune
- @echo " CC $$(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $$< -o $$@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $$(@:%=%.d)
-endef
-endif
+examples: $(EXAMPLES)
-$(foreach dir, $(DIRS), $(eval $(call xxx_TUNES_rule,$(dir))))
+tests: $(TESTS)
-ifeq ($(SHARED), 0)
-$(BUILD_DIR)/examples/%$(EXEEXT): $(FLINT_DIR)/examples/%.c $(FLINT_DIR)/$(FLINT_LIB_STATIC) | $(BUILD_DIR)/examples
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-else
-$(BUILD_DIR)/examples/%$(EXEEXT): $(FLINT_DIR)/examples/%.c | $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BUILD_DIR)/examples
- @echo " CC $(@:$(BUILD_DIR)/%=%)"
- @$(CC) $(TESTCFLAGS) $(CPPFLAGS2) $< -o $@ $(EXE_LDFLAGS) $(LIBS2) -MMD -MF $(@:%=%.d)
-endif
+check: tests $(TEST_RUNS)
+ @echo
+ @echo "All tests passed."
-################################################################################
-# examples
-################################################################################
-
-examples: library $(EXMPS)
-
-################################################################################
-# profiling
-################################################################################
-
-ifdef MOD
-profile: library $(foreach dir, $(MOD), $($(dir)_PROFS))
-else
-profile: library $(PROFS)
-endif
-
-################################################################################
-# tests
-################################################################################
-
-tests: library $(TESTS)
-
-# NOTE: File has to be located in another directory in order for this to work.
%_TEST_RUN: %
- @$<
-
-ifdef PYTHON
-check: library
- PYTHONPATH=$(FLINT_DIR) python3 $(SRC_DIR)/python/flint_ctypes.py
-else ifdef MOD
-check: library $(patsubst %,%_TEST_RUN,$(foreach dir, $(MOD), $($(dir)_TESTS)))
-else
-check: library $(TESTS:%=%_TEST_RUN)
-endif
-
-################################################################################
-# tuning
-################################################################################
-
-tune: library $(TUNES)
-
-################################################################################
-# valgrind
-################################################################################
+ @echo "Running $<..."
+ @./$<
-%_VALGRIND_RUN: %
- valgrind --track-origins=yes --leak-check=full --show-reachable=yes --log-file="$*.valgrind" $<
+# Rules for building
+$(TESTS_FROM_CPP): $(TEST_BUILD_DIR)/%$(EXEEXT): $(FLINTXX_SRCDIR)/test/%.cpp | $(TEST_BUILD_DIR)
+ $(CXX) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< -o $@ $(AM_LDFLAGS) $(AM_LIBS)
-ifdef MOD
-valgrind: library $(patsubst %,%_VALGRIND_RUN,$(foreach dir, $(MOD), $($(dir)_TESTS)))
-else
-valgrind: library $(TESTS:%=%_VALGRIND_RUN)
-endif
+$(TESTS_FROM_CC): $(TEST_BUILD_DIR)/%$(EXEEXT): $(FLINTXX_SRCDIR)/test/%.cc | $(TEST_BUILD_DIR)
+ $(CXX) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< -o $@ $(AM_LDFLAGS) $(AM_LIBS)
-################################################################################
-# coverage
-################################################################################
+$(EXAMPLES): $(EXAMPLE_BUILD_DIR)/%$(EXEEXT): $(FLINTXX_SRCDIR)/examples/%.cpp | $(EXAMPLE_BUILD_DIR)
+ $(CXX) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $< -o $@ $(AM_LDFLAGS) $(AM_LIBS)
-ifneq ($(COVERAGE), 0)
-coverage: | $(BUILD_DIR)/coverage
- lcov --capture --exclude "*test/t-*.c" --exclude "/usr/*" --directory $(BUILD_DIR) --output-file $(BUILD_DIR)/coverage/coverage.info
- genhtml $(BUILD_DIR)/coverage/coverage.info --output-directory $(BUILD_DIR)/coverage
-endif
+# Create build directories
+$(TEST_BUILD_DIR) $(EXAMPLE_BUILD_DIR):
+ $(MKDIR_P) $@
-################################################################################
-# clean
-################################################################################
+$(INSTALL_DIR):
+ $(MKDIR_P) $@
+# Clean up build artifacts
clean:
- $(RM_F) $(FLINT_DIR)/$(FLINT_LIB)
- $(RM_F) $(FLINT_DIR)/$(FLINT_LIB_MAJOR)
- $(RM_F) $(FLINT_DIR)/$(FLINT_LIB_FULL)
-ifneq ($(FLINT_DLLLIB), 0)
- $(RM_F) $(FLINT_DIR)/$(FLINT_IMPLIB)
-endif
- $(RM_F) $(FLINT_DIR)/$(FLINT_LIB_STATIC)
$(RM_RF) $(BUILD_DIR)
distclean: clean
- $(RM_F) $(CFG_FILES)
-
-################################################################################
-# install and uninstall
-################################################################################
+ $(RM_F) Makefile config.status config.log config.h
-install: library | $(INSTALL_DIRS)
- $(CP) flint.pc $(PKGCONFIGDIR)/flint.pc
-ifneq ($(SHARED), 0)
-ifneq ($(FLINT_DLLLIB),0)
- $(CP_A) $(FLINT_DIR)/$(FLINT_LIB) $(BINDIR)
- $(CP_A) $(FLINT_DIR)/$(FLINT_LIB_MAJOR) $(BINDIR)
- $(CP_A) $(FLINT_DIR)/$(FLINT_LIB_FULL) $(BINDIR)
- $(CP) $(FLINT_DIR)/$(FLINT_IMPLIB) $(LIBDIR)
-else
- $(CP_A) $(FLINT_DIR)/$(FLINT_LIB) $(LIBDIR)
- $(CP_A) $(FLINT_DIR)/$(FLINT_LIB_MAJOR) $(LIBDIR)
- $(CP_A) $(FLINT_DIR)/$(FLINT_LIB_FULL) $(LIBDIR)
-endif
-ifneq ($(FLINT_DYLIB),0)
- install_name_tool -id $(LIBDIR)/$(FLINT_LIB_FULL) $(LIBDIR)/$(FLINT_LIB)
-endif
-endif
-ifneq ($(STATIC), 0)
- $(CP) $(FLINT_DIR)/$(FLINT_LIB_STATIC) $(LIBDIR)
-endif
- $(CP) $(HEADERS) $(INCLUDEDIR)/flint
-ifneq ($(WANT_CXX), 0)
- $(CP) $(SRC_DIR)/flintxx/*.h $(INCLUDEDIR)/flint/flintxx
- $(CP) $(SRC_DIR)/flintxx_public/*xx.h $(INCLUDEDIR)/flint
-endif
+install: | $(INSTALL_DIR)
+ $(CP) $(FLINTXX_HEADERS_PUBLIC) $(INSTALL_DIR)
+ $(CP) $(FLINTXX_HEADERS_PRIVATE) $(INSTALL_DIR)
uninstall:
- $(RM_F) $(PKGCONFIGDIR)/flint.pc
-ifneq ($(FLINT_DLLLIB),0)
- $(RM_F) $(BINDIR)/$(FLINT_LIB)
- $(RM_F) $(BINDIR)/$(FLINT_LIB_MAJOR)
- $(RM_F) $(BINDIR)/$(FLINT_LIB_FULL)
- $(RM_F) $(LIBDIR)/$(FLINT_IMPLIB)
-else
- $(RM_F) $(LIBDIR)/$(FLINT_LIB)
- $(RM_F) $(LIBDIR)/$(FLINT_LIB_MAJOR)
- $(RM_F) $(LIBDIR)/$(FLINT_LIB_FULL)
-endif
- $(RM_F) $(LIBDIR)/$(FLINT_LIB_STATIC)
- $(RM_RF) $(INCLUDEDIR)/flint
-
-################################################################################
-# maintainer stuff
-################################################################################
-
-dist:
- git archive --format tar --prefix flint-$(FLINT_MAJOR).$(FLINT_MINOR).$(FLINT_PATCH)/ origin/flint-$(FLINT_MAJOR).$(FLINT_MINOR) > ../flint-$(FLINT_MAJOR).$(FLINT_MINOR).$(FLINT_PATCH).tar; gzip ../flint-$(FLINT_MAJOR).$(FLINT_MINOR).$(FLINT_PATCH).tar
- git archive --format zip --prefix flint-$(FLINT_MAJOR).$(FLINT_MINOR).$(FLINT_PATCH)/ origin/flint-$(FLINT_MAJOR).$(FLINT_MINOR) > ../flint-$(FLINT_MAJOR).$(FLINT_MINOR).$(FLINT_PATCH).zip
-
-################################################################################
-# debugging
-################################################################################
+ $(RM_RF) $(INSTALL_DIR)
print-%:
- @echo "$*=$($*)"
+ @echo "$* = $($*)"
-.PHONY: all library shared static examples profile tests check tune valgrind clean distclean install uninstall dist %_TEST_RUN %_VALGRIND_RUN print-% coverage
+.PHONY: all examples tests check clean distclean install uninstall %_TEST_RUN print-%
\ No newline at end of file
diff --git a/src/flintxx/evaluation_tools.h b/src/flintxx/evaluation_tools.h
index 8d69b5871..c84309b19 100644
--- a/src/flintxx/evaluation_tools.h
+++ b/src/flintxx/evaluation_tools.h
@@ -11,17 +11,21 @@
// This file contains helpers for evaluating expression templates.
-#ifndef CXX_EVALUATION_TOOLS_H
-#define CXX_EVALUATION_TOOLS_H
+#ifndef EVALUATION_TOOLS_H
+#define EVALUATION_TOOLS_H
#include
+#include
+#include
-#include "../flint.h" // FLINT_MAX and FLINT_MIN
+#include // FLINT_MAX and FLINT_MIN
+#include // fmpz_t
-#include "expression_traits.h"
-#include "mp.h"
-#include "rules.h"
-#include "tuple.h"
+#include
+#include
+#include
+#include
+#include
namespace flint {
namespace mp {
diff --git a/src/flintxx/flint_classes.h b/src/flintxx/flint_classes.h
index 5cd1e6194..23e2778ab 100644
--- a/src/flintxx/flint_classes.h
+++ b/src/flintxx/flint_classes.h
@@ -13,7 +13,7 @@
// Contrary to other parts of this library, they are tailored very
// specifically towards FLINT.
-#include "../flint.h"
+#include
#include "mp.h"
#include "expression.h"
#include "expression_traits.h"
diff --git a/src/flintxx/frandxx.h b/src/flintxx/frandxx.h
index f04aadf99..22c4737ec 100644
--- a/src/flintxx/frandxx.h
+++ b/src/flintxx/frandxx.h
@@ -9,10 +9,17 @@
(at your option) any later version. See .
*/
-#ifndef CXX_FRANDXX_H
-#define CXX_FRANDXX_H
+#ifndef FRANDXX_H
+#define FRANDXX_H
-#include "../flint.h"
+#include
+
+#include
+#include
+#include
+
+#include
+#include
// This class contains a first-class wrapper of flint_rand_t.
// Note that frandxx is not copyable.
diff --git a/src/flintxx/test/helpers.h b/src/flintxx/test/helpers.h
index 095c38a79..381057c60 100644
--- a/src/flintxx/test/helpers.h
+++ b/src/flintxx/test/helpers.h
@@ -9,16 +9,30 @@
(at your option) any later version. See .
*/
-#ifndef CXX_TEST_HELPERS_H
-#define CXX_TEST_HELPERS_H
+#ifndef HELPERS_H
+#define HELPERS_H
#include
#include
#include
#include
#include
-
-#include "flintxx/flint_classes.h"
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "myint.h"
#ifndef EXIT_STATEMENT
#define EXIT_STATEMENT std::exit(1)
diff --git a/src/flintxx/test/t-codegen.cpp b/src/flintxx/test/t-codegen.cpp
index eecceb5ad..efa079115 100644
--- a/src/flintxx/test/t-codegen.cpp
+++ b/src/flintxx/test/t-codegen.cpp
@@ -15,6 +15,7 @@
#include
#include
#include
+#include
// whether or not the compiler suppors __attribute__(__optimize__(..))
@@ -58,17 +59,24 @@ class skippable_exception
skippable_exception(const std::string& n) : std::runtime_error(n) {}
};
-#include "flintxx/test/helpers.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
-#include "fmpz_matxx.h"
-#include "fmpz_polyxx.h"
-#include "fmpzxx.h"
-#include "nmod_matxx.h"
-#include "nmod_polyxx.h"
-#include "nmod_vecxx.h"
+#include "helpers.h"
-#include "flintxx/tuple.h"
-#include "flintxx/vector.h"
+#include
+#include
+
+#include
+#include
// Run a command and recver the output.
std::string exec(const std::string& cmd)
diff --git a/src/flintxx/test/t-dummy.c b/src/flintxx/test/t-dummy.c
deleted file mode 100644
index aff0885ad..000000000
--- a/src/flintxx/test/t-dummy.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Empty file to keep MinGW happy */
-
-int main(void)
-{
- return 0;
-}
-
diff --git a/src/flintxx/test/t-expression.cpp b/src/flintxx/test/t-expression.cpp
index d2fac5374..8af849dc1 100644
--- a/src/flintxx/test/t-expression.cpp
+++ b/src/flintxx/test/t-expression.cpp
@@ -9,9 +9,13 @@
(at your option) any later version. See .
*/
-#include
+#include
+#include
+
+#include
+#include
+#include
-#include "flintxx/expression.h"
#include "flintxx/tuple.h"
#include "flintxx/test/helpers.h"
diff --git a/src/flintxx/test/t-flint_classes.cpp b/src/flintxx/test/t-flint_classes.cpp
index ee45a3791..50b6cd27c 100644
--- a/src/flintxx/test/t-flint_classes.cpp
+++ b/src/flintxx/test/t-flint_classes.cpp
@@ -10,8 +10,13 @@
*/
#include
-#include "flintxx/test/helpers.h"
-#include "fmpzxx.h"
+#include
+#include
+
+#include "helpers.h"
+
+#include
+#include
using namespace flint;
diff --git a/src/flintxx/test/t-forwarding.cpp b/src/flintxx/test/t-forwarding.cpp
index 7bd31b32c..fceb84d80 100644
--- a/src/flintxx/test/t-forwarding.cpp
+++ b/src/flintxx/test/t-forwarding.cpp
@@ -13,12 +13,16 @@
// test file.
#include
+#include
+#include
#include
-#include "flintxx/forwarding.h"
+#include
+#include
+#include
-#include "flintxx/test/myint.h"
-#include "flintxx/test/helpers.h"
+#include "helpers.h"
+#include "myint.h"
using namespace flint;
diff --git a/src/flintxx/test/t-ltuple.cpp b/src/flintxx/test/t-ltuple.cpp
index 6d796be3f..f0a403575 100644
--- a/src/flintxx/test/t-ltuple.cpp
+++ b/src/flintxx/test/t-ltuple.cpp
@@ -9,11 +9,13 @@
(at your option) any later version. See .
*/
-#include "flintxx/ltuple.h"
-#include "fmpzxx.h"
+#include
-#include "flintxx/test/helpers.h"
-#include "flintxx/test/myint.h"
+#include
+#include
+
+#include "helpers.h"
+#include "myint.h"
using namespace flint;
diff --git a/src/flintxx/test/t-mp.cpp b/src/flintxx/test/t-mp.cpp
index c6c01164c..c89ab12f7 100644
--- a/src/flintxx/test/t-mp.cpp
+++ b/src/flintxx/test/t-mp.cpp
@@ -9,8 +9,11 @@
(at your option) any later version. See .
*/
-#include "flintxx/test/helpers.h"
-#include "flintxx/mp.h"
+#include
+
+#include "helpers.h"
+#include
+#include "myint.h"
using namespace flint;
using namespace mp;
diff --git a/src/flintxx/test/t-permxx.cpp b/src/flintxx/test/t-permxx.cpp
index fe2f310dc..c56449ddc 100644
--- a/src/flintxx/test/t-permxx.cpp
+++ b/src/flintxx/test/t-permxx.cpp
@@ -10,9 +10,13 @@
*/
#include
+#include
+#include
-#include "permxx.h"
-#include "flintxx/test/helpers.h"
+#include
+#include
+
+#include "helpers.h"
using namespace flint;
diff --git a/src/flintxx/test/t-traits.cpp b/src/flintxx/test/t-traits.cpp
index 95325a4fd..1790a8fa6 100644
--- a/src/flintxx/test/t-traits.cpp
+++ b/src/flintxx/test/t-traits.cpp
@@ -9,9 +9,20 @@
(at your option) any later version. See .
*/
-#include "flintxx/test/helpers.h"
-#include "flintxx/traits.h"
-#include "flintxx/mp.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "helpers.h"
+
+#include
+#include
using namespace flint;
using namespace traits;
diff --git a/src/flintxx/test/t-tuple.cpp b/src/flintxx/test/t-tuple.cpp
index a9e399323..1a2aca302 100644
--- a/src/flintxx/test/t-tuple.cpp
+++ b/src/flintxx/test/t-tuple.cpp
@@ -9,11 +9,20 @@
(at your option) any later version. See .
*/
+#include
+#include
#include
-#include "flintxx/test/helpers.h"
-#include "flintxx/tuple.h"
-#include "flintxx/mp.h"
+#include
+#include
+#include
+#include
+
+#include "helpers.h"
+
+#include
+#include
+#include
using namespace flint;
using namespace mp;
diff --git a/src/flintxx/test/t-vector.cpp b/src/flintxx/test/t-vector.cpp
index 4ce3ea80c..1c804e7ce 100644
--- a/src/flintxx/test/t-vector.cpp
+++ b/src/flintxx/test/t-vector.cpp
@@ -9,13 +9,13 @@
(at your option) any later version. See .
*/
-#include
+#include
+#include
+#include
-#include "flintxx/vector.h"
-
-#include "flintxx/test/helpers.h"
-#include "flintxx/test/myint.h"
-#include "fmpz_vecxx.h"
+#include
+#include
+#include "helpers.h"
using namespace flint;
diff --git a/src/flintxx_public/arithxx.h b/src/flintxx_public/arithxx.h
index 38247d8a4..1d4cd6ec0 100644
--- a/src/flintxx_public/arithxx.h
+++ b/src/flintxx_public/arithxx.h
@@ -12,14 +12,19 @@
#ifndef ARITHXX_H
#define ARITHXX_H
-#include "arith.h"
-
-#include "fmpq_polyxx.h"
-#include "fmpqxx.h"
-#include "fmpz_matxx.h"
-#include "fmpz_vecxx.h"
-#include "fmpzxx.h"
-#include "nmod_vecxx.h"
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
// TODO namespace arith?
// TODO arith_hrr_expsum_factored
diff --git a/src/flintxx_public/fmpq_matxx.h b/src/flintxx_public/fmpq_matxx.h
index b86614c51..a0db54821 100644
--- a/src/flintxx_public/fmpq_matxx.h
+++ b/src/flintxx_public/fmpq_matxx.h
@@ -10,16 +10,20 @@
*/
#ifndef FMPQ_MATXX_H
-#define FMPQ_MATXX_H FMPQ_MATXX_H
+#define FMPQ_MATXX_H
-#include "fmpq_mat.h"
+#include
-#include "fmpqxx.h"
-#include "fmpz_matxx.h"
-#include "fmpz_vecxx.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
#include "flintxx/ltuple.h"
-#include "flintxx/matrix.h"
// TODO wrap entry_num, entry_den?
// TODO numden_rowwise_2
diff --git a/src/flintxx_public/fmpq_polyxx.h b/src/flintxx_public/fmpq_polyxx.h
index 155d11c7d..6cb2ca84d 100644
--- a/src/flintxx_public/fmpq_polyxx.h
+++ b/src/flintxx_public/fmpq_polyxx.h
@@ -9,16 +9,19 @@
(at your option) any later version. See .
*/
-#ifndef FMPQ_POLYXX_H
#define FMPQ_POLYXX_H
-#include
-#include
-
-#include "flint.h"
-#include "fmpq_poly.h"
+#include "flint/flint.h"
+#include "flint/fmpq_poly.h"
+#include "flintxx.h"
#include "fmpqxx.h"
+#include "fmpz_polyxx.h"
+#include "fmpzxx.h"
+#include "fmpq_matxx.h"
+
+#include
+#include
#include "flintxx/expression.h"
#include "flintxx/flint_classes.h"
diff --git a/src/flintxx_public/fmpqxx.h b/src/flintxx_public/fmpqxx.h
index d0c0950f4..65b0c1002 100644
--- a/src/flintxx_public/fmpqxx.h
+++ b/src/flintxx_public/fmpqxx.h
@@ -9,19 +9,24 @@
(at your option) any later version. See .
*/
-#ifndef CXX_FMPQXX_H
-#define CXX_FMPQXX_H
+#ifndef FMPQXX_H
+#define FMPQXX_H
#include
+#include
-#include "fmpq.h"
-#include "fmpq_vec.h"
+#include
+#include
-#include "flintxx/expression.h"
-#include "flintxx/flint_classes.h"
-#include "flintxx/flint_exception.h"
-#include "flintxx/frandxx.h"
-#include "fmpzxx.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
// TODO exhibit this as a specialisation of a generic fraction
// TODO summation
@@ -473,7 +478,7 @@ FLINT_DEFINE_BINARY_EXPR_COND2(pow_op, fmpqxx,
// fmpq_vecxx
-#include "flintxx/vector.h"
+#include
namespace flint {
namespace detail {
diff --git a/src/flintxx_public/fmpz_factorxx.h b/src/flintxx_public/fmpz_factorxx.h
index 9f23acf68..92c536719 100644
--- a/src/flintxx_public/fmpz_factorxx.h
+++ b/src/flintxx_public/fmpz_factorxx.h
@@ -12,11 +12,15 @@
#ifndef FMPZ_FACTORXX_H
#define FMPZ_FACTORXX_H
-#include "fmpz_factor.h"
-#include "fmpz_vec.h"
-#include "fmpzxx.h"
+#include
+#include
-#include "flintxx/ltuple.h"
+#include
+#include
+
+#include
+#include
+#include
// TODO codegen
// TODO factor_pp1 multiple return values
@@ -36,14 +40,14 @@ class fmpz_factorxx_delayed
void copy_init(const fmpz_factorxx_delayed& o)
{
- _fmpz_factor_fit_length(inner, o.inner->num);
- _fmpz_factor_set_length(inner, o.inner->num);
- inner->sign = o.inner->sign;
- for(slong i = 0;i < o.inner->num;++i)
- {
- fmpz_set(inner->p + i, o.inner->p + i);
- inner->exp[i] = o.inner->exp[i];
- }
+ _fmpz_factor_fit_length(inner, o.inner->num);
+ _fmpz_factor_set_length(inner, o.inner->num);
+ inner->sign = o.inner->sign;
+ for(slong i = 0;i < o.inner->num;++i)
+ {
+ fmpz_set(inner->p + i, o.inner->p + i);
+ inner->exp[i] = o.inner->exp[i];
+ }
}
public:
diff --git a/src/flintxx_public/fmpz_matxx.h b/src/flintxx_public/fmpz_matxx.h
index c20105a0e..3e3229ee5 100644
--- a/src/flintxx_public/fmpz_matxx.h
+++ b/src/flintxx_public/fmpz_matxx.h
@@ -10,17 +10,23 @@
*/
#ifndef FMPZ_MATXX_H
-#define FMPZ_MATXX_H FMPZ_MATXX_H
+#define FMPZ_MATXX_H
-#include "fmpz_mat.h"
-#include "fmpq_mat.h" // fmpq_mat_get_fmpz_mat_mod_fmpz
+#include
+#include // fmpq_mat_get_fmpz_mat_mod_fmpz
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
-#include "fmpzxx.h"
#include "fmpz_polyxx.h"
#include "permxx.h"
-#include "flintxx/ltuple.h"
-#include "flintxx/matrix.h"
#include "flintxx/traits_fwd.h"
// TODO input and output
diff --git a/src/flintxx_public/fmpz_mod_polyxx.h b/src/flintxx_public/fmpz_mod_polyxx.h
index 6c855fa42..d20a194a8 100644
--- a/src/flintxx_public/fmpz_mod_polyxx.h
+++ b/src/flintxx_public/fmpz_mod_polyxx.h
@@ -13,15 +13,21 @@
#ifndef FMPZ_MOD_POLYXX_H
#define FMPZ_MOD_POLYXX_H
-#include "fmpz_mod.h"
-#include "fmpz_mod_poly.h"
+#include
+#include
-#include "fmpzxx.h"
-#include "fmpz_polyxx.h"
-#include "nmod_polyxx.h"
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
-#include "flintxx/expression.h"
-#include "flintxx/flint_classes.h"
#include "flintxx/flint_exception.h"
#include "flintxx/frandxx.h"
#include "flintxx/ltuple.h"
diff --git a/src/flintxx_public/fmpz_poly_factorxx.h b/src/flintxx_public/fmpz_poly_factorxx.h
index 0a13f9d64..fcc212ef3 100644
--- a/src/flintxx_public/fmpz_poly_factorxx.h
+++ b/src/flintxx_public/fmpz_poly_factorxx.h
@@ -12,9 +12,13 @@
#ifndef FMPZ_POLY_FACTORXX_H
#define FMPZ_POLY_FACTORXX_H
+#include "flint/fmpz_poly_factor.h"
+
+#include "flintxx.h"
+#include "fmpz_polyxx.h"
+#include "fmpzxx.h"
#include "fmpz_poly.h"
-#include "fmpz_poly_factor.h"
#include "nmod_polyxx.h"
#include "nmod_poly_factor.h"
diff --git a/src/flintxx_public/fmpz_poly_matxx.h b/src/flintxx_public/fmpz_poly_matxx.h
index 01bc8bdfd..8347d967e 100644
--- a/src/flintxx_public/fmpz_poly_matxx.h
+++ b/src/flintxx_public/fmpz_poly_matxx.h
@@ -10,16 +10,22 @@
*/
#ifndef FMPZ_POLY_MATXX_H
-#define FMPZ_POLY_MATXX_H FMPZ_POLY_MATXX_H
+#define FMPZ_POLY_MATXX_H
-#include "fmpz_poly_mat.h"
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
#include "fmpz_matxx.h"
-#include "fmpz_polyxx.h"
#include "permxx.h"
-#include "flintxx/matrix.h"
-
namespace flint {
FLINT_DEFINE_UNOP(prod)
@@ -254,9 +260,9 @@ namespace rules {
FLINT_DEFINE_DOIT_COND2(assignment, FMPZ_POLY_MATXX_COND_T, FMPZ_POLY_MATXX_COND_S,
fmpz_poly_mat_set(to._mat(), from._mat()))
-FLINTXX_DEFINE_SWAP(fmpz_poly_matxx, fmpz_poly_mat_swap(e1._mat(), e2._mat()))
+FLINT_DEFINE_SWAP(fmpz_poly_matxx, fmpz_poly_mat_swap(e1._mat(), e2._mat()))
-FLINTXX_DEFINE_EQUALS(fmpz_poly_matxx, fmpz_poly_mat_equal(e1._mat(), e2._mat()))
+FLINT_DEFINE_EQUALS(fmpz_poly_matxx, fmpz_poly_mat_equal(e1._mat(), e2._mat()))
FLINT_DEFINE_PRINT_PRETTY_COND_2(FMPZ_POLY_MATXX_COND_S, const char*,
(fmpz_poly_mat_print(from._mat(), extra), 1))
diff --git a/src/flintxx_public/fmpz_poly_qxx.h b/src/flintxx_public/fmpz_poly_qxx.h
index f13a8be60..aa9b2d101 100644
--- a/src/flintxx_public/fmpz_poly_qxx.h
+++ b/src/flintxx_public/fmpz_poly_qxx.h
@@ -10,16 +10,15 @@
*/
#ifndef FMPZ_POLY_QXX_H
-#define FMPZ_POLY_QXX_H FMPZ_POLY_QXX_H
+#define FMPZ_POLY_QXX_H
-#include
-#include
+#include
+#include
-#include "flint.h"
-#include "fmpz_poly_q.h"
-
-#include "fmpz_polyxx.h"
-#include "fmpqxx.h"
+#include
+#include
+#include
+#include
#include "flintxx/expression.h"
#include "flintxx/flint_classes.h"
diff --git a/src/flintxx_public/fmpz_polyxx.h b/src/flintxx_public/fmpz_polyxx.h
index 25968e4ef..8d440f89c 100644
--- a/src/flintxx_public/fmpz_polyxx.h
+++ b/src/flintxx_public/fmpz_polyxx.h
@@ -12,13 +12,15 @@
#ifndef FMPZ_POLYXX_H
#define FMPZ_POLYXX_H
-#include
-#include
-
-#include "flint.h"
-#include "fmpz_poly.h"
+#include "flint/flint.h"
+#include "flint/fmpz_poly.h"
+#include "flintxx.h"
#include "fmpzxx.h"
+#include "fmpqxx.h"
+#include "fmpz_matxx.h"
+#include "nmod_polyxx.h"
+
#include "fmpz_vecxx.h"
#include "flintxx/expression.h"
@@ -29,6 +31,10 @@
#include "flintxx/traits.h"
#include "flintxx/traits_fwd.h"
+#include
+#include
+#include
+
// TODO exhibit this as a specialisation of a generic poly
// TODO newton basis?
// TODO power series class?
diff --git a/src/flintxx_public/fmpz_vecxx.h b/src/flintxx_public/fmpz_vecxx.h
index c2a91315b..13ea5b5bd 100644
--- a/src/flintxx_public/fmpz_vecxx.h
+++ b/src/flintxx_public/fmpz_vecxx.h
@@ -9,12 +9,17 @@
(at your option) any later version. See .
*/
-#ifndef CXX_FMPZ_VECXX_H
-#define CXX_FMPZ_VECXX_H
+#ifndef FMPZ_VECXX_H
+#define FMPZ_VECXX_H
-#include "fmpzxx.h"
-#include "fmpz_vec.h"
-#include "flintxx/vector.h"
+#include
+#include
+
+#include
+
+#include
+#include
+#include
namespace flint {
namespace detail {
diff --git a/src/flintxx_public/fmpzxx.h b/src/flintxx_public/fmpzxx.h
index f1b207626..a03bdb05c 100644
--- a/src/flintxx_public/fmpzxx.h
+++ b/src/flintxx_public/fmpzxx.h
@@ -9,21 +9,27 @@
(at your option) any later version. See .
*/
-#ifndef CXX_FMPZXX_H
-#define CXX_FMPZXX_H
+#ifndef FMPZXX_H
+#define FMPZXX_H
#include
#include
-
-#include "flintxx/evaluation_tools.h"
-#include "flintxx/expression.h"
-#include "flintxx/expression_traits.h"
-#include "flintxx/flint_classes.h"
-#include "flintxx/frandxx.h"
-#include "flintxx/ltuple.h"
-#include "flintxx/stdmath.h"
-
-#include "fmpz.h"
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
#undef clrbit /* no idea where these are coming from */
#undef setbit
diff --git a/src/flintxx_public/nmod_matxx.h b/src/flintxx_public/nmod_matxx.h
index 46d08d04b..aa37d3878 100644
--- a/src/flintxx_public/nmod_matxx.h
+++ b/src/flintxx_public/nmod_matxx.h
@@ -12,18 +12,21 @@
#ifndef NMOD_MATXX_H
#define NMOD_MATXX_H
-#include
-#include
+#include
+
+#include
+#include
+#include
+#include
+#include
-#include "nmod_mat.h"
+#include
#include "nmod_vecxx.h"
#include "fmpz_matxx.h" // for modular reduction
-#include "permxx.h"
#include "flintxx/flint_exception.h"
#include "flintxx/ltuple.h"
-#include "flintxx/matrix.h"
// TODO addmul
// TODO default argument for mat_solve_triu etc?
diff --git a/src/flintxx_public/nmod_poly_matxx.h b/src/flintxx_public/nmod_poly_matxx.h
index ef9240838..893dfd579 100644
--- a/src/flintxx_public/nmod_poly_matxx.h
+++ b/src/flintxx_public/nmod_poly_matxx.h
@@ -12,7 +12,7 @@
#ifndef NMOD_POLY_MATXX_H
#define NMOD_POLY_MATXX_H
-#include "nmod_poly_mat.h"
+#include "flint/nmod_poly_mat.h"
#include "nmod_matxx.h"
#include "nmod_polyxx.h"
@@ -21,6 +21,8 @@
#include "flintxx/matrix.h"
#include "flintxx/stdmath.h"
+#include
+
// NOTE: it is *not* valid to use empty nmod_poly_matxx matrices!
// TODO nullspace member
diff --git a/src/flintxx_public/nmod_polyxx.h b/src/flintxx_public/nmod_polyxx.h
index aee9943a8..b9f32911a 100644
--- a/src/flintxx_public/nmod_polyxx.h
+++ b/src/flintxx_public/nmod_polyxx.h
@@ -15,8 +15,8 @@
#include
#include
-#include "nmod_poly.h"
-#include "nmod_poly_factor.h"
+#include "flint/nmod_poly.h"
+#include "flint/nmod_poly_factor.h"
#include "fmpzxx.h"
#include "nmod_vecxx.h"
diff --git a/src/flintxx_public/nmod_vecxx.h b/src/flintxx_public/nmod_vecxx.h
index b2c88b5ff..8d152dbdb 100644
--- a/src/flintxx_public/nmod_vecxx.h
+++ b/src/flintxx_public/nmod_vecxx.h
@@ -17,20 +17,20 @@
#ifndef NMOD_VECXX_H
#define NMOD_VECXX_H
-#include
+#include
+#include
-#include "nmod.h"
-#include "nmod_vec.h"
+#include
-// TODO reduce dependencies?
-#include "fmpzxx.h"
-#include "fmpqxx.h"
+#include
+#include
+#include
+#include
+#include
-#include "flintxx/expression.h"
#include "flintxx/evaluation_tools.h"
#include "flintxx/flint_classes.h"
#include "flintxx/stdmath.h"
-#include "flintxx/vector.h"
namespace flint {
//////////////////////////////////////////////////////////////////////////////
diff --git a/src/flintxx_public/padic_matxx.h b/src/flintxx_public/padic_matxx.h
index f38835504..517d85a86 100644
--- a/src/flintxx_public/padic_matxx.h
+++ b/src/flintxx_public/padic_matxx.h
@@ -12,13 +12,15 @@
#ifndef PADIC_MATXX_H
#define PADIC_MATXX_H
-#include "padic_mat.h"
+#include "flint/padic_mat.h"
+#include "flintxx.h"
#include "padicxx.h"
-#include "fmpq_matxx.h"
#include "flintxx/matrix.h"
+#include
+
// TODO input and output
namespace flint {
diff --git a/src/flintxx_public/padic_polyxx.h b/src/flintxx_public/padic_polyxx.h
index ce6f9e6fc..4eed4125c 100644
--- a/src/flintxx_public/padic_polyxx.h
+++ b/src/flintxx_public/padic_polyxx.h
@@ -12,14 +12,18 @@
#ifndef PADIC_POLYXX_H
#define PADIC_POLYXX_H
-#include "padic_poly.h"
+#include "flint/padic_poly.h"
+#include "flintxx.h"
#include "padicxx.h"
#include "fmpz_polyxx.h"
#include "fmpq_polyxx.h"
#include "flintxx/stdmath.h"
+#include
+#include
+
// TODO input and output
namespace flint {
diff --git a/src/flintxx_public/padicxx.h b/src/flintxx_public/padicxx.h
index b4f244770..588150c8a 100644
--- a/src/flintxx_public/padicxx.h
+++ b/src/flintxx_public/padicxx.h
@@ -9,28 +9,23 @@
(at your option) any later version. See .
*/
-#ifndef CXX_PADICXX_H
-#define CXX_PADICXX_H CXX_PADICXX_H
+#ifndef PADICXX_H
+#define PADICXX_H
-#include // std::max
#include
-#include "padic.h"
-
-#include "flintxx/expression.h"
-#include "flintxx/flint_classes.h"
-#include "flintxx/flint_exception.h"
-#include "flintxx/frandxx.h"
-#include "flintxx/stdmath.h"
-#include "flintxx/traits.h"
-#include "flintxx/tuple.h"
+#include
-#include "fmpzxx.h"
-#include "fmpqxx.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
-// TODO check codegen ...
-// TODO padic_output_prec does not work on non-padic expressions,
-// is that a problem?
+#include
+#include // std::max
namespace flint {
// function "declarations"
@@ -423,7 +418,7 @@ struct ref_data