Part III. Advanced Functionality

In this part of the manual, we cover the remaining information about abuild's features in detail. This part contains complete reference guides to abuild's configuration files, discussions of more advanced topics, and numerous examples to illustrate how to solve specific build problems with abuild. By the end of this part, you should be able to use abuild for a wide range of build problems.

Table of Contents

15. The Abuild.conf File
15.1. Abuild.conf Syntax
16. The Abuild.backing File
17. The Abuild Interface System
17.1. Abuild Interface Functionality Overview
17.2. Abuild.interface Syntactic Details
17.3. Abuild Interface Conditional Functions
17.4. Abuild.interface and Target Types
17.5. Predefined Abuild.interface Variables
17.5.1. Interface Variables Available to All Items
17.5.2. Interface Variables for Object-Code Items
17.5.3. Interface Variables for Java Items
17.6. Debugging Interface Issues
18. The GNU Make backend
18.1. General Abuild.mk Syntax
18.2. Make Rules
18.2.1. C and C++: ccxx Rules
18.2.2. Options for the msvc Compiler
18.2.3. Autoconf: autoconf Rules
18.2.4. Do Nothing: empty Rules
18.3. Autoconf Example
19. The Groovy Backend
19.1. A Crash Course in Groovy
19.2. The Abuild.groovy File
19.2.1. Parameter Blocks
19.2.2. Selecting Rules
19.3. Directory Structure for Java Builds
19.4. Class Paths and Class Path Variables
19.5. Basic Java Rules Functionality
19.5.1. Compiling Java Source Code
19.5.2. Building Basic Jar Files
19.5.3. Wrapper Scripts
19.5.4. Testing with JUnit
19.5.5. JAR Signing
19.5.6. WAR Files
19.5.7. High Level Archives
19.5.8. EAR Files
19.6. Advanced Customization of Java Rules
19.7. The Abuild Groovy Environment
19.7.1. The Binding
19.7.2. The Ant Project
19.7.3. Parameters, Interface Variables, and Definitions
19.8. Using QTest With the Groovy Backend
19.9. Groovy Rules
19.10. Additional Information for Rule Authors
19.10.1. Interface to the abuild Object
19.10.2. Using org.abuild.groovy.Util
20. Shared Libraries
20.1. Building Shared Libraries
20.2. Shared Library Example
21. Build Item Rules and Automatically Generated Code
21.1. Build Item Rules
21.2. Code Generator Example for Make
21.3. Code Generator Example for Groovy
21.4. Multiple Wrapper Scripts
21.5. Dependency on a Make Variable
21.6. Caching Generated Files
21.6.1. Caching Generated Files Example
22. Interface Flags
22.1. Interface Flags Conceptual Overview
22.2. Using Interface Flags
22.3. Private Interface Example
23. Cross-Platform Support
23.1. Platform Selection
23.2. Cross-Platform Dependencies
23.2.1. Interface Errors
23.3. Cross-Platform Dependency Example
24. Build Item Visibility
24.1. Increasing a Build Item's Visibility
24.2. Mixed Classification Example
25. Linking With Whole Libraries
25.1. Whole Library Example
26. Opaque Wrappers
26.1. Opaque Wrapper Example
27. Optional Dependencies
27.1. Using Optional Dependencies
27.2. Optional Dependencies Example
28. Enhancing Abuild with Plugins
28.1. Plugin Functionality
28.2. Global Plugins
28.3. Adding Platform Types and Platforms
28.3.1. Adding Platform Types
28.3.2. Adding Platforms
28.4. Adding Toolchains
28.5. Plugin Examples
28.5.1. Plugins with Rules and Interfaces
28.5.2. Adding Backend Code
28.5.3. Platforms and Platform Type Plugins
28.5.4. Plugins and Tree Dependencies
28.5.5. Native Compiler Plugins
28.5.6. Checking Project-Specific Rules
28.5.7. Install Target
29. Best Practices
29.1. Guidelines for Extension Authors
29.2. Guidelines for Make Rule Authors
29.3. Guidelines for Groovy Target Authors
29.4. Platform-Dependent Files in Non-object-code Build Items
29.5. Hidden Dependencies
29.6. Interfaces and Implementations
30. Monitored Mode
31. Sample XSL-T Scripts
32. Abuild Internals
32.1. Avoiding Recursive Make
32.2. Starting Abuild in an Output Directory
32.3. Traversal Details
32.4. Compatibility Framework
32.5. Construction of the Build Set
32.6. Construction of the Build Graph
32.6.1. Validation
32.6.2. Construction
32.6.3. Implications
32.7. Implementation of the Abuild Interface System
32.8. Loading Abuild Interfaces
32.9. Parameter Block Implementation