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), MacOS (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 jam-build

# Or from the latest main branch.
pip3 install git+https://github.com/ildus/jamp

# Using pypy3 provides approximately twice the performance
# pypy3 -m pip install jam-build

# 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.7.2.tar.gz (122.8 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.7.2-py3-none-any.whl (82.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for jam_build-0.7.2.tar.gz
Algorithm Hash digest
SHA256 84acd4ecc850f9f30d99db268b8383e15bc725b5b5e235420258027d656544f7
MD5 5f64db9f0858cdd8090a1ce65b3bf202
BLAKE2b-256 565219a5a48334859a2a85a8f69e0296ff8b09a3c24294ce12f21ac53cbd3b64

See more details on using hashes here.

Provenance

The following attestation bundles were made for jam_build-0.7.2.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.7.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for jam_build-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 01e0b48203809007df481f198ef756e092d1b106563226e4d20eaea6ec3d0d4e
MD5 ad34275d500ea9319254d373322135e8
BLAKE2b-256 4533878a53b2b34963c3e7d4401b7355d6192d9be797c9b12fc25fe718699b08

See more details on using hashes here.

Provenance

The following attestation bundles were made for jam_build-0.7.2-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