aboutsummaryrefslogtreecommitdiffstats
path: root/meson/test cases/native/3 pipeline
diff options
context:
space:
mode:
Diffstat (limited to 'meson/test cases/native/3 pipeline')
-rwxr-xr-xmeson/test cases/native/3 pipeline/depends/copyrunner.py7
-rw-r--r--meson/test cases/native/3 pipeline/depends/filecopier.c23
-rw-r--r--meson/test cases/native/3 pipeline/depends/libsrc.c.in3
-rw-r--r--meson/test cases/native/3 pipeline/depends/meson.build11
-rw-r--r--meson/test cases/native/3 pipeline/depends/prog.c5
-rw-r--r--meson/test cases/native/3 pipeline/input_src.dat1
-rw-r--r--meson/test cases/native/3 pipeline/meson.build23
-rw-r--r--meson/test cases/native/3 pipeline/prog.c5
-rw-r--r--meson/test cases/native/3 pipeline/src/input_src.dat1
-rw-r--r--meson/test cases/native/3 pipeline/src/meson.build12
-rw-r--r--meson/test cases/native/3 pipeline/src/prog.c9
-rw-r--r--meson/test cases/native/3 pipeline/src/srcgen.c40
-rw-r--r--meson/test cases/native/3 pipeline/srcgen.c69
13 files changed, 209 insertions, 0 deletions
diff --git a/meson/test cases/native/3 pipeline/depends/copyrunner.py b/meson/test cases/native/3 pipeline/depends/copyrunner.py
new file mode 100755
index 000000000..0ef6a6d68
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/depends/copyrunner.py
@@ -0,0 +1,7 @@
+#!/usr/bin/env python3
+
+import sys, subprocess
+
+prog, infile, outfile = sys.argv[1:]
+
+subprocess.check_call([prog, infile, outfile])
diff --git a/meson/test cases/native/3 pipeline/depends/filecopier.c b/meson/test cases/native/3 pipeline/depends/filecopier.c
new file mode 100644
index 000000000..e10e4e773
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/depends/filecopier.c
@@ -0,0 +1,23 @@
+#include<stdio.h>
+#include<assert.h>
+
+#define BUFSIZE 1024
+
+int main(int argc, char **argv) {
+ char buffer[BUFSIZE];
+ size_t num_read;
+ size_t num_written;
+ FILE *fin = fopen(argv[1], "rb");
+ FILE *fout;
+ assert(argc>0);
+ assert(fin);
+ num_read = fread(buffer, 1, BUFSIZE, fin);
+ assert(num_read > 0);
+ fclose(fin);
+ fout = fopen(argv[2], "wb");
+ assert(fout);
+ num_written = fwrite(buffer, 1, num_read, fout);
+ assert(num_written == num_read);
+ fclose(fout);
+ return 0;
+}
diff --git a/meson/test cases/native/3 pipeline/depends/libsrc.c.in b/meson/test cases/native/3 pipeline/depends/libsrc.c.in
new file mode 100644
index 000000000..81805512f
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/depends/libsrc.c.in
@@ -0,0 +1,3 @@
+int func(void) {
+ return 42;
+}
diff --git a/meson/test cases/native/3 pipeline/depends/meson.build b/meson/test cases/native/3 pipeline/depends/meson.build
new file mode 100644
index 000000000..5111fee7a
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/depends/meson.build
@@ -0,0 +1,11 @@
+runner = find_program('copyrunner.py')
+
+copier = executable('copier', 'filecopier.c', native: true)
+
+cg = generator(runner,
+ output: ['@BASENAME@.c'],
+ arguments: [copier.full_path(), '@INPUT@', '@OUTPUT@'],
+ depends: copier)
+
+test('generatordep',
+ executable('gd', 'prog.c', cg.process('libsrc.c.in')))
diff --git a/meson/test cases/native/3 pipeline/depends/prog.c b/meson/test cases/native/3 pipeline/depends/prog.c
new file mode 100644
index 000000000..54c40e162
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/depends/prog.c
@@ -0,0 +1,5 @@
+int func(void);
+
+int main(void) {
+ return func() != 42;
+}
diff --git a/meson/test cases/native/3 pipeline/input_src.dat b/meson/test cases/native/3 pipeline/input_src.dat
new file mode 100644
index 000000000..a324dca21
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/input_src.dat
@@ -0,0 +1 @@
+int func(void) { return 0; }
diff --git a/meson/test cases/native/3 pipeline/meson.build b/meson/test cases/native/3 pipeline/meson.build
new file mode 100644
index 000000000..e12cb7b58
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/meson.build
@@ -0,0 +1,23 @@
+project('pipeline test', 'c')
+
+# We need to run this executable locally so build it with
+# the host compiler.
+e1 = executable('srcgen', 'srcgen.c', native : true)
+
+# Generate a source file that needs to be included in the build.
+gen = generator(e1, \
+ depfile : '@BASENAME@.d',
+ output : '@BASENAME@.c', # Line continuation inside arguments should work without needing a "\".
+ arguments : ['@INPUT@', '@OUTPUT@', '@DEPFILE@'])
+
+generated = gen.process(['input_src.dat'])
+
+e2 = executable('prog', 'prog.c', generated)
+
+test('pipelined', e2)
+
+# This is in a subdirectory to make sure
+# we write proper subdir paths to output.
+subdir('src')
+
+subdir('depends')
diff --git a/meson/test cases/native/3 pipeline/prog.c b/meson/test cases/native/3 pipeline/prog.c
new file mode 100644
index 000000000..128f2bb15
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/prog.c
@@ -0,0 +1,5 @@
+int func(void);
+
+int main(void) {
+ return func();
+}
diff --git a/meson/test cases/native/3 pipeline/src/input_src.dat b/meson/test cases/native/3 pipeline/src/input_src.dat
new file mode 100644
index 000000000..354499acd
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/src/input_src.dat
@@ -0,0 +1 @@
+#include<stdio.h>
diff --git a/meson/test cases/native/3 pipeline/src/meson.build b/meson/test cases/native/3 pipeline/src/meson.build
new file mode 100644
index 000000000..4e9ac116a
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/src/meson.build
@@ -0,0 +1,12 @@
+e1 = executable('srcgen', 'srcgen.c', native : true)
+
+# Generate a header file that needs to be included.
+gen = generator(e1,
+ output : '@BASENAME@.h',
+ arguments : ['@INPUT@', '@OUTPUT@'])
+
+generated = gen.process('input_src.dat')
+
+e2 = executable('prog', 'prog.c', generated)
+
+test('pipelined', e2)
diff --git a/meson/test cases/native/3 pipeline/src/prog.c b/meson/test cases/native/3 pipeline/src/prog.c
new file mode 100644
index 000000000..83121b5ef
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/src/prog.c
@@ -0,0 +1,9 @@
+#include"input_src.h"
+
+int main(void) {
+ void *foo = printf;
+ if(foo) {
+ return 0;
+ }
+ return 1;
+}
diff --git a/meson/test cases/native/3 pipeline/src/srcgen.c b/meson/test cases/native/3 pipeline/src/srcgen.c
new file mode 100644
index 000000000..26761d225
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/src/srcgen.c
@@ -0,0 +1,40 @@
+#include<stdio.h>
+#include<assert.h>
+
+#define ARRSIZE 80
+
+int main(int argc, char **argv) {
+ char arr[ARRSIZE];
+ char *ifilename;
+ char *ofilename;
+ FILE *ifile;
+ FILE *ofile;
+ size_t bytes;
+
+ if(argc != 3) {
+ fprintf(stderr, "%s <input file> <output file>\n", argv[0]);
+ return 1;
+ }
+ ifilename = argv[1];
+ ofilename = argv[2];
+ printf("%s\n", ifilename);
+ ifile = fopen(ifilename, "r");
+ if(!ifile) {
+ fprintf(stderr, "Could not open source file %s.\n", ifilename);
+ return 1;
+ }
+ ofile = fopen(ofilename, "w");
+ if(!ofile) {
+ fprintf(stderr, "Could not open target file %s\n", ofilename);
+ fclose(ifile);
+ return 1;
+ }
+ bytes = fread(arr, 1, ARRSIZE, ifile);
+ assert(bytes < 80);
+ assert(bytes > 0);
+ fwrite(arr, 1, bytes, ofile);
+
+ fclose(ifile);
+ fclose(ofile);
+ return 0;
+}
diff --git a/meson/test cases/native/3 pipeline/srcgen.c b/meson/test cases/native/3 pipeline/srcgen.c
new file mode 100644
index 000000000..ceb9eccee
--- /dev/null
+++ b/meson/test cases/native/3 pipeline/srcgen.c
@@ -0,0 +1,69 @@
+#include<stdio.h>
+#include<assert.h>
+#include<string.h>
+
+#define ARRSIZE 80
+
+int main(int argc, char **argv) {
+ char arr[ARRSIZE];
+ char *ofilename;
+ char *ifilename;
+ char *dfilename;
+ FILE *ifile;
+ FILE *ofile;
+ FILE *depfile;
+ size_t bytes;
+ int i;
+
+ if(argc != 4) {
+ fprintf(stderr, "%s <input file> <output file> <dependency file>\n", argv[0]);
+ return 1;
+ }
+ ifilename = argv[1];
+ ofilename = argv[2];
+ dfilename = argv[3];
+ ifile = fopen(argv[1], "r");
+ if(!ifile) {
+ fprintf(stderr, "Could not open source file %s.\n", argv[1]);
+ return 1;
+ }
+ ofile = fopen(ofilename, "w");
+ if(!ofile) {
+ fprintf(stderr, "Could not open target file %s\n", ofilename);
+ fclose(ifile);
+ return 1;
+ }
+ bytes = fread(arr, 1, ARRSIZE, ifile);
+ assert(bytes < 80);
+ assert(bytes > 0);
+ fwrite(arr, 1, bytes, ofile);
+
+ depfile = fopen(dfilename, "w");
+ if(!depfile) {
+ fprintf(stderr, "Could not open depfile %s\n", ofilename);
+ fclose(ifile);
+ fclose(ofile);
+ return 1;
+ }
+ for(i=0; i<strlen(ofilename); i++) {
+ if(ofilename[i] == ' ') {
+ fwrite("\\ ", 1, 2, depfile);
+ } else {
+ fwrite(&ofilename[i], 1, 1, depfile);
+ }
+ }
+ fwrite(": ", 1, 2, depfile);
+ for(i=0; i<strlen(ifilename); i++) {
+ if(ifilename[i] == ' ') {
+ fwrite("\\ ", 1, 2, depfile);
+ } else {
+ fwrite(&ifilename[i], 1, 1, depfile);
+ }
+ }
+ fwrite("\n", 1, 1, depfile);
+
+ fclose(ifile);
+ fclose(ofile);
+ fclose(depfile);
+ return 0;
+}