support sub-directories, i.e. structure module names;
authorwenzelm
Mon, 05 Nov 2018 15:04:31 +0100
changeset 69239 6cd985a78d6e
parent 69238 d98cfb369cbd
child 69240 16ca270090b6
support sub-directories, i.e. structure module names;
src/Tools/Haskell/Build.thy
src/Tools/Haskell/haskell.ML
--- 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;