support sub-directories, i.e. structure module names;
--- a/src/Tools/Haskell/Build.thy Mon Nov 05 15:00:55 2018 +0100
+++ b/src/Tools/Haskell/Build.thy Mon Nov 05 15:04:31 2018 +0100
@@ -7,18 +7,17 @@
theory Build imports Haskell
begin
-ML_command \<open>
+ML \<open>
Isabelle_System.with_tmp_dir "ghc" (fn dir =>
let
+ val _ = Haskell.install_sources dir;
val (out, rc) =
Isabelle_System.bash_output
(cat_lines
["set -e",
"cd " ^ File.bash_path dir,
- "cp " ^ File.bash_paths Haskell.source_modules ^ " .",
- "\"$ISABELLE_GHC\" " ^ File.bash_paths (map Path.base Haskell.source_modules)]);
- in if rc = 0 then writeln out else error out end
- )
+ "\"$ISABELLE_GHC\" " ^ File.bash_paths Haskell.sources]);
+ in if rc = 0 then writeln out else error out end)
\<close>
end
--- a/src/Tools/Haskell/haskell.ML Mon Nov 05 15:00:55 2018 +0100
+++ b/src/Tools/Haskell/haskell.ML Mon Nov 05 15:04:31 2018 +0100
@@ -10,7 +10,8 @@
Toplevel.transition -> Toplevel.transition
val export_file_cmd: string * Input.source ->
Toplevel.transition -> Toplevel.transition
- val source_modules: Path.T list
+ val sources: Path.T list
+ val install_sources: Path.T -> unit
end;
structure Haskell: HASKELL =
@@ -43,15 +44,20 @@
in () end);
-(* source modules *)
+(* sources *)
-val source_modules =
- [\<^file>\<open>~~/src/Tools/Haskell/Library.hs\<close>,
- \<^file>\<open>~~/src/Tools/Haskell/Value.hs\<close>,
- \<^file>\<open>~~/src/Tools/Haskell/Buffer.hs\<close>,
- \<^file>\<open>~~/src/Tools/Haskell/Properties.hs\<close>,
- \<^file>\<open>~~/src/Tools/Haskell/Markup.hs\<close>,
- \<^file>\<open>~~/src/Tools/Haskell/XML.hs\<close>,
- \<^file>\<open>~~/src/Tools/Haskell/YXML.hs\<close>];
+val sources =
+ [\<^path>\<open>Library.hs\<close>,
+ \<^path>\<open>Value.hs\<close>,
+ \<^path>\<open>Buffer.hs\<close>,
+ \<^path>\<open>Properties.hs\<close>,
+ \<^path>\<open>Markup.hs\<close>,
+ \<^path>\<open>XML.hs\<close>,
+ \<^path>\<open>YXML.hs\<close>];
+
+val master_dir = Resources.master_directory \<^theory>;
+
+fun install_sources dir =
+ sources |> List.app (fn path => Isabelle_System.copy_file_base (master_dir, path) dir);
end;