From 2697ffb1b95dbe12d7781d93c914f85b680397b2 Mon Sep 17 00:00:00 2001
From: Jean-Marie Madiot <jean-marie.madiot@inria.fr>
Date: Thu, 22 May 2025 14:43:02 +0200
Subject: [PATCH] moving extracted file to dedicated package

---
 coq-osiris/dune-project                       |  5 +++++
 coq-osiris/extracted.opam                     | 20 +++++++++++++++++++
 coq-osiris/interp/E2O.ml                      | 10 +++++-----
 coq-osiris/interp/E2O.mli                     |  8 ++++----
 coq-osiris/interp/O2E.ml                      | 12 +++++------
 coq-osiris/interp/O2E.mli                     |  8 ++++----
 coq-osiris/interp/dune                        | 14 +------------
 coq-osiris/interp/extracted/dune              | 17 ++++++++++++++++
 coq-osiris/interp/{ => extracted}/extract.v   |  0
 .../remove_generated_ml_files.sh              |  0
 coq-osiris/interp/interp.ml                   | 12 +++++------
 osiris/src/Dune.ml                            |  4 ++--
 12 files changed, 70 insertions(+), 40 deletions(-)
 create mode 100644 coq-osiris/extracted.opam
 create mode 100644 coq-osiris/interp/extracted/dune
 rename coq-osiris/interp/{ => extracted}/extract.v (100%)
 rename coq-osiris/interp/{ => extracted}/remove_generated_ml_files.sh (100%)

diff --git a/coq-osiris/dune-project b/coq-osiris/dune-project
index 4daef423..cff61179 100644
--- a/coq-osiris/dune-project
+++ b/coq-osiris/dune-project
@@ -54,6 +54,11 @@
   ; TODO
 )
 
+(package
+  (name extracted)
+  ; TODO
+)
+
 (package
   (name osiris-interpreter)
   ; TODO
diff --git a/coq-osiris/extracted.opam b/coq-osiris/extracted.opam
new file mode 100644
index 00000000..239eb585
--- /dev/null
+++ b/coq-osiris/extracted.opam
@@ -0,0 +1,20 @@
+# This file is generated by dune, edit dune-project instead
+opam-version: "2.0"
+depends: [
+  "dune" {>= "3.8"}
+  "odoc" {with-doc}
+]
+build: [
+  ["dune" "subst"] {dev}
+  [
+    "dune"
+    "build"
+    "-p"
+    name
+    "-j"
+    jobs
+    "@install"
+    "@runtest" {with-test}
+    "@doc" {with-doc}
+  ]
+]
diff --git a/coq-osiris/interp/E2O.ml b/coq-osiris/interp/E2O.ml
index 0ca5d620..e4882010 100644
--- a/coq-osiris/interp/E2O.ml
+++ b/coq-osiris/interp/E2O.ml
@@ -1,8 +1,8 @@
 (* Extracted modules *)
-open BinNums
-open Datatypes
-open String
-open Ascii
+open Extracted.BinNums
+open Extracted.Datatypes
+open Extracted.String
+open Extracted.Ascii
 (* OCaml's standard library *)
 open Stdlib
 
@@ -37,7 +37,7 @@ let string s =
 (** Syntax types *)
 
 module O = Translatorlib.Syntax
-module E = Syntax
+module E = Extracted.Syntax
 
 let var = string
 let name = string
diff --git a/coq-osiris/interp/E2O.mli b/coq-osiris/interp/E2O.mli
index 1a3a0083..ac0230d8 100644
--- a/coq-osiris/interp/E2O.mli
+++ b/coq-osiris/interp/E2O.mli
@@ -1,5 +1,5 @@
-open BinNums
-open Datatypes
+open Extracted.BinNums
+open Extracted.Datatypes
 
 (** Conversions from extracted (E) to manually-defined-in-OCaml types (O) *)
 
@@ -16,10 +16,10 @@ val z : coq_Z -> int
 val nat : nat -> int
 val list : ('a -> 'b) -> 'a list -> 'b Stdlib.List.t
 val prod : ('a1 -> 'b1) -> ('a2 -> 'b2) -> ('a1 * 'a2) -> ('b1 * 'b2)
-val string : String.string -> Stdlib.String.t
+val string : Extracted.String.string -> Stdlib.String.t
 
 module O = Translatorlib.Syntax
-module E = Syntax (* from syntax.ml, extracted from syntax.v *)
+module E = Extracted.Syntax (* from syntax.ml, extracted from syntax.v *)
 
 (* Enumeration of [val ty : E.ty -> O.ty] for each syntax type [ty] *)
 
diff --git a/coq-osiris/interp/O2E.ml b/coq-osiris/interp/O2E.ml
index 8e70f3ff..1bf8bbec 100644
--- a/coq-osiris/interp/O2E.ml
+++ b/coq-osiris/interp/O2E.ml
@@ -1,8 +1,8 @@
 (* Extracted modules *)
-open BinNums
-open Datatypes
-open String
-open Ascii
+open Extracted.BinNums
+open Extracted.Datatypes
+open Extracted.String
+open Extracted.Ascii
 (* OCaml's standard library *)
 open Stdlib
 
@@ -35,7 +35,7 @@ let string s = String.fold_right (fun c a -> String (char c, a)) s EmptyString
 (** Syntax types *)
 
 module O = Translatorlib.Syntax
-module E = Syntax
+module E = Extracted.Syntax
 
 let var = string
 let name = string
@@ -142,7 +142,7 @@ and rec_binding : O.rec_binding -> E.rec_binding = function
 
 and anonfun : O.anonfun -> E.anonfun = function
   | AnonFun (v, e) -> AnonFun (var v, expr e)
-  | AnonFunction bs -> Sugar.coq_AnonFunction (branches bs)
+  | AnonFunction bs -> Extracted.Sugar.coq_AnonFunction (branches bs)
 
 and mexpr : O.mexpr -> E.mexpr = function
   | MUnsupported -> MUnsupported
diff --git a/coq-osiris/interp/O2E.mli b/coq-osiris/interp/O2E.mli
index fc3b1981..39be3389 100644
--- a/coq-osiris/interp/O2E.mli
+++ b/coq-osiris/interp/O2E.mli
@@ -1,5 +1,5 @@
-open BinNums
-open Datatypes
+open Extracted.BinNums
+open Extracted.Datatypes
 
 (** Conversions from manually-defined-in-OCaml (O) to extracted types (E) *)
 
@@ -8,10 +8,10 @@ open Datatypes
 val z : int -> coq_Z
 val nat : int -> nat
 val list : ('a -> 'b) -> 'a Stdlib.List.t -> 'b list
-val string : Stdlib.String.t -> String.string
+val string : Stdlib.String.t -> Extracted.String.string
 
 module O = Translatorlib.Syntax
-module E = Syntax
+module E = Extracted.Syntax
 
 (* [val ty : O.ty -> E.ty] *)
 
diff --git a/coq-osiris/interp/dune b/coq-osiris/interp/dune
index 0cc63364..69bda960 100644
--- a/coq-osiris/interp/dune
+++ b/coq-osiris/interp/dune
@@ -4,17 +4,5 @@
   (name interp)
   ; TODO make flags more specific, e.g. to extracted code or conversion modules
   (flags :standard "-w" "A-40-41-42-44-45")
-  (libraries translatorlib)
-)
-
-(coq.extraction
-  (prelude extract)
-  (theories stdpp iris Ltac2 osiris Equations)
-  (extracted_modules
-    Datatypes Specif Decimal Basics Bool Orders List base BinNums BinPosDef
-    BinPos BinNat Ascii BinInt ZArith_dec String Zpower option numbers list0
-    countable void infinite fin_sets fin_maps mapset gmap locations PrimFloat
-    Coqlib Zbits Integers int syntax sugar outcome code Mergesort options
-    eval_strat eval step DecimalString Externals oStdlib run
- )
+  (libraries translatorlib extracted)
 )
diff --git a/coq-osiris/interp/extracted/dune b/coq-osiris/interp/extracted/dune
new file mode 100644
index 00000000..cb92c4ca
--- /dev/null
+++ b/coq-osiris/interp/extracted/dune
@@ -0,0 +1,17 @@
+(library
+  (package extracted)
+  (name extracted)
+  (flags :standard "-w" "A-40-41-42-44-45")
+)
+
+(coq.extraction
+  (prelude extract)
+  (theories stdpp iris Ltac2 osiris Equations)
+  (extracted_modules
+    Datatypes Specif Decimal Basics Bool Orders List base BinNums BinPosDef
+    BinPos BinNat Ascii BinInt ZArith_dec String Zpower option numbers list0
+    countable void infinite fin_sets fin_maps mapset gmap locations PrimFloat
+    Coqlib Zbits Integers int syntax sugar outcome code Mergesort options
+    eval_strat eval step DecimalString Externals oStdlib run
+ )
+)
diff --git a/coq-osiris/interp/extract.v b/coq-osiris/interp/extracted/extract.v
similarity index 100%
rename from coq-osiris/interp/extract.v
rename to coq-osiris/interp/extracted/extract.v
diff --git a/coq-osiris/interp/remove_generated_ml_files.sh b/coq-osiris/interp/extracted/remove_generated_ml_files.sh
similarity index 100%
rename from coq-osiris/interp/remove_generated_ml_files.sh
rename to coq-osiris/interp/extracted/remove_generated_ml_files.sh
diff --git a/coq-osiris/interp/interp.ml b/coq-osiris/interp/interp.ml
index 3c2452a3..9b67eed8 100644
--- a/coq-osiris/interp/interp.ml
+++ b/coq-osiris/interp/interp.ml
@@ -1,8 +1,8 @@
 open Printf
 
 (* Extracted modules *)
-open Syntax
-open Run
+open Extracted.Syntax
+open Extracted.Run
 
 (* OCaml's stdlib; shadows some extracted modules such as List and String *)
 open Stdlib
@@ -212,18 +212,18 @@ let () =
     Translate.unit (Some filename) typedtree.structure in
   if !show_ast then
     fprintf stdout "Typed tree:\n%s\n\n" (Translatorlib.Syntax.show_mexpr mexpr);
-  let mexpr : Syntax.mexpr = O2E.mexpr mexpr in
+  let mexpr : Extracted.Syntax.mexpr = O2E.mexpr mexpr in
 
   flush_all ();
 
   (* Choose evaluation options between "default" and "careful" *)
-  let opt = if !noorder then Options.careful_eval_options
-    else Options.default_eval_options in
+  let opt = if !noorder then Extracted.Options.careful_eval_options
+    else Extracted.Options.default_eval_options in
 
   (* Make [mexpr] into a configuration (store, micro) *)
   let env = io_env @ effect_stdlib_env in
   let store = io_store in
-  let config = (store, Eval_strat.eval_mexpr opt env mexpr) in
+  let config = (store, Extracted.Eval_strat.eval_mexpr opt env mexpr) in
 
   if !detcheck then
     match determinism_check opt config with
diff --git a/osiris/src/Dune.ml b/osiris/src/Dune.ml
index 98a96504..a6ec8750 100644
--- a/osiris/src/Dune.ml
+++ b/osiris/src/Dune.ml
@@ -51,8 +51,8 @@ let rec extract_module_descriptions (e : Base.Sexp.t) accu =
   | List (Atom "executables" :: [List (List (Atom "names" :: [List [Atom "interp"]]) :: _)]) ->
     Printf.fprintf stderr "Warning: extract_module_descriptions: skipping S-expression (executables ((names (interp)) ...))\n";
     accu
-  | List [Atom "library"; List (List [Atom "name"; Atom "translatorlib"] :: _)] ->
-    Printf.fprintf stderr "Warning: extract_module_descriptions: skipping S-expression (library ((name translatorlib) ...))\n";
+  | List [Atom "library"; List (List [Atom "name"; Atom ("translatorlib" | "extracted" as name)] :: _)] ->
+    Printf.fprintf stderr "Warning: extract_module_descriptions: skipping S-expression (library ((name %s) ...))\n" name;
     accu
   | _ ->
   match [%of_sexp: module_description] e with
-- 
GitLab