summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-02-24 14:10:20 +0100
committerRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2023-02-24 14:10:20 +0100
commitd04871d280914c17c9cb77670335af80d18d72f0 (patch)
treee2f971a309d89fe055258febb130ea1479e477f6
parent3a114bdc1b636c459482d7ef7ed6697914d9d479 (diff)
downloadsetuptools-scm-d04871d280914c17c9cb77670335af80d18d72f0.tar.gz
define own build backend
this removes setup.py altogether in turn preventing legacy usage
-rw-r--r--.pre-commit-config.yaml1
-rw-r--r--pyproject.toml8
-rw-r--r--scm_hack_build_backend.py60
-rw-r--r--setup.py58
-rw-r--r--testing/check_self_install.py8
5 files changed, 68 insertions, 67 deletions
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ced36e7..c32c140 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -22,6 +22,7 @@ repos:
rev: 6.0.0
hooks:
- id: flake8
+ exclude: scm_hack_build_backend.py
- repo: https://github.com/asottile/pyupgrade
rev: v3.3.1
hooks:
diff --git a/pyproject.toml b/pyproject.toml
index 93a1e44..7632fdb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,10 +1,13 @@
[build-system]
-build-backend = "setuptools.build_meta"
+build-backend = "scm_hack_build_backend"
requires = [
"packaging>=20",
"setuptools>=55",
"typing_extensions",
]
+backend-path = [
+ ".",
+]
[project]
name = "setuptools-scm"
@@ -90,5 +93,8 @@ pip-egg-info = "setuptools_scm.hacks:parse_pip_egg_info"
+[tool.setuptools.dynamic]
+version = {attr = "scm_hack_build_backend.dynamic_version"}
+
[tool.setuptools.packages.find]
where = ["src"]
diff --git a/scm_hack_build_backend.py b/scm_hack_build_backend.py
new file mode 100644
index 0000000..08c8fae
--- /dev/null
+++ b/scm_hack_build_backend.py
@@ -0,0 +1,60 @@
+"""
+this module is a hack only in place to allow for setuptools
+to use the attribute for the versions
+"""
+from __future__ import annotations
+
+import os
+import sys
+from pathlib import Path
+
+root = Path(__file__).parent
+sys.path.insert(0, os.fspath(root / "src"))
+
+from setuptools.build_meta import ( # type: ignore[attr-defined]
+ get_requires_for_build_wheel,
+ get_requires_for_build_sdist,
+ prepare_metadata_for_build_wheel,
+ build_wheel,
+ build_sdist,
+ get_requires_for_build_editable,
+ prepare_metadata_for_build_editable,
+ build_editable,
+)
+
+
+from setuptools_scm import get_version
+from setuptools_scm.hacks import parse_pkginfo
+from setuptools_scm import git
+from setuptools_scm import hg
+from setuptools_scm.version import guess_next_dev_version, get_local_node_and_date
+from setuptools_scm import Configuration
+
+from setuptools_scm.version import ScmVersion
+
+
+dynamic_version: str
+
+
+def parse(root: str, config: Configuration) -> ScmVersion | None:
+ try:
+ return parse_pkginfo(root, config)
+ except OSError:
+ return git.parse(root, config=config) or hg.parse(root, config=config)
+
+
+def scm_version() -> str:
+ return get_version(
+ root=str(root),
+ parse=parse,
+ version_scheme=guess_next_dev_version,
+ local_scheme=get_local_node_and_date,
+ )
+
+
+def __getattr__(name: str) -> str:
+ if name == "dynamic_version":
+ global dynamic_version
+ dynamic_version = scm_version()
+ return dynamic_version
+ raise AttributeError(name)
diff --git a/setup.py b/setup.py
deleted file mode 100644
index e8e69bc..0000000
--- a/setup.py
+++ /dev/null
@@ -1,58 +0,0 @@
-"""\
-important note:
-
-the setup of setuptools_scm is self-using,
-the first execution of `python setup.py egg_info`
-will generate partial data
-It's critical to run `python setup.py egg_info`
-once before running sdist or easy_install on a fresh checkouts
-
-pip usage is recommended
-"""
-from __future__ import annotations
-
-import os
-import sys
-
-import setuptools
-
-
-def scm_version() -> str:
- here = os.path.dirname(os.path.abspath(__file__))
- src = os.path.join(here, "src")
-
- sys.path.insert(0, src)
-
- from setuptools_scm import get_version
- from setuptools_scm.hacks import parse_pkginfo
- from setuptools_scm import git
- from setuptools_scm import hg
- from setuptools_scm.version import guess_next_dev_version, get_local_node_and_date
- from setuptools_scm import Configuration
-
- from setuptools_scm.version import ScmVersion
-
- def parse(root: str, config: Configuration) -> ScmVersion | None:
- try:
- return parse_pkginfo(root, config)
- except OSError:
- return git.parse(root, config=config) or hg.parse(root, config=config)
-
- return get_version(
- root=here,
- parse=parse,
- version_scheme=guess_next_dev_version,
- local_scheme=get_local_node_and_date,
- )
-
-
-if __name__ == "__main__":
- setuptools.setup(
- version=scm_version(),
- extras_require={
- "toml": [
- "setuptools>=42",
- ],
- "test": ["pytest>=6.2", "virtualenv>20"],
- },
- )
diff --git a/testing/check_self_install.py b/testing/check_self_install.py
deleted file mode 100644
index 0cfab33..0000000
--- a/testing/check_self_install.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import annotations
-
-import pkg_resources
-
-import setuptools_scm
-
-dist = pkg_resources.get_distribution("setuptools_scm")
-assert dist.version == setuptools_scm.get_version(), dist.version