diff --git a/.gitignore b/.gitignore index e139737..7da3b50 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ /alt-ergo-icons.tar.xz -/alt-ergo-0.99.1.tar.gz -/alt-ergo-1.01.tar.gz -/alt-ergo-1.30.tar.gz +/alt-ergo-*.tar.gz diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa65fbb --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# alt-ergo + +[Alt-Ergo](https://alt-ergo.ocamlpro.com/) is an automated theorem prover +implemented in OCaml. It is based on `CC(X)` — a congruence closure +algorithm parameterized by an equational theory X. This algorithm is +reminiscent of the Shostak algorithm. Currently `CC(X)` is instantiated by +the theory of linear arithmetics. Alt-Ergo also contains a home made +SAT-solver and an instantiation mechanism by which it fully supports +quantifiers. diff --git a/alt-ergo-1.30-use-pic.patch b/alt-ergo-1.30-use-pic.patch deleted file mode 100644 index 71d6ad0..0000000 --- a/alt-ergo-1.30-use-pic.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- alt-ergo-1.30.old/Makefile.users 2017-11-09 09:55:47.337871409 +0000 -+++ alt-ergo-1.30/Makefile.users 2017-11-09 10:00:52.374639872 +0000 -@@ -140,14 +140,14 @@ - $(OCAMLC) $(BFLAGS) -o $@ $(BIBBYTE) $^ - - $(NAME).opt: $(MAINCMX) -- $(OCAMLOPT) $(OFLAGS) -o $@ $(BIBOPT) $^ -+ $(OCAMLOPT) $(OFLAGS) -runtime-variant _pic -o $@ $(BIBOPT) $^ - - #### - $(GUINAME).byte: $(GUICMO) - $(OCAMLC) $(BFLAGS) -o $(GUINAME).byte $(BIBBYTE) $(BIBGUIBYTE) $^ - - $(GUINAME).opt: $(GUICMX) -- $(OCAMLOPT) $(OFLAGS) -o $(GUINAME).opt $(BIBOPT) $(BIBGUIOPT) $^ -+ $(OCAMLOPT) $(OFLAGS) -runtime-variant _pic -o $(GUINAME).opt $(BIBOPT) $(BIBGUIOPT) $^ - - ifeq ($(ENABLEGUI),yes) - gui: $(GUINAME).$(OCAMLBEST) diff --git a/alt-ergo-dune3.patch b/alt-ergo-dune3.patch new file mode 100644 index 0000000..cb875a4 --- /dev/null +++ b/alt-ergo-dune3.patch @@ -0,0 +1,29 @@ +--- alt-ergo-2.3.0-free/sources/configure.ml.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/configure.ml 2022-07-05 16:42:35.856375154 -0600 +@@ -139,26 +139,6 @@ let () = + Format.eprintf "ERROR: Couldn't find dune in env@."; + exit 1 + +-(* run dune to check that dependencies are installed *) +-let () = +- let p_opt = match !pkg with +- | "" -> "" +- | s -> Format.asprintf "-p %s" s +- in +- let cmd = Format.asprintf +- "dune external-lib-deps --display=quiet --missing %s @install" +- p_opt +- in +- let ch = Unix.open_process_in cmd in +- let _ = read_all ch in +- let res = Unix.close_process_in ch in +- match res with +- | Unix.WEXITED 0 -> +- Format.printf "All deps are installed.@." +- | _ -> +- (* dune already prints the missing libs on stderr *) +- exit 2 +- + let () = + Format.printf "Good to go !@." + diff --git a/alt-ergo-forward-compat.patch b/alt-ergo-forward-compat.patch new file mode 100644 index 0000000..b3be679 --- /dev/null +++ b/alt-ergo-forward-compat.patch @@ -0,0 +1,64 @@ +--- alt-ergo-2.3.0-free/sources/alt-ergo-lib-free.opam.orig 2022-05-20 03:15:57.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/alt-ergo-lib-free.opam 2022-07-05 16:40:03.983955825 -0600 +@@ -15,8 +15,6 @@ depends: [ + "num" + "ocplib-simplex" {>= "0.4" } + "zarith" +- "seq" +- "stdlib-shims" + ] + conflicts: [ + "alt-ergo" +--- alt-ergo-2.3.0-free/sources/alt-ergo-lib.opam.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/alt-ergo-lib.opam 2022-07-05 16:47:56.113259397 -0600 +@@ -15,8 +15,6 @@ depends: [ + "num" + "ocplib-simplex" {>= "0.4" } + "zarith" +- "seq" +- "stdlib-shims" + ] + conflicts: [ + "alt-ergo-free" +--- alt-ergo-2.3.0-free/sources/alt-ergo-parsers-free.opam.orig 2022-05-20 03:16:01.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/alt-ergo-parsers-free.opam 2022-06-18 16:35:52.177624279 -0600 +@@ -16,7 +16,6 @@ depends: [ + "psmt2-frontend" { >= "0.2" & < "0.4" } + "camlzip" + "menhir" { < "20210310" } +- "stdlib-shims" + ] + conflicts: [ + "alt-ergo-parsers" +--- alt-ergo-2.3.0-free/sources/alt-ergo-parsers.opam.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/alt-ergo-parsers.opam 2022-07-05 16:39:33.254870985 -0600 +@@ -16,7 +16,6 @@ depends: [ + "psmt2-frontend" { >= "0.2" } + "camlzip" + "menhir" +- "stdlib-shims" + ] + homepage: "http://alt-ergo.ocamlpro.com/" + dev-repo: "git+https://github.com/OCamlPro/alt-ergo.git" +--- alt-ergo-2.3.0-free/sources/lib/dune.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/lib/dune 2022-07-05 16:50:35.778700249 -0600 +@@ -9,7 +9,7 @@ + (public_name alt-ergo-lib) + + ; external dependencies +- (libraries seq unix num str zarith dynlink ocplib-simplex stdlib-shims) ++ (libraries unix num str zarith dynlink ocplib-simplex) + + ; .mli only modules *also* need to be in this field + (modules_without_implementation matching_types numbersInterface sig sig_rel) +--- alt-ergo-2.3.0-free/sources/parsers/dune.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/parsers/dune 2022-06-18 16:36:07.177661183 -0600 +@@ -14,7 +14,7 @@ + (library + (name AltErgoParsers) + (public_name alt-ergo-parsers) +- (libraries camlzip dynlink psmt2-frontend alt-ergo-lib stdlib-shims) ++ (libraries camlzip dynlink psmt2-frontend alt-ergo-lib) + (modules + ; common + Parsers Parsers_loader MyZip diff --git a/alt-ergo-inline-error.patch b/alt-ergo-inline-error.patch new file mode 100644 index 0000000..ccb8356 --- /dev/null +++ b/alt-ergo-inline-error.patch @@ -0,0 +1,26 @@ +Fixes these errors: + +File "lib/util/util.mli", line 62, characters 6-12: +62 | val [@inline always] compare_algebraic : 'a -> 'a -> (('a * 'a) -> int) -> int + ^^^^^^ +Error (warning 53 [misplaced-attribute]): the "inline" attribute cannot appear in this context + +File "lib/util/util.mli", line 64, characters 6-12: +64 | val [@inline always] cmp_lists: 'a list -> 'a list -> ('a -> 'a -> int) -> int + ^^^^^^ +Error (warning 53 [misplaced-attribute]): the "inline" attribute cannot appear in this context + +--- alt-ergo-2.3.0-free/sources/lib/util/util.mli.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/lib/util/util.mli 2024-05-05 11:41:32.415674847 -0600 +@@ -59,9 +59,9 @@ val string_of_th_ext : theories_extensio + - Pervasives.compare a b is used if + + *) +-val [@inline always] compare_algebraic : 'a -> 'a -> (('a * 'a) -> int) -> int ++val compare_algebraic : 'a -> 'a -> (('a * 'a) -> int) -> int + +-val [@inline always] cmp_lists: 'a list -> 'a list -> ('a -> 'a -> int) -> int ++val cmp_lists: 'a list -> 'a list -> ('a -> 'a -> int) -> int + + type matching_env = + { diff --git a/alt-ergo-menhir.patch b/alt-ergo-menhir.patch new file mode 100644 index 0000000..4ab3e45 --- /dev/null +++ b/alt-ergo-menhir.patch @@ -0,0 +1,18 @@ +--- alt-ergo-2.3.0-free/sources/plugins/AB-Why3/dune.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/plugins/AB-Why3/dune 2022-06-20 13:27:36.662944620 -0600 +@@ -3,13 +3,13 @@ + + (menhir + (infer false) +- (flags --fixed-exception) ++ (flags --fixed-exception --table) + (modules why3_parser) + ) + + (library + (name ABWhy3Plugin) +- (libraries alt-ergo-lib alt-ergo-parsers) ++ (libraries alt-ergo-lib alt-ergo-parsers menhirLib) + (modules Why3_lexer Why3_parser Why3_loc Why3_ptree) + ) + diff --git a/alt-ergo-pervasives.patch b/alt-ergo-pervasives.patch new file mode 100644 index 0000000..bd72f54 --- /dev/null +++ b/alt-ergo-pervasives.patch @@ -0,0 +1,172 @@ +--- alt-ergo-2.3.0-free/extra/ocpChecker.ml.orig 2021-06-29 06:08:30.000000000 -0600 ++++ alt-ergo-2.3.0-free/extra/ocpChecker.ml 2022-02-23 12:58:05.976390283 -0700 +@@ -45,10 +45,10 @@ let update_file file lines = + exit 2 + in + Queue.iter (fun line -> +- Pervasives.output_string cout line; +- Pervasives.output_string cout "\n" ++ Stdlib.output_string cout line; ++ Stdlib.output_string cout "\n" + )lines; +- Pervasives.flush cout; ++ Stdlib.flush cout; + close_out cout + + +--- alt-ergo-2.3.0-free/sources/tools/gui/annoted_ast.ml.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/tools/gui/annoted_ast.ml 2022-06-18 16:08:13.053310654 -0600 +@@ -191,7 +191,7 @@ type annoted_node = + module MDep = Map.Make ( + struct + type t = atyped_decl annoted +- let compare = Pervasives.compare ++ let compare = Stdlib.compare + end) + + +@@ -880,9 +880,9 @@ let find_dep_by_string dep s = + | None -> begin + match d.c with + | ALogic (_, ls, _, _) when List.mem s ls -> Some d +- | ATypeDecl (_, _, s', _, _) when Pervasives.(=) s s'-> Some d +- | APredicate_def (_, p, _, _) when Pervasives.(=) s p -> Some d +- | AFunction_def (_, f, _, _, _, _) when Pervasives.(=) s f -> Some d ++ | ATypeDecl (_, _, s', _, _) when Stdlib.(=) s s'-> Some d ++ | APredicate_def (_, p, _, _) when Stdlib.(=) s p -> Some d ++ | AFunction_def (_, f, _, _, _, _) when Stdlib.(=) s f -> Some d + | _ -> None + end + ) dep None +@@ -892,7 +892,7 @@ let find_tag_deps dep tag = + (fun d (deps,_) found -> + match found with + | Some _ -> found +- | None -> if Pervasives.(=) d.tag tag then Some deps else None ++ | None -> if Stdlib.(=) d.tag tag then Some deps else None + ) dep None + + let find_tag_inversedeps dep tag = +@@ -900,7 +900,7 @@ let find_tag_inversedeps dep tag = + (fun d (_,deps) found -> + match found with + | Some _ -> found +- | None -> if Pervasives.(=) d.tag tag then Some deps else None ++ | None -> if Stdlib.(=) d.tag tag then Some deps else None + ) dep None + + let make_dep_string d ex dep s = +@@ -2046,7 +2046,7 @@ and findtags_aform sl aform acc = + (fun sl (sy, _) -> + let s = Symbols.to_string_clean sy in + List.fold_left +- (fun l s' -> if Pervasives.(=) s' s then l else s'::l) [] sl ++ (fun l s' -> if Stdlib.(=) s' s then l else s'::l) [] sl + )sl l + in + findtags_aform sl aaf.c acc +--- alt-ergo-2.3.0-free/sources/tools/gui/connected_ast.ml.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/tools/gui/connected_ast.ml 2022-06-18 16:08:37.469375133 -0600 +@@ -388,7 +388,7 @@ let rec unquantify_aform (buffer:sbuffer + List.fold_left (fun (nbv, used, goal_used, ve, uplet, lets) v -> + let ((s, _) as v'), e = List.hd ve in + let cdr_ve = List.tl ve in +- assert (Pervasives.(=) v v'); ++ assert (Stdlib.(=) v v'); + if String.length e == 0 then + (v'::nbv, used, goal_used, cdr_ve, v'::uplet, lets) + else +@@ -545,7 +545,7 @@ let rec add_instance_aux ?(register=true + make_instance env.inst_buffer vars entries af goal_form tyenv in + let ln_form = least_nested_form used_vars goal_form in + env.inst_buffer#place_cursor ~where:env.inst_buffer#end_iter; +- if Pervasives.(=) ln_form (Exists goal_form) then begin ++ if Stdlib.(=) ln_form (Exists goal_form) then begin + let hy = + AAxiom (loc, (sprintf "%s%s" "_instance_" aname), ax_kd, instance.c) in + let ahy = new_annot env.inst_buffer hy instance.id ptag in +@@ -739,7 +739,7 @@ and add_trigger ?(register=true) t qid e + if register then + save env.actions + (AddTrigger (qf.id, +- Pervasives.(=) sbuf env.inst_buffer, str)); ++ Stdlib.(=) sbuf env.inst_buffer, str)); + commit_tags_buffer sbuf + | _ -> assert false + end +--- alt-ergo-2.3.0-free/sources/tools/gui/main_gui.ml.orig 2022-05-20 01:34:55.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/tools/gui/main_gui.ml 2022-06-18 16:09:14.324472461 -0600 +@@ -151,7 +151,7 @@ let save_session envs = + + let save_dialog cancel envs () = + if List.exists +- (fun env -> Pervasives.(<>) env.actions env.saved_actions) envs then ++ (fun env -> Stdlib.(<>) env.actions env.saved_actions) envs then + if List.exists + (fun env -> not (Gui_session.safe_session env.actions)) envs then + GToolbox.message_box +@@ -250,7 +250,7 @@ let pop_model sat_env () = + let compare_rows icol_number (model:#GTree.model) row1 row2 = + let t1 = model#get ~row:row1 ~column:icol_number in + let t2 = model#get ~row:row2 ~column:icol_number in +- Pervasives.compare t1 t2 ++ Stdlib.compare t1 t2 + + + let empty_inst_model () = +@@ -382,7 +382,7 @@ let refresh_timers t () = + let total = + tsat +. tmatch +. tcc +. tarith +. tarrays +. tsum +. trecords +. tac in + +- let total = if Pervasives.(=) total 0. then 1. else total in ++ let total = if Stdlib.(=) total 0. then 1. else total in + + t.tl_sat#set_text (sprintf "%3.2f s" tsat); + t.tl_match#set_text (sprintf "%3.2f s" tmatch); +@@ -455,7 +455,7 @@ let add_inst ({ h; _ } as inst_model) or + let id = Expr.id orig in + let name = + match Expr.form_view orig with +- | Expr.Lemma { Expr.name = n ; _ } when Pervasives.(<>) n "" -> n ++ | Expr.Lemma { Expr.name = n ; _ } when Stdlib.(<>) n "" -> n + | Expr.Lemma _ | Expr.Unit _ | Expr.Clause _ | Expr.Literal _ + | Expr.Skolem _ | Expr.Let _ | Expr.Iff _ | Expr.Xor _ -> + string_of_int id +@@ -607,7 +607,7 @@ let vt_signal = + + let force_interrupt old_action_ref n = + (* This function is called just before the thread's timeslice ends *) +- if Pervasives.(=) (Some (Thread.id(Thread.self()))) !interrupt then ++ if Stdlib.(=) (Some (Thread.id(Thread.self()))) !interrupt then + raise Abort_thread; + match !old_action_ref with + | Sys.Signal_handle f -> f n +@@ -723,8 +723,8 @@ let remove_context env () = + toggle_prune env td + | AAxiom (_, s, _, _) + when String.length s = 0 || +- (Pervasives.(<>) s.[0] '_' && +- Pervasives.(<>) s.[0] '@') -> ++ (Stdlib.(<>) s.[0] '_' && ++ Stdlib.(<>) s.[0] '@') -> + toggle_prune env td + | _ -> () + ) env.ast +@@ -951,7 +951,7 @@ let search_all entry (_sv:GSourceView2.s + buf#remove_tag found_all_tag ~start:buf#start_iter ~stop:buf#end_iter; + let str = entry#text in + let iter = ref buf#start_iter in +- if Pervasives.(<>) str "" then ++ if Stdlib.(<>) str "" then + let result = ref None in + search_one buf str result iter found_all_tag; + while !result != None do +@@ -1300,7 +1300,7 @@ let start_gui all_used_context = + + let set_wrap_lines _ = + List.iter (fun env -> +- if Pervasives.(=) env.goal_view#wrap_mode `NONE then ( ++ if Stdlib.(=) env.goal_view#wrap_mode `NONE then ( + env.goal_view#set_wrap_mode `CHAR; + env.inst_view#set_wrap_mode `CHAR; + Gui_config.update_wrap true diff --git a/alt-ergo-psmt2-frontend.patch b/alt-ergo-psmt2-frontend.patch new file mode 100644 index 0000000..caa9af7 --- /dev/null +++ b/alt-ergo-psmt2-frontend.patch @@ -0,0 +1,12 @@ +--- alt-ergo-2.3.0-free/sources/parsers/psmt2_to_alt_ergo.ml.orig 2021-06-29 06:08:30.000000000 -0600 ++++ alt-ergo-2.3.0-free/sources/parsers/psmt2_to_alt_ergo.ml 2022-02-23 12:59:13.497394356 -0700 +@@ -403,6 +403,9 @@ module Translate = struct + | Cmd_Push _ -> not_supported "push"; assert false + | Cmd_Pop _ -> not_supported "pop"; assert false + | Cmd_Exit -> acc ++ | Cmd_CheckAllSat _ -> not_supported "check-all-sat"; assert false ++ | Cmd_Maximize _ -> not_supported "maximize"; assert false ++ | Cmd_Minimize _ -> not_supported "minimize"; assert false + + let init () = + if Psmt2Frontend.Options.get_is_int_real () then diff --git a/alt-ergo.appdata.xml b/alt-ergo.metainfo.xml similarity index 62% rename from alt-ergo.appdata.xml rename to alt-ergo.metainfo.xml index 145c9a1..cff34da 100644 --- a/alt-ergo.appdata.xml +++ b/alt-ergo.metainfo.xml @@ -1,6 +1,6 @@ - - alt-ergo.desktop + + com.ocamlpro.alt-ergo CC0-1.0 CECILL-C Alt-Ergo @@ -17,13 +17,19 @@ by which it fully supports quantifiers.

+ com.ocamlpro.alt-ergo.desktop - http://jjames.fedorapeople.org/alt-ergo/altgr-ergo-screenshot.png + https://jjames.fedorapeople.org/alt-ergo/altgr-ergo-screenshot.png Basic Alt-Ergo usage - loganjerry@gmail.com - http://alt-ergo.ocamlpro.com/ + alt-ergo-maintainers@fedoraproject.org + https://alt-ergo.ocamlpro.com/ https://github.com/OCamlPro/alt-ergo/issues + https://alt-ergo.ocamlpro.com/#services + + + altgr-ergo +
diff --git a/alt-ergo.spec b/alt-ergo.spec index 927f026..3adb6d8 100644 --- a/alt-ergo.spec +++ b/alt-ergo.spec @@ -1,142 +1,522 @@ +# OCaml packages not built on i686 since OCaml 5 / Fedora 39. +ExcludeArch: %{ix86} + # rpmlint "no-binary" error is not really an error - see: # https://www.redhat.com/archives/fedora-packaging/2008-August/msg00017.html # and ocaml-ocamlgraph spec file for a discussion of this issue. -%global opt %(test -x %{_bindir}/ocamlopt && echo 1 || echo 0) -%if !%{opt} -%global debug_package %{nil} -%endif +# The major and minor releases contain a full tarball. Patch releases, however, +# contain only the parts that have changed, typically just the sources +# directory. Use this to set up everything appropriately. +%global minorver 2.3 +%global patchrel 3 Name: alt-ergo -Version: 1.30 -Release: 12%{?dist} +Version: %{minorver}.%{patchrel} +Release: 30%{?dist} Summary: Automated theorem prover including linear arithmetic -License: CeCILL-C -URL: http://alt-ergo.ocamlpro.com/ -Source0: http://alt-ergo.ocamlpro.com/http/%{name}-%{version}/%{name}-%{version}.tar.gz +# The top-level license files apply to the non-free main distribution of +# alt-ergo. The alt-ergo-free distribution, which we package, is distributed +# with the CeCILL-C license, as noted on the website and also in +# sources/tools/gui/main_gui.ml. +# The AB-Why3 plugin is LGPL-2.1-only WITH OCaml-LGPL-linking-exception +License: CECILL-C AND LGPL-2.1-only WITH OCaml-LGPL-linking-exception +URL: https://alt-ergo.ocamlpro.com/ +# The patch releases contain only the sources directory. The other files come +# from the minor releases. +Source0: https://alt-ergo.ocamlpro.com/http/%{name}-free-%{minorver}.0/%{name}-free-%{minorver}.0.tar.gz +%if 0%{?patchrel} > 0 +Source1: https://alt-ergo.ocamlpro.com/http/%{name}-free-%{version}/%{name}-free-%{version}.tar.gz +%endif # Created with gimp from official upstream icon -Source1: %{name}-icons.tar.xz -Source2: %{name}.desktop -Source3: %{name}.appdata.xml - -# Use the asmrun_pic variant when linking the binary. -Patch1: alt-ergo-1.30-use-pic.patch +Source2: %{name}-icons.tar.xz +Source3: %{name}.desktop +Source4: %{name}.metainfo.xml +# Do not use the deprecated Pervasives interface +Patch0: %{name}-pervasives.patch +# Adapt to recent changes in psmt2-frontend +Patch1: %{name}-psmt2-frontend.patch +# Temporarily use the menhir table backend instead of the code backend for the +# AB plugin. Menhir is unable to infer types with the current code and layout. +# Check each new release to see if this is still necessary. +Patch2: %{name}-menhir.patch +# Fedora does not need the forward compatibility seq and stdlib-shims packages +Patch3: %{name}-forward-compat.patch +# Dune 3 eliminated the external-lib-deps command +Patch4: %{name}-dune3.patch +# Avoid errors due to misplaced inline attributes +Patch5: %{name}-inline-error.patch BuildRequires: desktop-file-utils BuildRequires: gtksourceview2-devel -BuildRequires: ocaml -BuildRequires: ocaml-findlib +BuildRequires: libappstream-glib +BuildRequires: make +BuildRequires: ocaml >= 4.04.0 +BuildRequires: ocaml-dune BuildRequires: ocaml-lablgtk-devel +BuildRequires: ocaml-menhir BuildRequires: ocaml-num-devel -BuildRequires: ocaml-ocamlgraph-devel -BuildRequires: ocaml-ocplib-simplex-devel +BuildRequires: ocaml-ocplib-simplex-devel >= 0.4 +BuildRequires: ocaml-psmt2-frontend-devel >= 0.2 BuildRequires: ocaml-zarith-devel BuildRequires: ocaml-zip-devel +Requires: ocaml-alt-ergo-parsers%{?_isa} = %{version}-%{release} + +%global _desc %{expand:Alt-Ergo is an automated theorem prover implemented in OCaml. It is based on +CC(X) - a congruence closure algorithm parameterized by an equational theory +X. This algorithm is reminiscent of the Shostak algorithm. Currently CC(X) +is instantiated by the theory of linear arithmetics. Alt-Ergo also contains a +home made SAT-solver and an instantiation mechanism by which it fully supports +quantifiers.} + %description -Alt-Ergo is an automated theorem prover implemented in OCaml. It is -based on CC(X) - a congruence closure algorithm parameterized by an -equational theory X. This algorithm is reminiscent of the Shostak -algorithm. Currently CC(X) is instantiated by the theory of linear -arithmetics. Alt-Ergo also contains a home made SAT-solver and an -instantiation mechanism by which it fully supports quantifiers. +%_desc %package gui -Summary: Graphical front end for alt-ergo +Summary: Graphical front end for Alt-Ergo +License: CECILL-C Requires: %{name}%{?_isa} = %{version}-%{release} Requires: gtksourceview2 Requires: hicolor-icon-theme -Requires(post): coreutils -Requires(postun): coreutils - %description gui -A graphical front end for the alt-ergo theorem prover. +%_desc + +This package contains a graphical front end for the Alt-Ergo theorem prover. + +%package -n ocaml-alt-ergo-parsers +Summary: Parser library used by the Alt-Ergo SMT solver +License: CECILL-C +Requires: ocaml-alt-ergo-lib%{?_isa} = %{version}-%{release} + +%description -n ocaml-alt-ergo-parsers +%_desc + +This package contains the parser library used by the Alt-Ergo SMT solver. + +%package -n ocaml-alt-ergo-parsers-devel +Summary: Development files for ocaml-alt-ergo-parsers +License: CECILL-C +Requires: ocaml-alt-ergo-parsers%{?_isa} = %{version}-%{release} +Requires: ocaml-alt-ergo-lib-devel%{?_isa} = %{version}-%{release} +Requires: ocaml-psmt2-frontend-devel%{?_isa} +Requires: ocaml-zip-devel%{?_isa} + +%description -n ocaml-alt-ergo-parsers-devel +%_desc + +This package contains development files needed to build applications that use +the Alt-Ergo parser library. + +%package -n ocaml-alt-ergo-lib +Summary: Automated theorem prover library +License: CECILL-C + +%description -n ocaml-alt-ergo-lib +%_desc + +This package is the core of Alt-Ergo as an OCaml library. + +%package -n ocaml-alt-ergo-lib-devel +Summary: Development files for ocaml-alt-ergo-lib +License: CECILL-C +Requires: ocaml-alt-ergo-lib%{?_isa} = %{version}-%{release} +Requires: ocaml-num-devel%{?_isa} +Requires: ocaml-ocplib-simplex-devel%{?_isa} +Requires: ocaml-zarith-devel%{?_isa} + +%description -n ocaml-alt-ergo-lib-devel +%_desc + +This package contains development files needed to build applications that use +the Alt-Ergo library. %prep -%setup -q -%setup -q -T -D -a 1 +%autosetup -n %{name}-%{minorver}.0-free -N -a 2 -%patch1 -p1 - -cp -p %{SOURCE2} . - -# Fix encoding -iconv -f ISO-8859-1 -t UTF-8 -o LICENSE.utf8 LICENSE -touch -r LICENSE LICENSE.utf8 -mv -f LICENSE.utf8 LICENSE - -# Use Fedora LDFLAGS -sed -i "s|^OFLAGS =.*|& -g|" Makefile.users -for arg in $RPM_LD_FLAGS; do - sed -i "s|^OFLAGS =.*-g|& -ccopt $arg|" Makefile.users -done - -%build -%configure - -%if ! %{opt} -%global opt_option OCAMLBEST=byte OCAMLC=ocamlc OCAMLLEX=ocamllex -%else -%global opt_option OCAMLBEST=opt OCAMLOPT=ocamlopt.opt +%if 0%{?patchrel} > 0 +# See above. Replace the minor release sources with the patch release sources. +rm -rf sources +tar xf %{SOURCE1} %endif -make %{opt_option} -make %{opt_option} gui +%autopatch -p1 + +%conf +cd sources +cp -p %{SOURCE3} com.ocamlpro.%{name}.desktop + +# Unzip an example +cd examples/AB-Why3-plugin +unzip p4_34.why.zip +rm p4_34.why.zip +cd - + +%ifnarch %{ocaml_native_compiler} +# Do not require native plugins +sed -i '/cmxs/d' plugins/{AB-Why3,fm-simplex}/dune +%endif + +# This is not an autoconf-generated script. Do NOT use %%configure. +./configure --prefix=%{_prefix} --libdir=%{ocamldir} --sharedir=%{ocamldir} + +%build +cd sources +%make_build %install -mkdir -p %{buildroot}%{_bindir} -make %{opt_option} DESTDIR=%{buildroot} install install-gui +cd sources +%make_install -# Move the gtksourceview file to the right place -mv %{buildroot}%{_datadir}/%{name}/gtksourceview-2.0 %{buildroot}%{_datadir} -rmdir %{buildroot}%{_datadir}/%{name} +# We do not want the ml files +find %{buildroot}%{ocamldir} -name \*.ml -delete + +# We install the documentation with the doc macro +rm -fr %{buildroot}%{_prefix}/doc + +# Install the man page +mkdir -p %{buildroot}%{_mandir}/man1 +cp -p doc/alt-ergo.1 %{buildroot}%{_mandir}/man1 + +# The install target in the Makefile puts these in the wrong place +mv %{buildroot}%{_datadir}/alt-ergo/{plugins,preludes} \ + %{buildroot}%{ocamldir}/alt-ergo +rmdir %{buildroot}%{_datadir}/alt-ergo + +# Install the gtksourceview file +mkdir -p %{buildroot}%{_datadir}/gtksourceview-2.0/language-specs +cp -p doc/gtk-lang/alt-ergo.lang \ + %{buildroot}%{_datadir}/gtksourceview-2.0/language-specs # Install the desktop file mkdir -p %{buildroot}%{_datadir}/applications -desktop-file-install --dir %{buildroot}%{_datadir}/applications %{name}.desktop +desktop-file-install --dir %{buildroot}%{_datadir}/applications \ + com.ocamlpro.%{name}.desktop # Install the AppData file -mkdir -p %{buildroot}%{_datadir}/appdata -install -pm 644 %{SOURCE3} %{buildroot}%{_datadir}/appdata +mkdir -p %{buildroot}%{_metainfodir} +install -pm 644 %{SOURCE4} \ + %{buildroot}%{_metainfodir}/com.ocamlpro.%{name}.metainfo.xml +appstream-util validate-relax --nonet \ + %{buildroot}%{_metainfodir}/com.ocamlpro.%{name}.metainfo.xml # Install the icons +cd - mkdir -p %{buildroot}%{_datadir}/icons cp -a icons %{buildroot}%{_datadir}/icons/hicolor +# Put something interesting into the META files +cat > %{buildroot}%{ocamldir}/alt-ergo/META << EOF +version = "%{version}" +description = "Automated theorem prover including linear arithmetic" +requires = "" +EOF +rm %{buildroot}%{ocamldir}/{alt-ergo-free,altgr-ergo}/META +ln %{buildroot}%{ocamldir}/alt-ergo/META \ + %{buildroot}%{ocamldir}/alt-ergo-free/META +ln %{buildroot}%{ocamldir}/alt-ergo/META \ + %{buildroot}%{ocamldir}/altgr-ergo/META + %check -# Test alt-ergo on the examples. -%define altergo %{buildroot}%{_bindir}/alt-ergo -cd examples/valid -for fil in *.why; do - if ! %{altergo} $fil | grep -Fq Valid; then - echo $fil was not found valid - exit 1 - fi -done -cd ../invalid -for fil in *.why; do - if %{altergo} $fil | grep -Fq Valid; then - echo $fil was erroneously found valid - exit 1 - fi -done +cd sources +%dune_check %files -%doc README.md CHANGES examples -%license COPYING.md LICENSE +%doc README.md sources/CHANGES sources/examples publications/*.pdf %{_bindir}/%{name} %{_mandir}/man1/alt-ergo.1.* +%{ocamldir}/%{name}/ +%{ocamldir}/%{name}-free/ %files gui %{_bindir}/altgr-ergo -%{_datadir}/appdata/%{name}.appdata.xml -%{_datadir}/applications/%{name}.desktop +%{_datadir}/applications/com.ocamlpro.%{name}.desktop %{_datadir}/gtksourceview-2.0/language-specs/%{name}.lang %{_datadir}/icons/hicolor/*/apps/%{name}.png +%{ocamldir}/altgr-ergo/ +%{_metainfodir}/com.ocamlpro.%{name}.metainfo.xml + +%files -n ocaml-%{name}-parsers +%dir %{ocamldir}/%{name}-parsers/ +%{ocamldir}/%{name}-parsers/META +%{ocamldir}/%{name}-parsers/*.cma +%{ocamldir}/%{name}-parsers/*.cmi +%ifarch %{ocaml_native_compiler} +%{ocamldir}/%{name}-parsers/*.cmxs +%endif +%{ocamldir}/%{name}-parsers-free/ + +%files -n ocaml-%{name}-parsers-devel +%{ocamldir}/%{name}-parsers/dune-package +%{ocamldir}/%{name}-parsers/opam +%ifarch %{ocaml_native_compiler} +%{ocamldir}/%{name}-parsers/*.a +%{ocamldir}/%{name}-parsers/*.cmx +%{ocamldir}/%{name}-parsers/*.cmxa +%endif +%{ocamldir}/%{name}-parsers/*.mli +%{ocamldir}/%{name}-parsers/*.cmt +%{ocamldir}/%{name}-parsers/*.cmti + +%files -n ocaml-%{name}-lib +%dir %{ocamldir}/%{name}-lib/ +%license LGPL-License.txt LICENSE.md License.OCamlPro +%{ocamldir}/%{name}-lib/META +%{ocamldir}/%{name}-lib/*.cma +%{ocamldir}/%{name}-lib/*.cmi +%ifarch %{ocaml_native_compiler} +%{ocamldir}/%{name}-lib/*.cmxs +%endif +%{ocamldir}/%{name}-lib-free/ + +%files -n ocaml-%{name}-lib-devel +%{ocamldir}/%{name}-lib/dune-package +%{ocamldir}/%{name}-lib/opam +%{ocamldir}/%{name}-lib/frontend/ +%{ocamldir}/%{name}-lib/reasoners/ +%{ocamldir}/%{name}-lib/structures/ +%{ocamldir}/%{name}-lib/util/ +%ifarch %{ocaml_native_compiler} +%{ocamldir}/%{name}-lib/*.a +%{ocamldir}/%{name}-lib/*.cmx +%{ocamldir}/%{name}-lib/*.cmxa +%endif +%{ocamldir}/%{name}-lib/*.cmt +%{ocamldir}/%{name}-lib/*.cmti %changelog +* Fri Jan 16 2026 Fedora Release Engineering - 2.3.3-30 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Tue Oct 14 2025 Richard W.M. Jones - 2.3.3-29 +- OCaml 5.4.0 rebuild + +* Tue Sep 16 2025 Jerry James - 2.3.3-28 +- Rebuild for ocaml-menhir 20250912 + +* Fri Sep 05 2025 Jerry James - 2.3.3-27 +- Rebuild for ocaml-menhir 20250903 + +* Wed Jul 23 2025 Fedora Release Engineering - 2.3.3-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Fri Jul 11 2025 Jerry James - 2.3.3-25 +- Rebuild to fix OCaml dependencies + +* Thu Jan 16 2025 Fedora Release Engineering - 2.3.3-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Jan 9 2025 Jerry James - 2.3.3-23 +- OCaml 5.3.0 rebuild for Fedora 42 +- Correct License fields from Apache-2.0 to CECILL-C +- Do configuration steps in %%conf + +* Mon Aug 5 2024 Jerry James - 2.3.3-22 +- Rebuild for ocaml-menhir 20240715 and ocaml-zip 1.12 + +* Wed Jul 17 2024 Fedora Release Engineering - 2.3.3-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Tue Jul 16 2024 Jerry James - 2.3.3-20 +- Rebuild for ocaml-zarith 1.14 + +* Wed Jun 19 2024 Richard W.M. Jones - 2.3.3-19 +- OCaml 5.2.0 ppc64le fix + +* Wed May 29 2024 Richard W.M. Jones - 2.3.3-18 +- OCaml 5.2.0 for Fedora 41 + +* Thu May 23 2024 Jerry James - 2.3.3-17 +- Add patch to fix misplaced inline attributes + +* Fri Feb 2 2024 Jerry James - 2.3.3-17 +- Rebuild for changed ocamlx(Dynlink) hash + +* Mon Jan 22 2024 Fedora Release Engineering - 2.3.3-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 2.3.3-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Jan 2 2024 Jerry James - 2.3.3-14 +- Rebuild for ocaml-num and ocaml-menhir 20231231 + +* Mon Dec 18 2023 Richard W.M. Jones - 2.3.3-13 +- OCaml 5.1.1 + s390x code gen fix for Fedora 40 + +* Tue Dec 12 2023 Richard W.M. Jones - 2.3.3-12 +- OCaml 5.1.1 rebuild for Fedora 40 + +* Thu Oct 05 2023 Richard W.M. Jones - 2.3.3-11 +- OCaml 5.1 rebuild for Fedora 40 + +* Thu Jul 27 2023 Jerry James - 2.3.3-10 +- Rebuild for ocaml-zarith 1.13 + +* Wed Jul 19 2023 Fedora Release Engineering - 2.3.3-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 18 2023 Jerry James - 2.3.3-8 +- Validate appdata with appstream-util + +* Wed Jul 12 2023 Richard W.M. Jones - 2.3.3-8 +- OCaml 5.0 rebuild for Fedora 39 + +* Mon Jul 10 2023 Jerry James - 2.3.3-7 +- OCaml 5.0.0 rebuild + +* Fri Mar 24 2023 Jerry James - 2.3.3-6 +- Dune 3.7.0 changed the install location of mli files + +* Tue Jan 24 2023 Richard W.M. Jones - 2.3.3-5 +- Rebuild OCaml packages for F38 + +* Wed Jan 18 2023 Fedora Release Engineering - 2.3.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Aug 11 2022 Jerry James - 2.3.3-3 +- Convert License tag to SPDX +- Note that the AB plugin has a different license + +* Wed Jul 20 2022 Fedora Release Engineering - 2.3.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 5 2022 Jerry James - 2.3.3-2 +- Patch out uses of the dune external-lib-deps command +- Patch out references to the seq forward compatibility module +- Use new OCaml macros + +* Mon Jun 20 2022 Jerry James - 2.3.3-1 +- Version 2.3.3 +- Add -menhir patch to fix FTBFS +- Add -stdlib-shims patch since Fedora does not need stdlib-shims + +* Sun Jun 19 2022 Richard W.M. Jones - 2.3.0-5 +- OCaml 4.14.0 rebuild + +* Mon Feb 28 2022 Jerry James - 2.3.0-4 +- Switch to the correct tarball +- Drop unneeded ocaml-findlib BR +- Add dependency on ocaml-alt-ergo-parsers from ocaml-alt-ergo-parsers-devel + +* Fri Feb 04 2022 Richard W.M. Jones - 2.3.0-3 +- OCaml 4.13.1 rebuild to remove package notes + +* Wed Jan 19 2022 Fedora Release Engineering - 2.3.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Dec 27 2021 Jerry James - 2.3.0-1 +- Version 2.3.0 +- New ocaml-alt-ergo-lib and ocaml-alt-ergo-parsers subpackages + +* Tue Oct 05 2021 Richard W.M. Jones - 2.2.0-14 +- OCaml 4.13.1 build + +* Thu Jul 29 2021 Jerry James - 2.2.0-13 +- Rebuild for changed ocamlx(Dynlink) + +* Wed Jul 21 2021 Fedora Release Engineering - 2.2.0-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 19 2021 Jerry James - 2.2.0-11 +- Move META to the main package + +* Tue Jun 22 2021 Jerry James - 2.2.0-11 +- Rebuild for ocaml-lablgtk without gnomeui + +* Wed Mar 3 2021 Jerry James - 2.2.0-10 +- Rebuild for ocaml-zarith 1.12 + +* Tue Mar 2 11:26:14 GMT 2021 Richard W.M. Jones - 2.2.0-9 +- OCaml 4.12.0 build + +* Thu Feb 4 2021 Jerry James - 2.2.0-8 +- Updates to the desktop and metainfo files +- Add -pervasives patch + +* Tue Jan 26 2021 Fedora Release Engineering - 2.2.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Nov 16 2020 Jerry James - 2.2.0-6 +- Rebuild for ocaml-zarith 1.11 + +* Fri Sep 25 2020 Jerry James - 2.2.0-5 +- Rebuild for ocaml-zarith 1.10 + +* Tue Sep 01 2020 Richard W.M. Jones - 2.2.0-4 +- OCaml 4.11.1 rebuild + +* Fri Aug 21 2020 Richard W.M. Jones - 2.2.0-3 +- OCaml 4.11.0 rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 2.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jun 19 2020 Jerry James - 2.2.0-1 +- Version 2.2.0 +- Drop upstreamed -newline patch + +* Tue May 05 2020 Richard W.M. Jones - 2.0.0-15 +- OCaml 4.11.0+dev2-2020-04-22 rebuild + +* Wed Apr 22 2020 Richard W.M. Jones - 2.0.0-14 +- OCaml 4.11.0 pre-release attempt 2 + +* Wed Apr 8 2020 Jerry James - 2.0.0-13 +- Filter out Requires for private interfaces we do not Provide + +* Fri Apr 03 2020 Richard W.M. Jones - 2.0.0-12 +- Update all OCaml dependencies for RPM 4.16. + +* Mon Mar 30 2020 Jerry James - 2.0.0-11 +- Rebuild for ocaml-zip 1.10 + +* Tue Mar 24 2020 Jerry James - 2.0.0-10 +- Rebuild for ocaml-menhir 20200211 + +* Wed Feb 26 2020 Richard W.M. Jones - 2.0.0-9 +- OCaml 4.10.0 final. + +* Tue Jan 28 2020 Fedora Release Engineering - 2.0.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Sun Jan 19 2020 Richard W.M. Jones - 2.0.0-7 +- OCaml 4.10.0+beta1 rebuild. + +* Fri Dec 06 2019 Richard W.M. Jones - 2.0.0-6 +- OCaml 4.09.0 (final) rebuild. + +* Fri Sep 6 2019 Jerry James - 2.0.0-5 +- Rebuild for ocaml-zarith 1.9 + +* Fri Aug 16 2019 Richard W.M. Jones - 2.0.0-4 +- OCaml 4.08.1 (final) rebuild. + +* Wed Jul 31 2019 Richard W.M. Jones - 2.0.0-3 +- OCaml 4.08.1 (rc2) rebuild. + +* Wed Jul 24 2019 Fedora Release Engineering - 2.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Wed Jun 5 2019 Jerry James - 2.0.0-1 +- Update to version 2.0.0 +- Add -newline patch to fix FTBFS +- Add a 256x256 icon + +* Thu Jan 31 2019 Fedora Release Engineering - 1.30-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jul 12 2018 Fedora Release Engineering - 1.30-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Jul 11 2018 Richard W.M. Jones - 1.30-14 +- OCaml 4.07.0 (final) rebuild. + +* Wed Jun 20 2018 Richard W.M. Jones - 1.30-13 +- OCaml 4.07.0-rc1 rebuild. + * Wed Feb 07 2018 Fedora Release Engineering - 1.30-12 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild diff --git a/sources b/sources index 6f0dcae..2e808e5 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ -c7100ebd625fbd7d3e5247dbac689748 alt-ergo-1.30.tar.gz -90052f03870cc94a1ceb8ac3fae77b7b alt-ergo-icons.tar.xz +SHA512 (alt-ergo-free-2.3.0.tar.gz) = e15efc6bbde59065c6ccaf1ef2f8158b8b9be4b00b2c2365e5eeb7d7114be72c47c813fc06880a6278edd7e288f24ef4588c88e0630d9bda9378a3eda3fd07ca +SHA512 (alt-ergo-free-2.3.3.tar.gz) = 0dc056c02c8ffdeb9eeaa127dd204d30a0ee95ffe38aa3f1a608b17019f377ea6520ccfc9cb09b109deac5f19e7e695b7e6ec18db969843312cfb17f3950c9ba +SHA512 (alt-ergo-icons.tar.xz) = cb2e93bab3359f6f198e80e3e68840ed4b25a213b61f388a2de8abc299fd3c89240f64f610290ac89e6005088c484b2718a68ec18063076f73d7871a38ee038f