Skip to main content

No project description provided

Project description

pmakefile

Background

Makefile is a fundamental tool when it comes to building software. As a simple way to organize code compilation, it's been part of Unix world for over 40 years. However, it's not a perfect tool. Its cross-platform support is not native yet, and learning curves can be steep. This project aims to provide a practical alternative to Makefile subset for most common use cases.

Software can be reproducible, protable, and maintainable, for regular users and developers, with a simple "P-makefile".

Usage

See the example/ directory where we write a single make in Python using pmakefile and zig cc to cross-compile the QuickJS project for Windows, Linux, and macOS (x86_64 and aarch64), which is a huge task and so far not achieved by any other known makefile written for QuickJS. With pmakefile, writing make promises us excellent portability, static type checking, and simplicity, while depending on only a standard Python distribution.

The pmakefile Python module exports some useful functions, see builtin functions

The pmakefile structure can be given as follows:

from pmakefile import *

phony([
    'all', 'clean', ... # phony targets
])

ROOT = Path(__file__).parent.relative_to(os.getcwd())

@recipe('dep1', 'dep2')
def my_recipe():
    """documentation for my_recipe"""

    # some python statements

Then you can use it in your favorite shell:

pmk help
# pmk all
# pmk clean

Useful Helper Functions

  • get_os() -> 'windows' | 'linux' | 'macos'
  • log(msg: str, level: 'ok' | 'error' | 'info' | 'debug' | 'warn' | 'normal' = 'normal')
  • shell(command: str | list[str], *, env: dict | None = None, noprint: bool = False)
  • get_deps(): get direct dependencies of current target
  • with proft(title: str): ...: profile the execution time of the code block and report with the given title (when the environment variable PMAKEFILE_PROF is set)
  • get_dlext() -> str: get platform-specific dynamic library file extension

License

MIT License is used for this project. See LICENSE for more details.

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

pmakefile-0.4.5.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

pmakefile-0.4.5-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file pmakefile-0.4.5.tar.gz.

File metadata

  • Download URL: pmakefile-0.4.5.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for pmakefile-0.4.5.tar.gz
Algorithm Hash digest
SHA256 9c8ec5132b4605d5d8a2770e529b295ee8a40c898317fa40840661e487288f77
MD5 c2ae1b05ca68b563f7c9523b5071405d
BLAKE2b-256 4e6359f1f2d2864f8147ab9874091645cdf480fec4ea6bb78bdd96d98601ed3e

See more details on using hashes here.

File details

Details for the file pmakefile-0.4.5-py3-none-any.whl.

File metadata

  • Download URL: pmakefile-0.4.5-py3-none-any.whl
  • Upload date:
  • Size: 7.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for pmakefile-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 5f721abd2d96a03959acfb253fc258ecabf2d1fbd03b8171282ac3877a3bb611
MD5 00215e922255ba1dba1ba6737f637b23
BLAKE2b-256 bdeb6f3dd550abf22f8c7d9982047f705e596befe7c0af0b96fdccd095dfd885

See more details on using hashes here.

Supported by

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