#-----------------------------------------------------------------------------#
# Collect libcvc4 source files

libcvc4_add_sources(
  api/cvc4cpp.cpp
  api/cvc4cpp.h
  api/cvc4cppkind.h
  context/backtrackable.h
  context/cddense_set.h
  context/cdhashmap.h
  context/cdhashmap_forward.h
  context/cdhashset.h
  context/cdhashset_forward.h
  context/cdinsert_hashmap.h
  context/cdinsert_hashmap_forward.h
  context/cdlist.h
  context/cdlist_forward.h
  context/cdmaybe.h
  context/cdo.h
  context/cdqueue.h
  context/cdtrail_queue.h
  context/context.cpp
  context/context.h
  context/context_mm.cpp
  context/context_mm.h
  decision/decision_attributes.h
  decision/decision_engine.cpp
  decision/decision_engine.h
  decision/decision_strategy.h
  decision/justification_heuristic.cpp
  decision/justification_heuristic.h
  lib/clock_gettime.c
  lib/clock_gettime.h
  lib/ffs.c
  lib/ffs.h
  lib/replacements.h
  lib/strtok_r.c
  lib/strtok_r.h
  preprocessing/assertion_pipeline.cpp
  preprocessing/assertion_pipeline.h
  preprocessing/passes/ackermann.cpp
  preprocessing/passes/ackermann.h
  preprocessing/passes/apply_substs.cpp
  preprocessing/passes/apply_substs.h
  preprocessing/passes/bool_to_bv.cpp
  preprocessing/passes/bool_to_bv.h
  preprocessing/passes/bv_abstraction.cpp
  preprocessing/passes/bv_abstraction.h
  preprocessing/passes/bv_eager_atoms.cpp
  preprocessing/passes/bv_eager_atoms.h
  preprocessing/passes/bv_gauss.cpp
  preprocessing/passes/bv_gauss.h
  preprocessing/passes/bv_intro_pow2.cpp
  preprocessing/passes/bv_intro_pow2.h
  preprocessing/passes/bv_to_bool.cpp
  preprocessing/passes/bv_to_bool.h
  preprocessing/passes/bv_to_int.cpp
  preprocessing/passes/bv_to_int.h
  preprocessing/passes/extended_rewriter_pass.cpp
  preprocessing/passes/extended_rewriter_pass.h
  preprocessing/passes/global_negate.cpp
  preprocessing/passes/global_negate.h
  preprocessing/passes/ho_elim.cpp
  preprocessing/passes/ho_elim.h
  preprocessing/passes/int_to_bv.cpp
  preprocessing/passes/int_to_bv.h
  preprocessing/passes/ite_removal.cpp
  preprocessing/passes/ite_removal.h
  preprocessing/passes/ite_simp.cpp
  preprocessing/passes/ite_simp.h
  preprocessing/passes/miplib_trick.cpp
  preprocessing/passes/miplib_trick.h
  preprocessing/passes/nl_ext_purify.cpp
  preprocessing/passes/nl_ext_purify.h
  preprocessing/passes/non_clausal_simp.cpp
  preprocessing/passes/non_clausal_simp.h
  preprocessing/passes/pseudo_boolean_processor.cpp
  preprocessing/passes/pseudo_boolean_processor.h
  preprocessing/passes/quantifier_macros.cpp
  preprocessing/passes/quantifier_macros.h
  preprocessing/passes/quantifiers_preprocess.cpp
  preprocessing/passes/quantifiers_preprocess.h
  preprocessing/passes/real_to_int.cpp
  preprocessing/passes/real_to_int.h
  preprocessing/passes/rewrite.cpp
  preprocessing/passes/rewrite.h
  preprocessing/passes/sep_skolem_emp.cpp
  preprocessing/passes/sep_skolem_emp.h
  preprocessing/passes/sort_infer.cpp
  preprocessing/passes/sort_infer.h
  preprocessing/passes/static_learning.cpp
  preprocessing/passes/static_learning.h
  preprocessing/passes/sygus_inference.cpp
  preprocessing/passes/sygus_inference.h
  preprocessing/passes/synth_rew_rules.cpp
  preprocessing/passes/synth_rew_rules.h
  preprocessing/passes/theory_preprocess.cpp
  preprocessing/passes/theory_preprocess.h
  preprocessing/passes/unconstrained_simplifier.cpp
  preprocessing/passes/unconstrained_simplifier.h
  preprocessing/preprocessing_pass.cpp
  preprocessing/preprocessing_pass.h
  preprocessing/preprocessing_pass_context.cpp
  preprocessing/preprocessing_pass_context.h
  preprocessing/preprocessing_pass_registry.cpp
  preprocessing/preprocessing_pass_registry.h
  preprocessing/util/ite_utilities.cpp
  preprocessing/util/ite_utilities.h
  printer/ast/ast_printer.cpp
  printer/ast/ast_printer.h
  printer/cvc/cvc_printer.cpp
  printer/cvc/cvc_printer.h
  printer/dagification_visitor.cpp
  printer/dagification_visitor.h
  printer/printer.cpp
  printer/printer.h
  printer/smt2/smt2_printer.cpp
  printer/smt2/smt2_printer.h
  printer/sygus_print_callback.cpp
  printer/sygus_print_callback.h
  printer/tptp/tptp_printer.cpp
  printer/tptp/tptp_printer.h
  proof/arith_proof.cpp
  proof/arith_proof.h
  proof/arith_proof_recorder.cpp
  proof/arith_proof_recorder.h
  proof/array_proof.cpp
  proof/array_proof.h
  proof/bitvector_proof.cpp
  proof/bitvector_proof.h
  proof/clausal_bitvector_proof.cpp
  proof/clausal_bitvector_proof.h
  proof/clause_id.h
  proof/cnf_proof.cpp
  proof/cnf_proof.h
  proof/dimacs.cpp
  proof/dimacs.h
  proof/drat/drat_proof.cpp
  proof/drat/drat_proof.h
  proof/er/er_proof.cpp
  proof/er/er_proof.h
  proof/lemma_proof.cpp
  proof/lemma_proof.h
  proof/lfsc_proof_printer.cpp
  proof/lfsc_proof_printer.h
  proof/lrat/lrat_proof.cpp
  proof/lrat/lrat_proof.h
  proof/proof.h
  proof/proof_manager.cpp
  proof/proof_manager.h
  proof/proof_output_channel.cpp
  proof/proof_output_channel.h
  proof/proof_utils.cpp
  proof/proof_utils.h
  proof/resolution_bitvector_proof.cpp
  proof/resolution_bitvector_proof.h
  proof/sat_proof.h
  proof/sat_proof_implementation.h
  proof/simplify_boolean_node.cpp
  proof/simplify_boolean_node.h
  proof/skolemization_manager.cpp
  proof/skolemization_manager.h
  proof/theory_proof.cpp
  proof/theory_proof.h
  proof/uf_proof.cpp
  proof/uf_proof.h
  proof/unsat_core.cpp
  proof/unsat_core.h
  prop/bvminisat/bvminisat.cpp
  prop/bvminisat/bvminisat.h
  prop/bvminisat/core/Dimacs.h
  prop/bvminisat/core/Solver.cc
  prop/bvminisat/core/Solver.h
  prop/bvminisat/core/SolverTypes.h
  prop/bvminisat/mtl/Alg.h
  prop/bvminisat/mtl/Alloc.h
  prop/bvminisat/mtl/Heap.h
  prop/bvminisat/mtl/IntTypes.h
  prop/bvminisat/mtl/Map.h
  prop/bvminisat/mtl/Queue.h
  prop/bvminisat/mtl/Sort.h
  prop/bvminisat/mtl/Vec.h
  prop/bvminisat/mtl/XAlloc.h
  prop/bvminisat/simp/SimpSolver.cc
  prop/bvminisat/simp/SimpSolver.h
  prop/bvminisat/utils/Options.h
  prop/cadical.cpp
  prop/cadical.h
  prop/cnf_stream.cpp
  prop/cnf_stream.h
  prop/cryptominisat.cpp
  prop/cryptominisat.h
  prop/kissat.cpp
  prop/kissat.h
  prop/minisat/core/Dimacs.h
  prop/minisat/core/Solver.cc
  prop/minisat/core/Solver.h
  prop/minisat/core/SolverTypes.h
  prop/minisat/minisat.cpp
  prop/minisat/minisat.h
  prop/minisat/mtl/Alg.h
  prop/minisat/mtl/Alloc.h
  prop/minisat/mtl/Heap.h
  prop/minisat/mtl/IntTypes.h
  prop/minisat/mtl/Map.h
  prop/minisat/mtl/Queue.h
  prop/minisat/mtl/Sort.h
  prop/minisat/mtl/Vec.h
  prop/minisat/mtl/XAlloc.h
  prop/minisat/simp/SimpSolver.cc
  prop/minisat/simp/SimpSolver.h
  prop/minisat/utils/Options.h
  prop/prop_engine.cpp
  prop/prop_engine.h
  prop/registrar.h
  prop/sat_solver.h
  prop/sat_solver_factory.cpp
  prop/sat_solver_factory.h
  prop/bv_sat_solver_notify.h
  prop/sat_solver_types.cpp
  prop/sat_solver_types.h
  prop/theory_proxy.cpp
  prop/theory_proxy.h
  smt/command.cpp
  smt/command.h
  smt/command_list.cpp
  smt/command_list.h
  smt/defined_function.h
  smt/dump.cpp
  smt/dump.h
  smt/logic_exception.h
  smt/logic_request.cpp
  smt/logic_request.h
  smt/managed_ostreams.cpp
  smt/managed_ostreams.h
  smt/model.cpp
  smt/model.h
  smt/model_core_builder.cpp
  smt/model_core_builder.h
  smt/model_blocker.cpp
  smt/model_blocker.h
  smt/process_assertions.cpp
  smt/process_assertions.h
  smt/set_defaults.cpp
  smt/set_defaults.h
  smt/smt_engine.cpp
  smt/smt_engine.h
  smt/smt_engine_scope.cpp
  smt/smt_engine_scope.h
  smt/smt_engine_stats.cpp
  smt/smt_engine_stats.h
  smt/smt_statistics_registry.cpp
  smt/smt_statistics_registry.h
  smt/term_formula_removal.cpp
  smt/term_formula_removal.h
  smt/update_ostream.h
  smt_util/boolean_simplification.cpp
  smt_util/boolean_simplification.h
  smt_util/nary_builder.cpp
  smt_util/nary_builder.h
  theory/arith/approx_simplex.cpp
  theory/arith/approx_simplex.h
  theory/arith/arith_ite_utils.cpp
  theory/arith/arith_ite_utils.h
  theory/arith/arith_msum.cpp
  theory/arith/arith_msum.h
  theory/arith/arith_rewriter.cpp
  theory/arith/arith_rewriter.h
  theory/arith/arith_static_learner.cpp
  theory/arith/arith_static_learner.h
  theory/arith/arith_utilities.cpp
  theory/arith/arith_utilities.h
  theory/arith/arithvar.cpp
  theory/arith/arithvar.h
  theory/arith/attempt_solution_simplex.cpp
  theory/arith/attempt_solution_simplex.h
  theory/arith/bound_counts.h
  theory/arith/callbacks.cpp
  theory/arith/callbacks.h
  theory/arith/congruence_manager.cpp
  theory/arith/congruence_manager.h
  theory/arith/constraint.cpp
  theory/arith/constraint.h
  theory/arith/constraint_forward.h
  theory/arith/cut_log.cpp
  theory/arith/cut_log.h
  theory/arith/delta_rational.cpp
  theory/arith/delta_rational.h
  theory/arith/dio_solver.cpp
  theory/arith/dio_solver.h
  theory/arith/dual_simplex.cpp
  theory/arith/dual_simplex.h
  theory/arith/error_set.cpp
  theory/arith/error_set.h
  theory/arith/fc_simplex.cpp
  theory/arith/fc_simplex.h
  theory/arith/infer_bounds.cpp
  theory/arith/infer_bounds.h
  theory/arith/linear_equality.cpp
  theory/arith/linear_equality.h
  theory/arith/matrix.cpp
  theory/arith/matrix.h
  theory/arith/nl/nl_constraint.cpp
  theory/arith/nl/nl_constraint.h
  theory/arith/nl/nl_lemma_utils.cpp
  theory/arith/nl/nl_lemma_utils.h
  theory/arith/nl/nl_model.cpp
  theory/arith/nl/nl_model.h
  theory/arith/nl/nl_monomial.cpp
  theory/arith/nl/nl_monomial.h
  theory/arith/nl/nl_solver.cpp
  theory/arith/nl/nl_solver.h
  theory/arith/nl/nonlinear_extension.cpp
  theory/arith/nl/nonlinear_extension.h
  theory/arith/nl/transcendental_solver.cpp
  theory/arith/nl/transcendental_solver.h
  theory/arith/normal_form.cpp
  theory/arith/normal_form.h
  theory/arith/partial_model.cpp
  theory/arith/partial_model.h
  theory/arith/simplex.cpp
  theory/arith/simplex.h
  theory/arith/simplex_update.cpp
  theory/arith/simplex_update.h
  theory/arith/soi_simplex.cpp
  theory/arith/soi_simplex.h
  theory/arith/tableau.cpp
  theory/arith/tableau.h
  theory/arith/tableau_sizes.cpp
  theory/arith/tableau_sizes.h
  theory/arith/theory_arith.cpp
  theory/arith/theory_arith.h
  theory/arith/theory_arith_private.cpp
  theory/arith/theory_arith_private.h
  theory/arith/theory_arith_private_forward.h
  theory/arith/theory_arith_type_rules.h
  theory/arith/type_enumerator.h
  theory/arrays/array_info.cpp
  theory/arrays/array_info.h
  theory/arrays/array_proof_reconstruction.cpp
  theory/arrays/array_proof_reconstruction.h
  theory/arrays/static_fact_manager.cpp
  theory/arrays/static_fact_manager.h
  theory/arrays/theory_arrays.cpp
  theory/arrays/theory_arrays.h
  theory/arrays/theory_arrays_rewriter.cpp
  theory/arrays/theory_arrays_rewriter.h
  theory/arrays/theory_arrays_type_rules.h
  theory/arrays/type_enumerator.h
  theory/arrays/union_find.cpp
  theory/arrays/union_find.h
  theory/assertion.cpp
  theory/assertion.h
  theory/atom_requests.cpp
  theory/atom_requests.h
  theory/booleans/circuit_propagator.cpp
  theory/booleans/circuit_propagator.h
  theory/booleans/proof_checker.cpp
  theory/booleans/proof_checker.h
  theory/booleans/theory_bool.cpp
  theory/booleans/theory_bool.h
  theory/booleans/theory_bool_rewriter.cpp
  theory/booleans/theory_bool_rewriter.h
  theory/booleans/theory_bool_type_rules.h
  theory/booleans/type_enumerator.h
  theory/builtin/theory_builtin.cpp
  theory/builtin/theory_builtin.h
  theory/builtin/theory_builtin_rewriter.cpp
  theory/builtin/theory_builtin_rewriter.h
  theory/builtin/theory_builtin_type_rules.h
  theory/builtin/proof_checker.cpp
  theory/builtin/proof_checker.h
  theory/builtin/type_enumerator.cpp
  theory/builtin/type_enumerator.h
  theory/bv/abstraction.cpp
  theory/bv/abstraction.h
  theory/bv/bitblast/aig_bitblaster.cpp
  theory/bv/bitblast/aig_bitblaster.h
  theory/bv/bitblast/bitblast_strategies_template.h
  theory/bv/bitblast/bitblast_utils.h
  theory/bv/bitblast/bitblaster.h
  theory/bv/bitblast/eager_bitblaster.cpp
  theory/bv/bitblast/eager_bitblaster.h
  theory/bv/bitblast/lazy_bitblaster.cpp
  theory/bv/bitblast/lazy_bitblaster.h
  theory/bv/bv_eager_solver.cpp
  theory/bv/bv_eager_solver.h
  theory/bv/bv_inequality_graph.cpp
  theory/bv/bv_inequality_graph.h
  theory/bv/bv_quick_check.cpp
  theory/bv/bv_quick_check.h
  theory/bv/bv_subtheory.h
  theory/bv/bv_subtheory_algebraic.cpp
  theory/bv/bv_subtheory_algebraic.h
  theory/bv/bv_subtheory_bitblast.cpp
  theory/bv/bv_subtheory_bitblast.h
  theory/bv/bv_subtheory_core.cpp
  theory/bv/bv_subtheory_core.h
  theory/bv/bv_subtheory_inequality.cpp
  theory/bv/bv_subtheory_inequality.h
  theory/bv/slicer.cpp
  theory/bv/slicer.h
  theory/bv/theory_bv.cpp
  theory/bv/theory_bv.h
  theory/bv/theory_bv_rewrite_rules.h
  theory/bv/theory_bv_rewrite_rules_constant_evaluation.h
  theory/bv/theory_bv_rewrite_rules_core.h
  theory/bv/theory_bv_rewrite_rules_normalization.h
  theory/bv/theory_bv_rewrite_rules_operator_elimination.h
  theory/bv/theory_bv_rewrite_rules_simplification.h
  theory/bv/theory_bv_rewriter.cpp
  theory/bv/theory_bv_rewriter.h
  theory/bv/theory_bv_type_rules.h
  theory/bv/theory_bv_utils.cpp
  theory/bv/theory_bv_utils.h
  theory/bv/type_enumerator.h
  theory/care_graph.h
  theory/datatypes/datatypes_rewriter.cpp
  theory/datatypes/datatypes_rewriter.h
  theory/datatypes/sygus_datatype_utils.cpp
  theory/datatypes/sygus_datatype_utils.h
  theory/datatypes/sygus_extension.cpp
  theory/datatypes/sygus_extension.h
  theory/datatypes/sygus_simple_sym.cpp
  theory/datatypes/sygus_simple_sym.h
  theory/datatypes/theory_datatypes.cpp
  theory/datatypes/theory_datatypes.h
  theory/datatypes/theory_datatypes_type_rules.h
  theory/datatypes/theory_datatypes_utils.cpp
  theory/datatypes/theory_datatypes_utils.h
  theory/datatypes/type_enumerator.cpp
  theory/datatypes/type_enumerator.h
  theory/decision_manager.cpp
  theory/decision_manager.h
  theory/decision_strategy.cpp
  theory/decision_strategy.h
  theory/eager_proof_generator.cpp
  theory/eager_proof_generator.h
  theory/engine_output_channel.cpp
  theory/engine_output_channel.h
  theory/evaluator.cpp
  theory/evaluator.h
  theory/ext_theory.cpp
  theory/ext_theory.h
  theory/fp/fp_converter.cpp
  theory/fp/fp_converter.h
  theory/fp/theory_fp.cpp
  theory/fp/theory_fp.h
  theory/fp/theory_fp_rewriter.cpp
  theory/fp/theory_fp_rewriter.h
  theory/fp/theory_fp_type_rules.h
  theory/fp/type_enumerator.h
  theory/interrupted.h
  theory/logic_info.cpp
  theory/logic_info.h
  theory/output_channel.h
  theory/quantifiers/alpha_equivalence.cpp
  theory/quantifiers/alpha_equivalence.h
  theory/quantifiers/anti_skolem.cpp
  theory/quantifiers/anti_skolem.h
  theory/quantifiers/bv_inverter.cpp
  theory/quantifiers/bv_inverter.h
  theory/quantifiers/bv_inverter_utils.cpp
  theory/quantifiers/bv_inverter_utils.h
  theory/quantifiers/candidate_rewrite_database.cpp
  theory/quantifiers/candidate_rewrite_database.h
  theory/quantifiers/candidate_rewrite_filter.cpp
  theory/quantifiers/candidate_rewrite_filter.h
  theory/quantifiers/cegqi/ceg_arith_instantiator.cpp
  theory/quantifiers/cegqi/ceg_arith_instantiator.h
  theory/quantifiers/cegqi/ceg_bv_instantiator.cpp
  theory/quantifiers/cegqi/ceg_bv_instantiator.h
  theory/quantifiers/cegqi/ceg_bv_instantiator_utils.cpp
  theory/quantifiers/cegqi/ceg_bv_instantiator_utils.h
  theory/quantifiers/cegqi/ceg_dt_instantiator.cpp
  theory/quantifiers/cegqi/ceg_dt_instantiator.h
  theory/quantifiers/cegqi/ceg_epr_instantiator.cpp
  theory/quantifiers/cegqi/ceg_epr_instantiator.h
  theory/quantifiers/cegqi/ceg_instantiator.cpp
  theory/quantifiers/cegqi/ceg_instantiator.h
  theory/quantifiers/cegqi/inst_strategy_cegqi.cpp
  theory/quantifiers/cegqi/inst_strategy_cegqi.h
  theory/quantifiers/cegqi/vts_term_cache.cpp
  theory/quantifiers/cegqi/vts_term_cache.h
  theory/quantifiers/conjecture_generator.cpp
  theory/quantifiers/conjecture_generator.h
  theory/quantifiers/dynamic_rewrite.cpp
  theory/quantifiers/dynamic_rewrite.h
  theory/quantifiers/ematching/candidate_generator.cpp
  theory/quantifiers/ematching/candidate_generator.h
  theory/quantifiers/ematching/ho_trigger.cpp
  theory/quantifiers/ematching/ho_trigger.h
  theory/quantifiers/ematching/inst_match_generator.cpp
  theory/quantifiers/ematching/inst_match_generator.h
  theory/quantifiers/ematching/inst_strategy_e_matching.cpp
  theory/quantifiers/ematching/inst_strategy_e_matching.h
  theory/quantifiers/ematching/instantiation_engine.cpp
  theory/quantifiers/ematching/instantiation_engine.h
  theory/quantifiers/ematching/trigger.cpp
  theory/quantifiers/ematching/trigger.h
  theory/quantifiers/equality_infer.cpp
  theory/quantifiers/equality_infer.h
  theory/quantifiers/equality_query.cpp
  theory/quantifiers/equality_query.h
  theory/quantifiers/expr_miner.cpp
  theory/quantifiers/expr_miner.h
  theory/quantifiers/expr_miner_manager.cpp
  theory/quantifiers/expr_miner_manager.h
  theory/quantifiers/extended_rewrite.cpp
  theory/quantifiers/extended_rewrite.h
  theory/quantifiers/first_order_model.cpp
  theory/quantifiers/first_order_model.h
  theory/quantifiers/fmf/bounded_integers.cpp
  theory/quantifiers/fmf/bounded_integers.h
  theory/quantifiers/fmf/full_model_check.cpp
  theory/quantifiers/fmf/full_model_check.h
  theory/quantifiers/fmf/model_builder.cpp
  theory/quantifiers/fmf/model_builder.h
  theory/quantifiers/fmf/model_engine.cpp
  theory/quantifiers/fmf/model_engine.h
  theory/quantifiers/fun_def_evaluator.cpp
  theory/quantifiers/fun_def_evaluator.h
  theory/quantifiers/fun_def_process.cpp
  theory/quantifiers/fun_def_process.h
  theory/quantifiers/inst_match.cpp
  theory/quantifiers/inst_match.h
  theory/quantifiers/inst_match_trie.cpp
  theory/quantifiers/inst_match_trie.h
  theory/quantifiers/inst_strategy_enumerative.cpp
  theory/quantifiers/inst_strategy_enumerative.h
  theory/quantifiers/sygus_inst.cpp
  theory/quantifiers/sygus_inst.h
  theory/quantifiers/instantiate.cpp
  theory/quantifiers/instantiate.h
  theory/quantifiers/lazy_trie.cpp
  theory/quantifiers/lazy_trie.h
  theory/quantifiers/proof_checker.cpp
  theory/quantifiers/proof_checker.h
  theory/quantifiers/quant_conflict_find.cpp
  theory/quantifiers/quant_conflict_find.h
  theory/quantifiers/quant_epr.cpp
  theory/quantifiers/quant_epr.h
  theory/quantifiers/quant_relevance.cpp
  theory/quantifiers/quant_relevance.h
  theory/quantifiers/quant_rep_bound_ext.cpp
  theory/quantifiers/quant_rep_bound_ext.h
  theory/quantifiers/quant_split.cpp
  theory/quantifiers/quant_split.h
  theory/quantifiers/quant_util.cpp
  theory/quantifiers/quant_util.h
  theory/quantifiers/quantifiers_attributes.cpp
  theory/quantifiers/quantifiers_attributes.h
  theory/quantifiers/quantifiers_rewriter.cpp
  theory/quantifiers/quantifiers_rewriter.h
  theory/quantifiers/query_generator.cpp
  theory/quantifiers/query_generator.h
  theory/quantifiers/relevant_domain.cpp
  theory/quantifiers/relevant_domain.h
  theory/quantifiers/single_inv_partition.cpp
  theory/quantifiers/single_inv_partition.h
  theory/quantifiers/skolemize.cpp
  theory/quantifiers/skolemize.h
  theory/quantifiers/solution_filter.cpp
  theory/quantifiers/solution_filter.h
  theory/quantifiers/sygus/ce_guided_single_inv.cpp
  theory/quantifiers/sygus/ce_guided_single_inv.h
  theory/quantifiers/sygus/ce_guided_single_inv_sol.cpp
  theory/quantifiers/sygus/ce_guided_single_inv_sol.h
  theory/quantifiers/sygus/cegis.cpp
  theory/quantifiers/sygus/cegis.h
  theory/quantifiers/sygus/cegis_core_connective.cpp
  theory/quantifiers/sygus/cegis_core_connective.h
  theory/quantifiers/sygus/cegis_unif.cpp
  theory/quantifiers/sygus/cegis_unif.h
  theory/quantifiers/sygus/example_eval_cache.cpp
  theory/quantifiers/sygus/example_eval_cache.h
  theory/quantifiers/sygus/example_infer.cpp
  theory/quantifiers/sygus/example_infer.h
  theory/quantifiers/sygus/example_min_eval.cpp
  theory/quantifiers/sygus/example_min_eval.h
  theory/quantifiers/sygus/enum_stream_substitution.cpp
  theory/quantifiers/sygus/enum_stream_substitution.h
  theory/quantifiers/sygus/example_infer.cpp
  theory/quantifiers/sygus/example_infer.h
  theory/quantifiers/sygus/example_min_eval.cpp
  theory/quantifiers/sygus/example_min_eval.h
  theory/quantifiers/sygus/sygus_abduct.cpp
  theory/quantifiers/sygus/sygus_abduct.h
  theory/quantifiers/sygus/sygus_enumerator.cpp
  theory/quantifiers/sygus/sygus_enumerator.h
  theory/quantifiers/sygus/sygus_enumerator_basic.cpp
  theory/quantifiers/sygus/sygus_enumerator_basic.h
  theory/quantifiers/sygus/sygus_eval_unfold.cpp
  theory/quantifiers/sygus/sygus_eval_unfold.h
  theory/quantifiers/sygus/sygus_explain.cpp
  theory/quantifiers/sygus/sygus_explain.h
  theory/quantifiers/sygus/sygus_grammar_cons.cpp
  theory/quantifiers/sygus/sygus_grammar_cons.h
  theory/quantifiers/sygus/sygus_grammar_norm.cpp
  theory/quantifiers/sygus/sygus_grammar_norm.h
  theory/quantifiers/sygus/sygus_grammar_red.cpp
  theory/quantifiers/sygus/sygus_grammar_red.h
  theory/quantifiers/sygus/sygus_invariance.cpp
  theory/quantifiers/sygus/sygus_invariance.h
  theory/quantifiers/sygus/sygus_module.cpp
  theory/quantifiers/sygus/sygus_module.h
  theory/quantifiers/sygus/sygus_pbe.cpp
  theory/quantifiers/sygus/sygus_pbe.h
  theory/quantifiers/sygus/sygus_process_conj.cpp
  theory/quantifiers/sygus/sygus_process_conj.h
  theory/quantifiers/sygus/sygus_repair_const.cpp
  theory/quantifiers/sygus/sygus_repair_const.h
  theory/quantifiers/sygus/sygus_stats.cpp
  theory/quantifiers/sygus/sygus_stats.h
  theory/quantifiers/sygus/sygus_unif.cpp
  theory/quantifiers/sygus/sygus_unif.h
  theory/quantifiers/sygus/sygus_unif_io.cpp
  theory/quantifiers/sygus/sygus_unif_io.h
  theory/quantifiers/sygus/sygus_unif_rl.cpp
  theory/quantifiers/sygus/sygus_unif_rl.h
  theory/quantifiers/sygus/sygus_unif_strat.cpp
  theory/quantifiers/sygus/sygus_unif_strat.h
  theory/quantifiers/sygus/synth_conjecture.cpp
  theory/quantifiers/sygus/synth_conjecture.h
  theory/quantifiers/sygus/synth_engine.cpp
  theory/quantifiers/sygus/synth_engine.h
  theory/quantifiers/sygus/term_database_sygus.cpp
  theory/quantifiers/sygus/term_database_sygus.h
  theory/quantifiers/sygus/type_info.cpp
  theory/quantifiers/sygus/type_info.h
  theory/quantifiers/sygus/type_node_id_trie.cpp
  theory/quantifiers/sygus/type_node_id_trie.h
  theory/quantifiers/sygus/transition_inference.cpp
  theory/quantifiers/sygus/transition_inference.h
  theory/quantifiers/sygus_sampler.cpp
  theory/quantifiers/sygus_sampler.h
  theory/quantifiers/term_database.cpp
  theory/quantifiers/term_database.h
  theory/quantifiers/term_enumeration.cpp
  theory/quantifiers/term_enumeration.h
  theory/quantifiers/term_util.cpp
  theory/quantifiers/term_util.h
  theory/quantifiers/theory_quantifiers.cpp
  theory/quantifiers/theory_quantifiers.h
  theory/quantifiers/theory_quantifiers_type_rules.h
  theory/quantifiers_engine.cpp
  theory/quantifiers_engine.h
  theory/rep_set.cpp
  theory/rep_set.h
  theory/rewriter.cpp
  theory/rewriter.h
  theory/rewriter_attributes.h
  theory/sep/theory_sep.cpp
  theory/sep/theory_sep.h
  theory/sep/theory_sep_rewriter.cpp
  theory/sep/theory_sep_rewriter.h
  theory/sep/theory_sep_type_rules.h
  theory/sets/cardinality_extension.cpp
  theory/sets/cardinality_extension.h
  theory/sets/inference_manager.cpp
  theory/sets/inference_manager.h
  theory/sets/normal_form.h
  theory/sets/rels_utils.h
  theory/sets/skolem_cache.cpp
  theory/sets/skolem_cache.h
  theory/sets/solver_state.cpp
  theory/sets/solver_state.h
  theory/sets/theory_sets.cpp
  theory/sets/theory_sets.h
  theory/sets/theory_sets_private.cpp
  theory/sets/theory_sets_private.h
  theory/sets/theory_sets_rels.cpp
  theory/sets/theory_sets_rels.h
  theory/sets/theory_sets_rewriter.cpp
  theory/sets/theory_sets_rewriter.h
  theory/sets/theory_sets_type_enumerator.cpp
  theory/sets/theory_sets_type_enumerator.h
  theory/sets/theory_sets_type_rules.h
  theory/shared_terms_database.cpp
  theory/shared_terms_database.h
  theory/smt_engine_subsolver.cpp
  theory/smt_engine_subsolver.h
  theory/sort_inference.cpp
  theory/sort_inference.h
  theory/strings/arith_entail.cpp
  theory/strings/arith_entail.h
  theory/strings/base_solver.cpp
  theory/strings/base_solver.h
  theory/strings/core_solver.cpp
  theory/strings/core_solver.h
  theory/strings/extf_solver.cpp
  theory/strings/extf_solver.h
  theory/strings/eqc_info.cpp
  theory/strings/eqc_info.h
  theory/strings/infer_info.cpp
  theory/strings/infer_info.h
  theory/strings/inference_manager.cpp
  theory/strings/inference_manager.h
  theory/strings/normal_form.cpp
  theory/strings/normal_form.h
  theory/strings/regexp_elim.cpp
  theory/strings/regexp_elim.h
  theory/strings/regexp_entail.cpp
  theory/strings/regexp_entail.h
  theory/strings/regexp_operation.cpp
  theory/strings/regexp_operation.h
  theory/strings/regexp_solver.cpp
  theory/strings/regexp_solver.h
  theory/strings/rewrites.cpp
  theory/strings/rewrites.h
  theory/strings/sequences_rewriter.cpp
  theory/strings/sequences_rewriter.h
  theory/strings/sequences_stats.cpp
  theory/strings/sequences_stats.h
  theory/strings/skolem_cache.cpp
  theory/strings/skolem_cache.h
  theory/strings/solver_state.cpp
  theory/strings/solver_state.h
  theory/strings/strings_entail.cpp
  theory/strings/strings_entail.h
  theory/strings/strings_fmf.cpp
  theory/strings/strings_fmf.h
  theory/strings/strings_rewriter.cpp
  theory/strings/strings_rewriter.h
  theory/strings/theory_strings.cpp
  theory/strings/theory_strings.h
  theory/strings/theory_strings_preprocess.cpp
  theory/strings/theory_strings_preprocess.h
  theory/strings/theory_strings_type_rules.h
  theory/strings/theory_strings_utils.cpp
  theory/strings/theory_strings_utils.h
  theory/strings/term_registry.cpp
  theory/strings/term_registry.h
  theory/strings/type_enumerator.cpp
  theory/strings/type_enumerator.h
  theory/strings/word.cpp
  theory/strings/word.h
  theory/subs_minimize.cpp
  theory/subs_minimize.h
  theory/substitutions.cpp
  theory/substitutions.h
  theory/term_registration_visitor.cpp
  theory/term_registration_visitor.h
  theory/theory.cpp
  theory/theory.h
  theory/theory_engine.cpp
  theory/theory_engine.h
  theory/theory_id.cpp
  theory/theory_id.h
  theory/theory_model.cpp
  theory/theory_model.h
  theory/theory_model_builder.cpp
  theory/theory_model_builder.h
  theory/theory_preprocessor.cpp
  theory/theory_preprocessor.h
  theory/theory_proof_step_buffer.cpp
  theory/theory_proof_step_buffer.h
  theory/theory_rewriter.h
  theory/theory_registrar.h
  theory/theory_test_utils.h
  theory/trust_node.cpp
  theory/trust_node.h
  theory/type_enumerator.h
  theory/type_set.cpp
  theory/type_set.h
  theory/uf/cardinality_extension.cpp
  theory/uf/cardinality_extension.h
  theory/uf/equality_engine.cpp
  theory/uf/equality_engine.h
  theory/uf/equality_engine_types.h
  theory/uf/proof_checker.cpp
  theory/uf/proof_checker.h
  theory/uf/ho_extension.cpp
  theory/uf/ho_extension.h
  theory/uf/symmetry_breaker.cpp
  theory/uf/symmetry_breaker.h
  theory/uf/theory_uf.cpp
  theory/uf/theory_uf.h
  theory/uf/theory_uf_model.cpp
  theory/uf/theory_uf_model.h
  theory/uf/theory_uf_rewriter.h
  theory/uf/theory_uf_type_rules.h
  theory/valuation.cpp
  theory/valuation.h
)

#-----------------------------------------------------------------------------#
# Add required include paths for this and all subdirectories.

include_directories(include)
include_directories(. ${CMAKE_CURRENT_BINARY_DIR})

#-----------------------------------------------------------------------------#

set(KINDS_FILES
  ${PROJECT_SOURCE_DIR}/src/theory/builtin/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/booleans/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/uf/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/arith/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/bv/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/fp/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/arrays/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/datatypes/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/sep/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/sets/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/strings/kinds
  ${PROJECT_SOURCE_DIR}/src/theory/quantifiers/kinds)

#-----------------------------------------------------------------------------#
# Add subdirectories

add_subdirectory(base)
add_subdirectory(expr)
add_subdirectory(options)
add_subdirectory(parser)
add_subdirectory(theory)
add_subdirectory(util)

#-----------------------------------------------------------------------------#
# All sources for libcvc4 are now collected in LIBCVC4_SRCS and (if generated)
# LIBCVC4_GEN_SRCS (via libcvc4_add_sources). We can now build libcvc4.

set_source_files_properties(${LIBCVC4_GEN_SRCS} PROPERTIES GENERATED TRUE)
add_library(cvc4 ${LIBCVC4_SRCS} ${LIBCVC4_GEN_SRCS})
target_include_directories(cvc4
  PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
    $<INSTALL_INTERFACE:include>
)

install(TARGETS cvc4
  EXPORT cvc4-targets
  LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
  ARCHIVE DESTINATION ${LIBRARY_INSTALL_DIR})

set_target_properties(cvc4 PROPERTIES SOVERSION ${CVC4_SOVERSION})
target_compile_definitions(cvc4
  PRIVATE
    -D__BUILDING_CVC4LIB
    -D__STDC_LIMIT_MACROS
    -D__STDC_FORMAT_MACROS
)
# Add libcvc4 dependencies for generated sources.
add_dependencies(cvc4 gen-expr gen-gitinfo gen-options gen-tags gen-theory)

# Add library/include dependencies
if(ENABLE_VALGRIND)
  target_include_directories(cvc4 PRIVATE ${Valgrind_INCLUDE_DIR})
endif()
if(USE_ABC)
  target_link_libraries(cvc4 ${ABC_LIBRARIES})
  target_include_directories(cvc4 PRIVATE ${ABC_INCLUDE_DIR})
endif()
if(USE_CADICAL)
  target_link_libraries(cvc4 ${CaDiCaL_LIBRARIES})
  target_include_directories(cvc4 PRIVATE ${CaDiCaL_INCLUDE_DIR})
endif()
if(USE_CLN)
  target_link_libraries(cvc4 ${CLN_LIBRARIES})
  target_include_directories(cvc4 PUBLIC $<BUILD_INTERFACE:${CLN_INCLUDE_DIR}>)
endif()
if(USE_CRYPTOMINISAT)
  target_link_libraries(cvc4 ${CryptoMiniSat_LIBRARIES})
  target_include_directories(cvc4 PRIVATE ${CryptoMiniSat_INCLUDE_DIR})
endif()
if(USE_KISSAT)
  target_link_libraries(cvc4 ${Kissat_LIBRARIES})
  target_include_directories(cvc4 PRIVATE ${Kissat_INCLUDE_DIR})
endif()
if(USE_DRAT2ER)
  target_link_libraries(cvc4 ${Drat2Er_LIBRARIES})
  target_include_directories(cvc4 PRIVATE ${Drat2Er_INCLUDE_DIR})
endif()
if(USE_GLPK)
  target_link_libraries(cvc4 ${GLPK_LIBRARIES})
  target_include_directories(cvc4 PRIVATE ${GLPK_INCLUDE_DIR})
endif()
if(USE_LFSC)
  target_link_libraries(cvc4 ${LFSC_LIBRARIES})
  target_include_directories(cvc4 PRIVATE ${LFSC_INCLUDE_DIR})
endif()
if(USE_SYMFPU)
  target_include_directories(cvc4
    PUBLIC $<BUILD_INTERFACE:${SymFPU_INCLUDE_DIR}>)
endif()

# Note: When linked statically GMP needs to be linked after CLN since CLN
# depends on GMP.
target_link_libraries(cvc4 ${GMP_LIBRARIES})
target_include_directories(cvc4 PUBLIC $<BUILD_INTERFACE:${GMP_INCLUDE_DIR}>)

# Add rt library
# Note: For glibc < 2.17 we have to additionally link against rt (man clock_gettime).
#       RT_LIBRARIES should be empty for glibc >= 2.17
target_link_libraries(cvc4 ${RT_LIBRARIES})

#-----------------------------------------------------------------------------#
# Visit main subdirectory after creating target cvc4. For target main, we have
# to manually add library dependencies since we can't use
# target_link_libraries(...) with object libraries for cmake versions <= 3.12.
# Thus, we can only visit main as soon as all dependencies for cvc4 are set up.

add_subdirectory(main)

#-----------------------------------------------------------------------------#
# Note:
# We define all install commands for all public headers here in one
# place so that we can easily remove them as soon as we enforce the new
# C++ API.
#
# All (generated) headers that either include cvc4_public.h or
# cvc4parser_public.h need to be listed explicitly here.
#
install(FILES
          api/cvc4cpp.h
          api/cvc4cppkind.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/api)
install(FILES
          base/configuration.h
          base/exception.h
          base/listener.h
          base/modal_exception.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/base)
install(FILES
          context/cdhashmap_forward.h
          context/cdhashset_forward.h
          context/cdinsert_hashmap_forward.h
          context/cdlist_forward.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/context)
install(FILES
          include/cvc4.h
          include/cvc4_public.h
          include/cvc4parser_public.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4)
install(FILES
          expr/array.h
          expr/array_store_all.h
          expr/ascription_type.h
          expr/datatype.h
          expr/emptyset.h
          expr/expr_iomanip.h
          expr/expr_sequence.h
          expr/record.h
          expr/symbol_table.h
          expr/type.h
          expr/uninterpreted_constant.h
          expr/variable_type_map.h
          ${CMAKE_CURRENT_BINARY_DIR}/expr/expr.h
          ${CMAKE_CURRENT_BINARY_DIR}/expr/kind.h
          ${CMAKE_CURRENT_BINARY_DIR}/expr/expr_manager.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/expr)
install(FILES
          options/language.h
          options/option_exception.h
          options/options.h
          options/printer_modes.h
          options/set_language.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/options)
install(FILES
          parser/input.h
          parser/parser.h
          parser/parser_builder.h
          parser/parser_exception.h
          parser/parse_op.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/parser)
install(FILES
          printer/sygus_print_callback.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/printer)
install(FILES
          proof/unsat_core.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/proof)
install(FILES
          smt/command.h
          smt/logic_exception.h
          smt/smt_engine.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/smt)
install(FILES
          theory/logic_info.h
          theory/theory_id.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/theory)
install(FILES
          util/abstract_value.h
          util/bitvector.h
          util/bool.h
          util/cardinality.h
          util/divisible.h
          util/gmp_util.h
          util/hash.h
          util/integer_cln_imp.h
          util/integer_gmp_imp.h
          util/maybe.h
          util/proof.h
          util/rational_cln_imp.h
          util/rational_gmp_imp.h
          util/regexp.h
          util/resource_manager.h
          util/result.h
          util/sexpr.h
          util/statistics.h
          util/string.h
          util/tuple.h
          util/unsafe_interrupt_exception.h
          ${CMAKE_CURRENT_BINARY_DIR}/util/floatingpoint.h
          ${CMAKE_CURRENT_BINARY_DIR}/util/integer.h
          ${CMAKE_CURRENT_BINARY_DIR}/util/rational.h
        DESTINATION
          ${INCLUDE_INSTALL_DIR}/cvc4/util)

# Fix include paths for all public headers.
# Note: This is a temporary fix until the new C++ API is in place.
install(CODE "execute_process(COMMAND
                ${CMAKE_CURRENT_LIST_DIR}/fix-install-headers.sh
                ${CMAKE_INSTALL_PREFIX})")
