Hi everyone,
PasBuild v1.8.0 has been released.
PasBuild is a Maven-inspired build automation tool for Free Pascal projects. It provides convention-based project structure, dependency management, multi-module builds, resource filtering, and packaging.
Homepage:
https://github.com/graemeg/pasbuild
Quick Start Guide:
https://github.com/graemeg/PasBuild/blob/master/docs/quick-start-guide.adoc
Overview For This Release
-------------------------
PasBuild v1.8.0 improves multi-module build correctness, extends configuration flexibility, and adds bash shell completion. Bug fixes address profile inheritance, external dependency resolution, out-of-tree unit path handling, and plugin lifecycle ordering in aggregator projects.
New Features
------------
Configurable Test Source Directory
The test source directory is now overridable in project.xml via <testSourceDirectory> under the <test> section, following the same convention-over-configuration pattern as <sourceDirectory>. The default remains src/test/pascal when not specified.
Example:
<test>
<testSourceDirectory>tests</testSourceDirectory>
</test>
Resolve Command Surfaces Directory Locations
The resolve command JSON output now includes a 'directories' object containing the four conventional project paths: source, testSource, resources, and testResources. Values reflect any project.xml overrides, giving plugins and tooling full project context without needing to know PasBuild's defaults.
Out-of-Tree unitPaths Anchored to Module Root
Paths in <unitPaths> that start with ../ or ./ are now treated as relative to the module root (the directory containing project.xml), not to <sourceDirectory>. Previously, auto-scan mode prepended the source directory, producing broken paths like src/main/pascal/../../... for cross-module references.
Example:
<unitPaths>
<path>../../framework/src/main/pascal/corelib</path> </unitPaths>
Path delimiter normalisation (/ to \ on Windows) is applied as normal, so project.xml can always use forward slashes.
Bash Completion Script
A bash completion script is now included in the repository, enabling tab-completion of PasBuild goals, flags, and options in bash shells.
Contributed by Andrew Haines. Closes #8.
Bug Fixes
---------
Aggregator Profiles Inherited by Child Modules
Profiles defined in an aggregator's project.xml were not being passed down to child modules. When a profile such as "unix" was declared only at the aggregator level, child builds silently ignored it. Parent profiles are now copied to each child module at discovery time, unless the child already defines a profile with the same id.
External Dependencies Resolved in Multi-Module Builds
External <dependencies> from the local repository were never resolved during multi-module reactor builds — only inter-module deps were handled. This caused missing -Fu flags for external libraries, producing compilation failures. External dependencies are now resolved for each module in the same way as single-module builds.
Also fixes relative paths (e.g. ../some-lib) leaking into artifact metadata during install, which broke transitive dependency resolution for consumers of the installed artifact.
Plugin Lifecycle Uses Reactor in Aggregator Projects
When a plugin declared after:compile (or any lifecycle phase) was invoked from a pom aggregator project, it received a bare compile command against the root pom config — which has no source directory and fails immediately. Plugins now receive a TReactorCommand when invoked from an aggregator, ensuring all child modules are built before the plugin runs.
Fixes #10.
Changes
-------
Documentation
The quick-start guide has been updated to document profile inheritance behaviour in multi-module projects, including how parent profiles propagate to child modules and how to define a profile with the same id in a child to override it.
Test Suite
----------
10 new test cases added in this release:
Total test count: 219 (up from 209 in v1.7.0)
PasBuild is free software released under the BSD-3-Clause license.
Regards,
- Graeme -
