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;
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).