Add the GPLv3 text (the package declared the licence but never shipped it), a py.typed marker, and an sdist include/exclude allowlist so the distribution carries only src/, docs/, README, LICENSE and pyproject. reference/ is a clone of the GPL FreeRouting Java tree kept purely as a porting reference and must never be redistributed inside this package; tests, caches and build output are excluded too. Switch to the PEP 639 SPDX licence expression with license-files, widen the classifiers, and add an -o alias for -do. Rewrite the README around the engine matrix: what each track and pass actually does, and what this is not (no FreeRouting density parity on dense boards, and --diagonal is a recovery and shortening pass, not a diagonal-native search).
109 lines
2.8 KiB
TOML
109 lines
2.8 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "freeroute"
|
|
version = "0.1.0"
|
|
description = "Native Python PCB autorouter — a Java-free port of the FreeRouting engine (Specctra DSN in, SES out)"
|
|
readme = "README.md"
|
|
license = "GPL-3.0-or-later"
|
|
license-files = ["LICENSE"]
|
|
authors = [{ name = "Ryan Malloy", email = "ryan@supported.systems" }]
|
|
keywords = [
|
|
"pcb",
|
|
"autorouter",
|
|
"routing",
|
|
"specctra",
|
|
"dsn",
|
|
"ses",
|
|
"kicad",
|
|
"eda",
|
|
"freerouting",
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 3 - Alpha",
|
|
"Environment :: Console",
|
|
"Intended Audience :: Developers",
|
|
"Intended Audience :: Manufacturing",
|
|
"Operating System :: OS Independent",
|
|
"Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
|
|
"Typing :: Typed",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3 :: Only",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
]
|
|
requires-python = ">=3.10"
|
|
dependencies = []
|
|
|
|
[project.urls]
|
|
"Homepage" = "https://git.supported.systems/warehack.ing/freeroute"
|
|
"Repository" = "https://git.supported.systems/warehack.ing/freeroute"
|
|
"Issues" = "https://git.supported.systems/warehack.ing/freeroute/issues"
|
|
# The Java engine this is a port of; freeroute ships no upstream code.
|
|
"Upstream" = "https://github.com/freerouting/freerouting"
|
|
|
|
[project.scripts]
|
|
freeroute = "freeroute.cli:main"
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pytest>=7.0.0",
|
|
"pytest-cov>=4.0.0",
|
|
"ruff>=0.1.0",
|
|
]
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/freeroute"]
|
|
|
|
[tool.hatch.build.targets.sdist]
|
|
# Ship the package, the licence, and the docs — nothing else. `reference/` is a
|
|
# clone of the GPL FreeRouting Java tree used only as a porting reference; it is
|
|
# never committed and must never be redistributed inside this package.
|
|
include = [
|
|
"/src",
|
|
"/docs",
|
|
"/README.md",
|
|
"/LICENSE",
|
|
"/pyproject.toml",
|
|
]
|
|
exclude = [
|
|
"/reference",
|
|
"/tests",
|
|
"/.github",
|
|
"/dist",
|
|
"/build",
|
|
"/CLAUDE.md",
|
|
"**/.env",
|
|
"**/__pycache__",
|
|
"**/*.py[cod]",
|
|
"**/.pytest_cache",
|
|
"**/.ruff_cache",
|
|
"**/.coverage",
|
|
]
|
|
|
|
[tool.ruff]
|
|
target-version = "py310"
|
|
line-length = 100
|
|
src = ["src", "tests"]
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "W", "F", "I", "B", "C4", "UP", "SIM"]
|
|
ignore = ["E501"]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["freeroute"]
|
|
force-sort-within-sections = true
|
|
|
|
[tool.pytest.ini_options]
|
|
minversion = "7.0"
|
|
testpaths = ["tests"]
|
|
pythonpath = ["tests"]
|
|
addopts = ["-ra", "--strict-markers"]
|
|
markers = [
|
|
"oracle: runs the FreeRouting JAR (slow, needs Java); deselect with -m 'not oracle'",
|
|
]
|