SCons builders.
Project description
Miniscons
SCons builders.
Motivation
When writing an SConstruct.py configuration it is difficult to:
- Specify libraries and warnings for each build since the default environment is global
- Declare executable targets that depend on builds and don't need to be built themselves
- Parse outputs from
conanto get include paths for build dependencies since they don't appear in the exportedconandeps - Declare and chain together aliases for external scripts
We can use miniscons to keep the SConstruct.py file short and get an interface like this:
builds:
build
tests
targets:
start -> build
test -> tests
scripts:
tidy
clean
routines:
lint -> [tidy, clean]
flags:
--dump
Installing
pip install miniscons
Documentation
Documentation and more detailed examples are hosted on Github Pages.
Usage
Parse the SConscript_conandeps if you are using conan:
from miniscons import conan
env = conan()
Add the builds with their specific warning flags and libs to include:
from miniscons import Build, flags, packages
from walkmate import tree
build = Build(
"build",
tree("src", r"(?<!\.spec)\.cpp$"),
flags("c++11", ["shadow"]),
)
tests = Build(
"tests",
tree("src", r"\.cpp$", ["main.cpp"]),
flags("c++11"),
packages(["gtest"]),
)
Add the executable targets that depend on the builds with their runtime arguments:
from miniscons import Target
start = Target("start", build)
test = Target("test", tests, ["--gtest_brief"])
Add the scripts to invoke your tooling:
from miniscons import Script
from walkmate import tree
includes = tests.packages["CPPPATH"]
clean = Script(
"cppclean",
["cppclean", "."],
)
tidy = Script(
"clang-tidy",
[
"clang-tidy",
tree("src", r"\.(cpp)$"),
"--",
[f"-I{i}" for i in includes],
],
)
Add the routines and flags for your interface:
from miniscons import Flag, Routine
lint = Routine("lint", [clean, tidy])
dump = Flag("--dump")
Register all the declarations with the environment and add handlers for each flag:
from miniscons import Tasks
from SCons.Script.Main import GetOption
cli = Tasks(
[build, tests],
[start, test],
[tidy, clean],
[lint],
[dump],
)
cli.register(env)
if GetOption("dump"):
cli.dump()
Now if we run
scons --dump
We get our interface:
scons: Reading SConscript files ...
builds:
build
tests
targets:
start -> build
test -> tests
scripts:
tidy
clean
routines:
lint -> [tidy, clean]
flags:
--dump
Discussion
Why not use a simple task runner for scripts and routines?
Some scripts need access to the include paths that appear in the SConstruct.py file so they need to be integrated into the scons workflow.
Tooling
Dependencies
To install dependencies:
yarn install
pip install .[all]
Tests
To run tests:
thx test
Documentation
To generate the documentation locally:
thx docs
Linters
To run linters:
thx lint
Formatters
To run formatters:
thx format
Contributing
Please read this repository's Code of Conduct which outlines our collaboration standards and the Changelog for details on breaking changes that have been made.
This repository adheres to semantic versioning standards. For more information on semantic versioning visit SemVer.
Bump2version is used to version and tag changes. For example:
bump2version patch
Contributors
- Joel Lefkowitz - Initial work
Remarks
Lots of love to the open source community!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file miniscons-0.13.0.tar.gz.
File metadata
- Download URL: miniscons-0.13.0.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
797132628901cffea418ed96a2abc805b7e304bcddb472c1cb60e3a09357328c
|
|
| MD5 |
bfe02758817cbc6633c763d0da7b740c
|
|
| BLAKE2b-256 |
5e31682dd6b4c58e5b52fbf8b53d6b623680c7236d993833d49214f308f65c1f
|
Provenance
The following attestation bundles were made for miniscons-0.13.0.tar.gz:
Publisher:
publish.yaml on JoelLefkowitz/miniscons
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
miniscons-0.13.0.tar.gz -
Subject digest:
797132628901cffea418ed96a2abc805b7e304bcddb472c1cb60e3a09357328c - Sigstore transparency entry: 173255329
- Sigstore integration time:
-
Permalink:
JoelLefkowitz/miniscons@a48b55c925685e199c5aa2c5f047fe44a4930e92 -
Branch / Tag:
refs/tags/v0.13.0 - Owner: https://github.com/JoelLefkowitz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@a48b55c925685e199c5aa2c5f047fe44a4930e92 -
Trigger Event:
push
-
Statement type:
File details
Details for the file miniscons-0.13.0-py3-none-any.whl.
File metadata
- Download URL: miniscons-0.13.0-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
710b4ec04997a3ffc106dd65465bcb9cc7e8b8f47b5a03fdf30d32f41672ae4d
|
|
| MD5 |
aa49cc705dbb1b9b12e95973f64e1c09
|
|
| BLAKE2b-256 |
41f20454966eaa34c7db0c9e15cf895ff836b69730dd4620bfff4fa0932bf904
|
Provenance
The following attestation bundles were made for miniscons-0.13.0-py3-none-any.whl:
Publisher:
publish.yaml on JoelLefkowitz/miniscons
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
miniscons-0.13.0-py3-none-any.whl -
Subject digest:
710b4ec04997a3ffc106dd65465bcb9cc7e8b8f47b5a03fdf30d32f41672ae4d - Sigstore transparency entry: 173255330
- Sigstore integration time:
-
Permalink:
JoelLefkowitz/miniscons@a48b55c925685e199c5aa2c5f047fe44a4930e92 -
Branch / Tag:
refs/tags/v0.13.0 - Owner: https://github.com/JoelLefkowitz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@a48b55c925685e199c5aa2c5f047fe44a4930e92 -
Trigger Event:
push
-
Statement type: