This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch tristan/dont-distribute-generated-code
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit e72e4c36e2e83a1ab726d0d820ba0a8b1e04c17f
Author: Tristan van Berkom <[email protected]>
AuthorDate: Tue Oct 18 13:13:51 2022 +0900

    setup.py: Stop including generated Cython code in source distributions.
    
    Ensures that code will always be generated when building for a given
    target environment, this is because Cython generates code which accesses
    CPython internal symbols and we cannot guarantee that the C code we
    generated will be valid for the target CPython interpretor.
---
 MANIFEST.in |  1 -
 setup.py    | 55 ++++++++++++++++++-------------------------------------
 2 files changed, 18 insertions(+), 38 deletions(-)

diff --git a/MANIFEST.in b/MANIFEST.in
index 9c28ca355..047ceac43 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,7 +9,6 @@ include README.rst
 # Cython files
 recursive-include src/buildstream *.pyx
 recursive-include src/buildstream *.pxd
-recursive-include src/buildstream *.c
 
 # Data files required by BuildStream's generic source tests
 graft src/buildstream/_testing/_sourcetests/project
diff --git a/setup.py b/setup.py
index 8e1a11556..4b1b68493 100755
--- a/setup.py
+++ b/setup.py
@@ -315,23 +315,6 @@ with 
open(os.path.join(os.path.dirname(os.path.realpath(__file__)), "README.rst"
 #####################################################
 #            Setup Cython and extensions            #
 #####################################################
-# We want to ensure that source distributions always
-# include the .c files, in order to allow users to
-# not need cython when building.
-def assert_cython_required():
-    if "sdist" not in sys.argv:
-        return
-
-    print(
-        "Cython is required when building 'sdist' in order to "
-        "ensure source distributions can be built without Cython. "
-        "Please install it using your package manager (usually 
'python3-cython') "
-        "or pip (pip install cython).",
-        file=sys.stderr,
-    )
-
-    raise SystemExit(1)
-
 
 try:
     ENABLE_CYTHON_TRACE = int(os.environ.get("BST_CYTHON_TRACE", "0"))
@@ -344,29 +327,27 @@ extension_macros = [("CYTHON_TRACE", ENABLE_CYTHON_TRACE)]
 
 
 def cythonize(extensions, **kwargs):
+    # We want to make sure that generated Cython code is never
+    # included in the source distribution.
+    #
+    # This is because Cython will generate some code which accesses
+    # internal API from CPython, as such we cannot guarantee that
+    # the C code we generated when creating the distribution will
+    # be valid for the target CPython interpretor.
+    #
+    if "sdist" in sys.argv:
+        return extensions
+
     try:
         from Cython.Build import cythonize as _cythonize
     except ImportError:
-        assert_cython_required()
-
-        print("Cython not found. Using preprocessed c files instead")
-
-        missing_c_sources = []
-
-        for extension in extensions:
-            for source in extension.sources:
-                if source.endswith(".pyx"):
-                    c_file = source.replace(".pyx", ".c")
-
-                    if not os.path.exists(c_file):
-                        missing_c_sources.append((extension, c_file))
-
-        if missing_c_sources:
-            for extension, source in missing_c_sources:
-                print("Missing '{}' for building extension 
'{}'".format(source, extension.name))
-
-            raise SystemExit(1)
-        return extensions
+        print(
+            "Cython is required when building BuildStream from sources."
+            "Please install it using your package manager (usually 
'python3-cython') "
+            "or pip (pip install cython).",
+            file=sys.stderr,
+        )
+        raise SystemExit(1)
 
     return _cythonize(extensions, **kwargs)
 

Reply via email to