Hi all, 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 ============================= <?xml version="1.0" encoding="UTF-8"?> <project> <name>MyApp</name> <version>1.0.0</version> <author>Your Name</author> <license>BSD-3-Clause</license> <build> <mainSource>Main.pas</mainSource> <executableName>myapp</executableName> </build> </project> 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 Regards, - Graeme - -- fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/ _______________________________________________ fpc-pascal maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
