Skip to main content

Jam Build System (based on Python)

Project description

Jam build system on Python

This is a Python reimplementation of the Jam build system (link).

Supported platforms: Linux (Unix), OpenVMS, Windows (WIP)

What is Jam

Jam is a build system (similar to meson, cmake, etc.). The key difference is that its core is essentially an interpreter for its internal language, with all building functionality written in this language.

The raw Jam language doesn't know how to build anything by itself, but it allows you to define rules and dependencies which construct the actual command sequence to build projects using a dependency tree.

Jam includes Jambase, which is a collection of generic rules to build C, C++ and Fortran projects. It can be easily extended (or modified) to support other types of projects.

Differences from the original Jam

  • Uses ninja, samurai or other ninja-compatible builders for the actual building of executables.
  • mkdir is a built-in command that collects all created directories to the dirs target.
  • Built-in rules are case-insensitive (Echo and ECHO are the same).
  • Regular expressions are Python-based.
  • Clean actions are ignored in favor of ninja -t clean.

Quick Start

Install:

# Install jamp with the system pip
pip3 install git+https://github.com/ildus/jamp

# Using pypy3 provides approximately twice the performance
# pypy3 -m pip install git+https://github.com/ildus/jamp

# Install ninja using your package manager
dnf install ninja
# or pacman -Syu ninja
# etc.

Example project structure with a library and a main executable that uses math functions:

src
    main.c
lib
    print.c
include
    common.h

Jamfile

Corresponding Jamfile:

HDRS = include ;                    # common includes, affects all sources
Library libprint : lib/print.c ;    # on Unix this will create libprint.a
Main app : src/main.c ;             # executable
LinkLibraries app : libprint ;      # linking the executable with our library
LINKLIBS on app = -lm ;             # system libraries

To build the executable, simply run:

jamp && ninja

For more complex examples, look at the tests directory. When dealing with subdirectories, it's recommended to use the SubDir rule. Note that this example should work on Windows and Linux (because of explicit paths), but will not work on VMS.

Contributing

git clone git@github.com:ildus/jamp.git

# To run without installing
export PYTHONPATH=$PYTHONPATH:<current_dir>/jamp/src
python3 -m jamp

# Testing changes
pip install pytest
cd <jamp root folder>
pytest

Documentation

See the docs directory.

OpenVMS Notes

Use my github.com/ildus/samurai fork for compilation. It supports the additional '$^' escape sequence for newlines, allowing you to add full scripts to build.ninja.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jam_build-0.6.0.tar.gz (120.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jam_build-0.6.0-py3-none-any.whl (79.8 kB view details)

Uploaded Python 3

File details

Details for the file jam_build-0.6.0.tar.gz.

File metadata

  • Download URL: jam_build-0.6.0.tar.gz
  • Upload date:
  • Size: 120.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for jam_build-0.6.0.tar.gz
Algorithm Hash digest
SHA256 4193fec127391f9674a57d2a6a0b323e583b2805f98ff327b1986499266f5d2f
MD5 bf231e43f95fb6c1420167ef2829622a
BLAKE2b-256 f922331942675767bf4b1a1db9bd30cc7ce4b4caeeb6b3b8c89b5a7c22deba21

See more details on using hashes here.

Provenance

The following attestation bundles were made for jam_build-0.6.0.tar.gz:

Publisher: pypi.yml on ildus/jamp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jam_build-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: jam_build-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 79.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for jam_build-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa0841968a819b1daedbd93d1cf960cb503d3441d093dbc8a8a71a73485f2f27
MD5 40dd1ab0def67fda31c4967d1b40f1e4
BLAKE2b-256 c257edb1a38d514edc54a9759eebeb5f7a4cc8f3f52dc53fe76e49fd064ee86f

See more details on using hashes here.

Provenance

The following attestation bundles were made for jam_build-0.6.0-py3-none-any.whl:

Publisher: pypi.yml on ildus/jamp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page