1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
From 30080e89858fc1ae343eea6ba2d2bf152257a458 Mon Sep 17 00:00:00 2001
From: Naveen M K <naveen521kk@gmail.com>
Date: Tue, 29 Jun 2021 18:24:37 +0530
Subject: [PATCH 100/N] Add a test to build C-Ext
---
.github/workflows/smoketests.py | 85 +++++++++++++++++++++++++++++++++
1 file changed, 85 insertions(+)
diff --git a/.github/workflows/smoketests.py b/.github/workflows/smoketests.py
index 9277c14..1761724 100644
--- a/.github/workflows/smoketests.py
+++ b/.github/workflows/smoketests.py
@@ -123,6 +123,91 @@ class Tests(unittest.TestCase):
from time import mktime, gmtime
mktime(gmtime())
+ def test_c_ext_build(self):
+ import tempfile
+ import sys
+ import subprocess
+ import textwrap
+ from pathlib import Path
+
+ with tempfile.TemporaryDirectory() as tmppro:
+ subprocess.check_call([sys.executable, "-m", "ensurepip", "--user"])
+ with Path(tmppro, "setup.py").open("w") as f:
+ f.write(
+ textwrap.dedent(
+ """\
+ from setuptools import setup, Extension
+
+ setup(
+ name='cwrapper',
+ version='1.0',
+ ext_modules=[
+ Extension(
+ 'cwrapper',
+ sources=['cwrapper.c']),
+ ],
+ )
+ """
+ )
+ )
+ with Path(tmppro, "cwrapper.c").open("w") as f:
+ f.write(
+ textwrap.dedent(
+ """\
+ #include <Python.h>
+ static PyObject *
+ helloworld(PyObject *self, PyObject *args)
+ {
+ printf("Hello World\\n");
+ return Py_None;
+ }
+ static PyMethodDef
+ myMethods[] = {
+ { "helloworld", helloworld, METH_NOARGS, "Prints Hello World" },
+ { NULL, NULL, 0, NULL }
+ };
+ static struct PyModuleDef cwrapper = {
+ PyModuleDef_HEAD_INIT,
+ "cwrapper",
+ "Test Module",
+ -1,
+ myMethods
+ };
+
+ PyMODINIT_FUNC
+ PyInit_cwrapper(void)
+ {
+ return PyModule_Create(&cwrapper);
+ }
+ """
+ )
+ )
+ subprocess.check_call(
+ [sys.executable, "-c", "import struct"],
+ )
+ subprocess.check_call(
+ [
+ sys.executable,
+ "-m",
+ "pip",
+ "install",
+ "wheel",
+ ],
+ )
+ subprocess.check_call(
+ [
+ sys.executable,
+ "-m",
+ "pip",
+ "install",
+ tmppro,
+ ],
+ )
+ subprocess.check_call(
+ [sys.executable, "-c", "import cwrapper"],
+ )
+
+
def suite():
return unittest.TestLoader().loadTestsFromName(__name__)
--
2.32.0
|