aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-02-12 22:57:38 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2016-02-21 14:52:36 +0200
commit738f7f860c08f1322d09c72a3db44308f4a16404 (patch)
treeb0529693f90084dbb584290ec17a15a1caa6e6e3
parent98d00386b141771a62668198f36bd38b1a9e6112 (diff)
downloadmeson-738f7f860c08f1322d09c72a3db44308f4a16404.zip
meson-738f7f860c08f1322d09c72a3db44308f4a16404.tar.gz
meson-738f7f860c08f1322d09c72a3db44308f4a16404.tar.bz2
Added Cython sample project.
-rwxr-xr-xtest cases/python3/3 cython/cytest.py23
-rw-r--r--test cases/python3/3 cython/libdir/cstorer.pxd9
-rw-r--r--test cases/python3/3 cython/libdir/meson.build18
-rw-r--r--test cases/python3/3 cython/libdir/storer.c24
-rw-r--r--test cases/python3/3 cython/libdir/storer.h8
-rw-r--r--test cases/python3/3 cython/libdir/storer.pyx16
-rw-r--r--test cases/python3/3 cython/meson.build12
7 files changed, 110 insertions, 0 deletions
diff --git a/test cases/python3/3 cython/cytest.py b/test cases/python3/3 cython/cytest.py
new file mode 100755
index 0000000..43443dc
--- /dev/null
+++ b/test cases/python3/3 cython/cytest.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python3
+
+from storer import Storer
+import sys
+
+s = Storer()
+
+if s.get_value() != 0:
+ print('Initial value incorrect.')
+ sys.exit(1)
+
+s.set_value(42)
+
+if s.get_value() != 42:
+ print('Setting value failed.')
+ sys.exit(1)
+
+try:
+ s.set_value('not a number')
+ print('Using wrong argument type did not fail.')
+ sys.exit(1)
+except TypeError:
+ pass
diff --git a/test cases/python3/3 cython/libdir/cstorer.pxd b/test cases/python3/3 cython/libdir/cstorer.pxd
new file mode 100644
index 0000000..7b730fc
--- /dev/null
+++ b/test cases/python3/3 cython/libdir/cstorer.pxd
@@ -0,0 +1,9 @@
+
+cdef extern from "storer.h":
+ ctypedef struct Storer:
+ pass
+
+ Storer* storer_new();
+ void storer_destroy(Storer *s);
+ int storer_get_value(Storer *s);
+ void storer_set_value(Storer *s, int v);
diff --git a/test cases/python3/3 cython/libdir/meson.build b/test cases/python3/3 cython/libdir/meson.build
new file mode 100644
index 0000000..e5cfc86
--- /dev/null
+++ b/test cases/python3/3 cython/libdir/meson.build
@@ -0,0 +1,18 @@
+pxd_c = custom_target('cstorer_pxd',
+ output : 'cstorer_pxd.c',
+ input : 'cstorer.pxd',
+ command : [cython, '@INPUT@', '-o', '@OUTPUT@'],
+)
+
+pyx_c = custom_target('storer_pyx',
+ output : 'storer_pyx.c',
+ input : 'storer.pyx',
+ command : [cython, '@INPUT@', '-o', '@OUTPUT@'],
+)
+
+slib = shared_library('storer',
+ 'storer.c', pxd_c, pyx_c,
+ name_prefix : '',
+ dependencies : py3_dep)
+
+pydir = meson.current_build_dir()
diff --git a/test cases/python3/3 cython/libdir/storer.c b/test cases/python3/3 cython/libdir/storer.c
new file mode 100644
index 0000000..0199bb8
--- /dev/null
+++ b/test cases/python3/3 cython/libdir/storer.c
@@ -0,0 +1,24 @@
+#include"storer.h"
+#include<stdlib.h>
+
+struct _Storer {
+ int value;
+};
+
+Storer* storer_new() {
+ Storer *s = malloc(sizeof(struct _Storer));
+ s->value = 0;
+ return s;
+}
+
+void storer_destroy(Storer *s) {
+ free(s);
+}
+
+int storer_get_value(Storer *s) {
+ return s->value;
+}
+
+void storer_set_value(Storer *s, int v) {
+ s->value = v;
+}
diff --git a/test cases/python3/3 cython/libdir/storer.h b/test cases/python3/3 cython/libdir/storer.h
new file mode 100644
index 0000000..4f71917
--- /dev/null
+++ b/test cases/python3/3 cython/libdir/storer.h
@@ -0,0 +1,8 @@
+#pragma once
+
+typedef struct _Storer Storer;
+
+Storer* storer_new();
+void storer_destroy(Storer *s);
+int storer_get_value(Storer *s);
+void storer_set_value(Storer *s, int v);
diff --git a/test cases/python3/3 cython/libdir/storer.pyx b/test cases/python3/3 cython/libdir/storer.pyx
new file mode 100644
index 0000000..6ad6830
--- /dev/null
+++ b/test cases/python3/3 cython/libdir/storer.pyx
@@ -0,0 +1,16 @@
+cimport cstorer
+
+cdef class Storer:
+ cdef cstorer.Storer* _c_storer
+
+ def __cinit__(self):
+ self._c_storer = cstorer.storer_new()
+
+ def __dealloc__(self):
+ cstorer.storer_destroy(self._c_storer)
+
+ cpdef int get_value(self):
+ return cstorer.storer_get_value(self._c_storer)
+
+ cpdef void set_value(self, int value):
+ cstorer.storer_set_value(self._c_storer, value)
diff --git a/test cases/python3/3 cython/meson.build b/test cases/python3/3 cython/meson.build
new file mode 100644
index 0000000..2d5948e
--- /dev/null
+++ b/test cases/python3/3 cython/meson.build
@@ -0,0 +1,12 @@
+project('cython', 'c',
+ default_options : ['warning_level=3'])
+
+cython = find_program('cython3')
+py3_dep = dependency('python3')
+
+subdir('libdir')
+
+test('cython tester',
+ find_program('cytest.py'),
+ env : ['PYTHONPATH=' + pydir]
+)