The router began as a port of FreeRouting and has grown its own engine (negotiated congestion, tree nets, exact checks, axis escapes), and 'freeroute' was one letter from the project it no longer follows. The package, module and command are now rpmroute; the freeroute command stays as an alias, and the RPMROUTE / RPMROUTE_ORACLE_JAVA variables fall back to the old FREEROUTE names. Version 2026.10.07. Routing is unchanged: a PCBench board routes to a byte-identical session either way.
112 lines
2.9 KiB
TOML
112 lines
2.9 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "rpmroute"
|
|
version = "2026.10.07"
|
|
description = "Native Python PCB autorouter with negotiated congestion and tree routing (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/rpmroute"
|
|
"Repository" = "https://git.supported.systems/warehack.ing/rpmroute"
|
|
"Issues" = "https://git.supported.systems/warehack.ing/rpmroute/issues"
|
|
# Where it started: a port of the Java FreeRouting engine. It has since grown
|
|
# its own router (negotiation, tree nets, exact checks) and ships no upstream code.
|
|
"Origin" = "https://github.com/freerouting/freerouting"
|
|
|
|
[project.scripts]
|
|
rpmroute = "rpmroute.cli:main"
|
|
# the name it had until 2026-10-07, kept so existing scripts keep working
|
|
freeroute = "rpmroute.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/rpmroute"]
|
|
|
|
[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 = ["rpmroute"]
|
|
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'",
|
|
]
|