Synopses & Reviews
The GNU Autotools make it easy for developers to create software that is portable across many Unix-like operating systems. Although the Autotools are used by thousands of open source software packages, they have a notoriously steep learning curve. And good luck to the beginner who wants to find anything beyond a basic reference work online.
Autotools Autotools is the first book to offer programmers a tutorial-based guide to the GNU build system. Author John Calcote begins with an overview of high-level concepts and a quick hands-on tour of the philosophy and design of the Autotools. He then tackles more advanced details, like using the M4 macro processor with Autoconf, extending the framework provided by Automake, and building Java and C# sources. He concludes the book with detailed solutions to the most frequent problems encountered by first-time Autotools users.
You'll learn how to:
- Master the Autotools build system to maximize your software's portability
- Generate Autoconf configuration scripts to simplify the compilation process
- Produce portable makefiles with Automake
- Build cross-platform software libraries with Libtool
- Write your own Autoconf macros
Autotools focuses on two projects: Jupiter, a simple "Hello, world!" program, and FLAIM, an existing, complex open source effort containing four separate but interdependent subprojects. Follow along as the author takes Jupiter's build system from a basic makefile to a full-fledged Autotools project, and then as he converts the FLAIM projects from complex hand-coded makefiles to the powerful and flexible GNU build system.
Synopsis
A practical and complete guide to the components of the GNU Autotools, including Autoconf, Automake, and Libtool. The GNU Autotools (the GNU Build System) is a group of utilities designed to make it easy for developers to create software that is portable across many Unix-like operating systems. Unfortunately, most Autotools documentation is merely reference material, and a serious guide to the tools is needed. With its solution-oriented instruction and cookbook-style approach, Autotools: A Practical Guide is the first book to offer programmers a tutorial-based guide to the Autotools. Beginning with high-level concepts, the book discusses many use-cases and examples, and ends with more advanced details, like using the M4 Macro Processor with Autoconf, extending the framework provided by Automake, building Java and CSharp sources, and more. The book also shows readers how to structure and organize open source software, master the Autotools framework and functional project configuration scripts, use extensions to Autoconf, convert an existing, complex open source project from a custom build system to an Autotools build system, and write their own Autotools macros. Rather than teach specific Autotools, Autotools: A Practical Guide focuses on the key Autotools concepts.
Synopsis
The GNU Autotools make it easy for developers to create software that is portable across many UNIX-like operating systems. Thousands of open source software packages use the Autotools, but the learning curve is unfortunately steep, and it can be difficult for a beginner to find anything more than basic reference material on using the powerful software suite.
In Autotools, author John Calcote begins with an overview of high-level concepts; then tackles more advanced topics, like using the M4 macro processor with Autoconf, extending the Automake framework, and building Java and C# sources.
You'll learn how to:
- Master the Autotools build system to maximize your software's portability
- Generate Autoconf configuration scripts to simplify the compilation process
- Produce portable makefiles with Automake
- Build cross-platform software libraries with Libtool
- Write your own Autoconf macros
Autotools also includes a variety of complete projects that you're encouraged to work through to gain a real-world sense of how to become an Autotools practitioner. For example, you'll turn the FLAIM and Jupiter projects' hand-coded, makefile-based build systems into a powerful Autotools-based build system.
About the Author
John Calcote is a Senior Software Engineer and Architect at Novell, Inc. He's been writing and developing portable networking and system-level software for nearly 20 years and is active in developing, debugging, and analyzing diverse open source software packages. He is currently a project administrator of the OpenSLP, OpenXDAS, and DNX projects (open source software available at http://www.sourceforge.net), as well as the Novell-sponsored FLAIM database project (open source software available at http://developer.novell.com).
Table of Contents
Dedication; FOREWORD; PREFACE; Why Use the Autotools?; Acknowledgments; I Wish You the Very Best; INTRODUCTION; Who Should Read This Book; How This Book Is Organized; Conventions Used in This Book; Autotools Versions Used in This Book; Chapter 1: A BRIEF INTRODUCTION TO THE GNU AUTOTOOLS; 1.1 Who Should Use the Autotools?; 1.2 When Should You Not Use the Autotools?; 1.3 Apple Platforms and Mac OS X; 1.4 The Choice of Language; 1.5 Generating Your Package Build System; 1.6 Autoconf; 1.7 Automake; 1.8 Libtool; 1.9 Building Your Package; 1.10 Installing the Most Up-to-Date Autotools; 1.11 Summary; Chapter 2: UNDERSTANDING THE GNU CODING STANDARDS; 2.1 Creating a New Project Directory Structure; 2.2 Project Structure; 2.3 Makefile Basics; 2.4 Creating a Source Distribution Archive; 2.5 Automatically Testing a Distribution; 2.6 Unit Testing, Anyone?; 2.7 Installing Products; 2.8 The Filesystem Hierarchy Standard; 2.9 Supporting Standard Targets and Variables; 2.10 Getting Your Project into a Linux Distro; 2.11 Build vs. Installation Prefix Overrides; 2.12 User Variables; 2.13 Configuring Your Package; 2.14 Summary; Chapter 3: CONFIGURING YOUR PROJECT WITH AUTOCONF; 3.1 Autoconf Configuration Scripts; 3.2 The Shortest configure.ac File; 3.3 Comparing M4 to the C Preprocessor; 3.4 The Nature of M4 Macros; 3.5 Executing autoconf; 3.6 Executing configure; 3.7 Executing config.status; 3.8 Adding Some Real Functionality; 3.9 Generating Files from Templates; 3.10 Adding VPATH Build Functionality; 3.11 Let's Take a Breather; 3.12 An Even Quicker Start with autoscan; 3.13 Initialization and Package Information; 3.14 The Instantiating Macros; 3.15 Back to Remote Builds for a Moment; 3.16 Summary; Chapter 4: MORE FUN WITH AUTOCONF: CONFIGURING USER OPTIONS; 4.1 Substitutions and Definitions; 4.2 Checking for Compilers; 4.3 Checking for Other Programs; 4.4 A Common Problem with Autoconf; 4.5 Checks for Libraries and Header Files; 4.6 Supporting Optional Features and Packages; 4.7 Checks for Type and Structure Definitions; 4.8 The AC_OUTPUT Macro; 4.9 Summary; Chapter 5: AUTOMATIC MAKEFILES WITH AUTOMAKE; 5.1 Getting Down to Business; 5.2 What's in a Makefile.am File?; 5.3 Analyzing Our New Build System; 5.4 Unit Tests: Supporting make check; 5.5 Reducing Complexity with Convenience Libraries; 5.6 Building the New Library; 5.7 What Goes into a Distribution?; 5.8 Maintainer Mode; 5.9 Cutting Through the Noise; 5.10 Summary; Chapter 6: BUILDING LIBRARIES WITH LIBTOOL; 6.1 The Benefits of Shared Libraries; 6.2 How Shared Libraries Work; 6.3 Using Libtool; 6.4 Installing Libtool; 6.5 Adding Shared Libraries to Jupiter; 6.6 Summary; Chapter 7: LIBRARY INTERFACE VERSIONING AND RUNTIME DYNAMIC LINKING; 7.1 System-Specific Versioning; 7.2 The Libtool Library Versioning Scheme; 7.3 Using libltdl; 7.4 Summary; Chapter 8: FLAIM: AN AUTOTOOLS EXAMPLE; 8.1 What Is FLAIM?; 8.2 Why FLAIM?; 8.3 An Initial Look; 8.4 Getting Started; 8.5 The FLAIM Subprojects; 8.6 Designing the XFLAIM Build System; 8.7 Summary; Chapter 9: FLAIM PART II: PUSHING THE ENVELOPE; 9.1 Building Java Sources Using the Autotools; 9.2 Building the C# Sources; 9.3 Configuring Compiler Options; 9.4 Hooking Doxygen into the Build Process; 9.5 Adding Nonstandard Targets; 9.6 Summary; Chapter 10: USING THE M4 MACRO PROCESSOR WITH AUTOCONF; 10.1 M4 Text Processing; 10.2 The Recursive Nature of M4; 10.3 Autoconf and M4; 10.4 Writing Autoconf Macros; 10.5 Diagnosing Problems; 10.6 Summary; Chapter 11: A CATALOG OF TIPS AND REUSABLE SOLUTIONS FOR CREATING GREAT PROJECTS; 11.1 Item 1: Keeping Private Details out of Public Interfaces; 11.2 Item 2: Implementing Recursive Extension Targets; 11.3 Item 3: Using a Repository Revision Number in a Package Version; 11.4 Item 4: Ensuring Your Distribution Packages Are Clean; 11.5 Item 5: Hacking Autoconf Macros; 11.6 Item 6: Cross-Compiling; 11.7 Item 7: Emulating Autoconf Text Replacement Techniques; 11.8 Item 8: Using the ac-archive Project; 11.9 Item 9: Using pkg-config with Autotools; 11.10 Item 10: Using Incremental Installation Techniques; 11.11 Item 11: Using Generated Source Code; 11.12 Item 12: Disabling Undesirable Targets; 11.13 Item 13: Watch Those Tab Characters!; 11.14 Item 14: Packaging Choices; 11.15 Wrapping Up; Updates;