summaryrefslogtreecommitdiff
path: root/testsuite/tests/driver/recomp004
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/driver/recomp004')
-rw-r--r--testsuite/tests/driver/recomp004/Main.hs10
-rw-r--r--testsuite/tests/driver/recomp004/Makefile24
-rw-r--r--testsuite/tests/driver/recomp004/all.T4
-rw-r--r--testsuite/tests/driver/recomp004/c.h5
-rw-r--r--testsuite/tests/driver/recomp004/c1.c6
-rw-r--r--testsuite/tests/driver/recomp004/c2.c6
-rw-r--r--testsuite/tests/driver/recomp004/recomp004.stdout2
7 files changed, 57 insertions, 0 deletions
diff --git a/testsuite/tests/driver/recomp004/Main.hs b/testsuite/tests/driver/recomp004/Main.hs
new file mode 100644
index 0000000000..cbb16d21d3
--- /dev/null
+++ b/testsuite/tests/driver/recomp004/Main.hs
@@ -0,0 +1,10 @@
+
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+module Main where
+
+main :: IO ()
+main = foo
+
+foreign import ccall unsafe "c.h foo" foo :: IO ()
+
diff --git a/testsuite/tests/driver/recomp004/Makefile b/testsuite/tests/driver/recomp004/Makefile
new file mode 100644
index 0000000000..41b93b169d
--- /dev/null
+++ b/testsuite/tests/driver/recomp004/Makefile
@@ -0,0 +1,24 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+EXECUTABLE = Main$(exeext)
+CLEAN_FILES = c.c c.o Main.o Main.hi $(EXECUTABLE)
+
+clean:
+ $(RM) $(CLEAN_FILES)
+
+# Test that updates to C modules are noticed
+recomp004:
+ $(RM) $(CLEAN_FILES)
+ $(CP) c1.c c.c
+ '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -c c.c -o c.o
+ '$(TEST_HC)' $(TEST_HC_OPTS) -v0 --make Main.hs c.o -o $(EXECUTABLE)
+ ./$(EXECUTABLE)
+ $(CP) c2.c c.c
+ '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -c c.c -o c.o
+ # Hack to make sure c.o is really newer
+ touch -t 01010000 Main.hs Main.hi Main.o c.c $(EXECUTABLE)
+ '$(TEST_HC)' $(TEST_HC_OPTS) -v0 --make Main.hs c.o -o $(EXECUTABLE)
+ ./$(EXECUTABLE)
+
diff --git a/testsuite/tests/driver/recomp004/all.T b/testsuite/tests/driver/recomp004/all.T
new file mode 100644
index 0000000000..54d190d83a
--- /dev/null
+++ b/testsuite/tests/driver/recomp004/all.T
@@ -0,0 +1,4 @@
+test('recomp004',
+ extra_clean(['Main', 'Main.exe', 'c.c']),
+ run_command,
+ ['$MAKE -s --no-print-directory recomp004'])
diff --git a/testsuite/tests/driver/recomp004/c.h b/testsuite/tests/driver/recomp004/c.h
new file mode 100644
index 0000000000..12c941119c
--- /dev/null
+++ b/testsuite/tests/driver/recomp004/c.h
@@ -0,0 +1,5 @@
+
+#include <stdio.h>
+
+void foo(void);
+
diff --git a/testsuite/tests/driver/recomp004/c1.c b/testsuite/tests/driver/recomp004/c1.c
new file mode 100644
index 0000000000..0b2101a826
--- /dev/null
+++ b/testsuite/tests/driver/recomp004/c1.c
@@ -0,0 +1,6 @@
+
+#include "c.h"
+
+void foo(void) {
+ printf("Foo\n");
+}
diff --git a/testsuite/tests/driver/recomp004/c2.c b/testsuite/tests/driver/recomp004/c2.c
new file mode 100644
index 0000000000..decb52617a
--- /dev/null
+++ b/testsuite/tests/driver/recomp004/c2.c
@@ -0,0 +1,6 @@
+
+#include "c.h"
+
+void foo(void) {
+ printf("Bar\n");
+}
diff --git a/testsuite/tests/driver/recomp004/recomp004.stdout b/testsuite/tests/driver/recomp004/recomp004.stdout
new file mode 100644
index 0000000000..3b71d5be87
--- /dev/null
+++ b/testsuite/tests/driver/recomp004/recomp004.stdout
@@ -0,0 +1,2 @@
+Foo
+Bar