aboutsummaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..47b6a3e
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,77 @@
+from os import path
+from sysconfig import get_config_var
+
+from setuptools import Extension, find_packages, setup
+from setuptools.command.build import build
+from setuptools.command.build_ext import build_ext
+from setuptools.command.egg_info import egg_info
+from wheel.bdist_wheel import bdist_wheel
+
+
+class Build(build):
+ def run(self):
+ if path.isdir("queries"):
+ dest = path.join(self.build_lib, "tree_sitter_wmap", "queries")
+ self.copy_tree("queries", dest)
+ super().run()
+
+
+class BuildExt(build_ext):
+ def build_extension(self, ext: Extension):
+ if self.compiler.compiler_type != "msvc":
+ ext.extra_compile_args = ["-std=c11", "-fvisibility=hidden"]
+ else:
+ ext.extra_compile_args = ["/std:c11", "/utf-8"]
+ if path.exists("src/scanner.c"):
+ ext.sources.append("src/scanner.c")
+ if ext.py_limited_api:
+ ext.define_macros.append(("Py_LIMITED_API", "0x030A0000"))
+ super().build_extension(ext)
+
+
+class BdistWheel(bdist_wheel):
+ def get_tag(self):
+ python, abi, platform = super().get_tag()
+ if python.startswith("cp"):
+ python, abi = "cp310", "abi3"
+ return python, abi, platform
+
+
+class EggInfo(egg_info):
+ def find_sources(self):
+ super().find_sources()
+ self.filelist.recursive_include("queries", "*.scm")
+ self.filelist.include("src/tree_sitter/*.h")
+
+
+setup(
+ packages=find_packages("bindings/python"),
+ package_dir={"": "bindings/python"},
+ package_data={
+ "tree_sitter_wmap": ["*.pyi", "py.typed"],
+ "tree_sitter_wmap.queries": ["*.scm"],
+ },
+ ext_package="tree_sitter_wmap",
+ ext_modules=[
+ Extension(
+ name="_binding",
+ sources=[
+ "bindings/python/tree_sitter_wmap/binding.c",
+ "src/parser.c",
+ ],
+ define_macros=[
+ ("PY_SSIZE_T_CLEAN", None),
+ ("TREE_SITTER_HIDE_SYMBOLS", None),
+ ],
+ include_dirs=["src"],
+ py_limited_api=not get_config_var("Py_GIL_DISABLED"),
+ )
+ ],
+ cmdclass={
+ "build": Build,
+ "build_ext": BuildExt,
+ "bdist_wheel": BdistWheel,
+ "egg_info": EggInfo,
+ },
+ zip_safe=False
+)