]> Repositorios git - scryer-prolog.git/commitdiff
target out_dir in build script
authorMark Thom <[email protected]>
Fri, 27 Sep 2019 06:05:19 +0000 (00:05 -0600)
committerMark Thom <[email protected]>
Fri, 27 Sep 2019 06:05:19 +0000 (00:05 -0600)
build.rs
src/prolog/machine/compile.rs
src/prolog/machine/mod.rs
src/tests.rs

index bee74697385c5ee60cbc6daa09549e3c5aed0925..6628f394d5d26349c6d20e92a6f6c9573b8d8f35 100644 (file)
--- a/build.rs
+++ b/build.rs
@@ -2,13 +2,15 @@ extern crate indexmap;
 
 use indexmap::IndexSet;
 
-use std::fs::{File, read_dir};
+use std::env;
+use std::fs::{File, copy, read_dir};
 use std::io::Write;
 use std::path::Path;
 
 fn main()
 {
-    let dest_path = Path::new("./src/prolog/machine/libraries.rs");
+    let out_dir = env::var("OUT_DIR").unwrap();
+    let dest_path = Path::new(&out_dir).join("libraries.rs");
 
     let mut libraries = File::create(&dest_path).unwrap();
     let mut library_index = IndexSet::new();
@@ -18,14 +20,20 @@ fn main()
     for item in paths {
         let item = item.unwrap().path();
 
-        if item.is_file() {
+        if let Some(file_name) = item.file_name() {
             if let Some(ext) = item.extension() {
                 if ext == "pl" {
                     let file_stem = item.file_stem().unwrap();
                     let file_str  = file_stem.to_string_lossy().to_uppercase();
+                    let dest = Path::new(&out_dir).join(file_name);
 
-                    let include_line = format!("static {}: &str = include_str!(\"{}/{}.pl\");\n",
-                                               file_str, "../lib", file_stem.to_string_lossy());
+                    match copy(&item, dest) {
+                        Ok(_) => {},
+                        Err(e) => panic!("die: {:?}", e)
+                    };
+
+                    let include_line = format!("static {}: &str = include_str!(\"{}.pl\");\n",
+                                               file_str, file_stem.to_string_lossy());
 
                     libraries.write_all(include_line.as_bytes()).unwrap();
                     library_index.insert(file_stem.to_string_lossy().to_string());
index c6818c39a8e59014bc5c6a3d84c9b6822df24cbe..0568e26c7c36a108ee4b0c158793287ca34e451c 100644 (file)
@@ -790,8 +790,7 @@ impl ListingCompiler {
             &Declaration::Hook(hook, _, ref queue) if !hook.has_module_scope() => {
                 worker.term_stream.incr_expansion_lens(hook, 1, queue.len())
             }
-            &Declaration::UseModule(ModuleSource::File(_))
-            | &Declaration::UseQualifiedModule(ModuleSource::File(_), _) => {
+            &Declaration::UseModule(_) | &Declaration::UseQualifiedModule(..) => {
                 update_expansion_lengths = true
             }
             _ => {}
index 2ed98032372a4db49df6b8c6018f80612d2bdbe9..a7b093a4cd803b55c166438c83c870cf1dcac9d0 100644 (file)
@@ -163,7 +163,7 @@ impl SubModuleUser for IndexStore {
     }
 }
 
-include!("libraries.rs");
+include!(concat!(env!("OUT_DIR"), "/libraries.rs"));
 
 static TOPLEVEL: &str = include_str!("../toplevel.pl");
 
index d8857b38e1f7320e5ba1f45af85748c84f55b5b0..cbb7a8be175f9cdc18bfddce0351936c13e1d603 100644 (file)
@@ -1790,13 +1790,13 @@ fn test_queries_on_conditionals() {
 fn test_queries_on_modules() {
     let mut wam = Machine::new(readline::input_stream());
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/lists.pl').");
+    submit(&mut wam, ":- use_module(library(lists)).");
 
     submit_code(
         &mut wam,
         "
 :- module(my_lists, [local_member/2, reverse/2]).
-:- use_module('src/prolog/lib/lists.pl', [member/2]).
+:- use_module(library(lists), [member/2]).
 
 local_member(X, Xs) :- member(X, Xs).
 
@@ -1826,7 +1826,7 @@ reverse(Xs, Ys) :- lists:reverse(Xs, Ys).",
 
     submit(
         &mut wam,
-        ":- use_module('src/prolog/lib/lists.pl', [reverse/2]).",
+        ":- use_module(library(lists), [reverse/2]).",
     );
 
     assert_prolog_success!(
@@ -1836,7 +1836,7 @@ reverse(Xs, Ys) :- lists:reverse(Xs, Ys).",
     );
     assert_prolog_success!(&mut wam, "reverse(_, _).");
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/lists.pl', []).");
+    submit(&mut wam, ":- use_module(library(lists), []).");
 
     assert_prolog_success!(
         &mut wam,
@@ -1849,7 +1849,7 @@ reverse(Xs, Ys) :- lists:reverse(Xs, Ys).",
 fn test_queries_on_builtins() {
     let mut wam = Machine::new(readline::input_stream());
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/lists.pl').");
+    submit(&mut wam, ":- use_module(library(lists)).");
 
     assert_prolog_failure!(&mut wam, "atom(X).");
     assert_prolog_success!(&mut wam, "atom(a).");
@@ -2113,7 +2113,7 @@ fn test_queries_on_builtins() {
     assert_prolog_success!(&mut wam, "1.0 @=< 1.");
     assert_prolog_success!(&mut wam, "1 @=< 1.0.");
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/non_iso.pl').");
+    submit(&mut wam, ":- use_module(library(non_iso)).");
 
     assert_prolog_success!(&mut wam, "variant(X, Y).");
     assert_prolog_failure!(&mut wam, "variant(f(X), f(x)).");
@@ -2696,7 +2696,7 @@ foo(X) :- call(X) -> call(X).",
 fn test_queries_on_setup_call_cleanup() {
     let mut wam = Machine::new(readline::input_stream());
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/non_iso.pl').");
+    submit(&mut wam, ":- use_module(library(non_iso)).");
 
     // Test examples from the ISO Prolog page for setup_call_catch.
     assert_prolog_failure!(&mut wam, "setup_call_cleanup(false, _, _).");
@@ -2805,7 +2805,7 @@ fn test_queries_on_setup_call_cleanup() {
 fn test_queries_on_call_with_inference_limit() {
     let mut wam = Machine::new(readline::input_stream());
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/non_iso.pl').");
+    submit(&mut wam, ":- use_module(library(non_iso)).");
 
     assert_prolog_success!(
         &mut wam,
@@ -3027,7 +3027,7 @@ fn test_queries_on_call_with_inference_limit() {
 fn test_queries_on_dcgs() {
     let mut wam = Machine::new(readline::input_stream());
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/dcgs.pl').");
+    submit(&mut wam, ":- use_module(library(dcgs)).");
 
     // test case by YeGoblynQueene from hacker news.
     submit_code(
@@ -3064,7 +3064,7 @@ fn test_queries_on_dcgs() {
 fn test_queries_on_string_lists() {
     let mut wam = Machine::new(readline::input_stream());
 
-    submit(&mut wam, ":- use_module('src/prolog/lib/non_iso.pl').");
+    submit(&mut wam, ":- use_module(library(non_iso)).");
 
     // double_quotes is chars by default.
     assert_prolog_success!(&mut wam, "variant(\"\", []).");
@@ -3426,15 +3426,14 @@ fn test_queries_on_attributed_variables() {
         &mut wam,
         "
 :- module(my_mod, []).
-:- use_module('src/prolog/lib/atts.pl').
+:- use_module(library(atts)).
 
 :- attribute dif/1, frozen/1.",
     );
 
     assert_prolog_success!(
         &mut wam,
-        "( put_atts(V, my_mod, dif(1)) ; put_atts(V, my_mod, dif(2)) ),
-                                      get_atts(V, my_mod, L).",
+        "( put_atts(V, my_mod, dif(1)) ; put_atts(V, my_mod, dif(2)) ), get_atts(V, my_mod, L).",
         [["L = [dif(1)]", "V = _10"], ["L = [dif(2)]", "V = _10"]]
     );