Skip to content

PasBuild v1.0.0 release - Maven-inspired build tool for Object Pascal

Choose a tag to compare

@graemeg graemeg released this 15 Feb 17:32
· 68 commits to master since this release

I'm excited to announce the first release of PasBuild v1.0.0, a
modern build automation tool for Free Pascal projects inspired by
Apache Maven!

GitHub: https://github.com/graemeg/PasBuild

Why PasBuild?

While fpmake is powerful, it can be laborious to create and
maintain, especially for large projects. A real-world example:
fpGUI Toolkit has 120+ units, include files in various locations,
and platform-dependent directory trees. The fpmake.pp file was
40KB with over 750 lines of code that needed constant updates when
adding or removing units.

PasBuild's project.xml? Just 3KB and 117 lines - and we know how
verbose XML is. ;-) No updates needed when units change - it
self-discovers your code and dynamically builds the FPC command!

Key Features

Convention Over Configuration

  • Standard directory layout (src/main/pascal, src/test/pascal)
  • Zero configuration for projects following conventions
  • Override only what you need to customize

Intelligent Automation

  • Auto-discovers all units and subdirectories
  • Automatic include path detection (*.inc files)
  • Self-maintaining - add/remove files without updating config
  • Cross-platform path handling (src/main/pascal → src\main\pascal)

Complete Build Lifecycle

  • clean: Remove build artifacts
  • compile: Build your executable or library
  • test: Compile and run tests (FPCUnit/FPTest auto-detection)
  • package: Create release archives
  • source-package: Generate source distributions

Build Profiles

  • Define multiple build configurations (debug, release, etc.)
  • Activate single or multiple profiles: -p base,debug,logging
  • Profile-specific compiler options and defines
  • Perfect for cross-platform conditional compilation

Resource Management

  • Automatic resource copying to target directory
  • Variable filtering: ${project.version} → 1.0.0
  • Supports both main and test resources
  • Version injection via resource filtering

Developer-Friendly

  • Single XML configuration file (project.xml)
  • Semantic versioning 2.0.0 with pre-release tags
  • Verbose mode for debugging (-v flag)
  • Alternate project files support (-f custom.xml)
  • Maven-style goal dependencies

Cross-Platform

  • Works identically on Linux, Windows, macOS, FreeBSD
  • Automatic path separator handling
  • Platform-specific conditional compilation support

Self-Hosting

  • PasBuild builds itself using project.xml
  • Demonstrates best practices
  • Easy to bootstrap from source

Real-World Testing

PasBuild has been extensively tested with:

  • Multiple production applications
  • fpGUI Toolkit (120+ units, complex structure)
  • Projects with platform-dependent code trees
  • Libraries and applications alike

Example: Minimal project.xml

MyApp 1.0.0 Your Name BSD-3-Clause Main.pas myapp

That's it! PasBuild handles the rest automatically.

Getting Started

Bootstrap compilation

mkdir -p target/units
echo '1.0.0' > target/version.inc
fpc -Mobjfpc -O1 -FEtarget -FUtarget/units -Fitarget
-Fusrc/main/pascal src/main/pascal/PasBuild.pas

Now use PasBuild to build itself

./target/pasbuild compile

Create a new project

mkdir myproject && cd myproject
pasbuild init

Documentation

Comprehensive documentation available in the repository:

  • Quick Start Guide: docs/quick-start-guide.adoc
  • Design Document: docs/design.adoc
  • Bootstrap Instructions: BOOTSTRAP.txt

Try It Today!

Clone from GitHub:
git clone https://github.com/graemeg/PasBuild.git

Your feedback and contributions are welcome! Please
kindly use the GitHub Issue Tracker.

More features to come soon.

License: BSD-3-Clause