Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
AUTOTOOLS
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
1. A BRIEF INTRODUCTION TO THE GNU AUTOTOOLS
Who Should Use the Autotools?
When Should You Not Use the Autotools?
Apple Platforms and Mac OS X
The Choice of Language
Generating Your Package Build System
Autoconf
autoconf
autoreconf
autoheader
autoscan
autoupdate
ifnames
autom4te
Working Together
Automake
automake
aclocal
Libtool
libtool
libtoolize
ltdl, the Libtool C API
Building Your Package
Running configure
Building Outside the Source Directory
Running make
Installing the Most Up-to-Date Autotools
Summary
2. UNDERSTANDING THE GNU CODING STANDARDS
Creating a New Project Directory Structure
Project Structure
Makefile Basics
Commands and Rules
Variables
A Separate Shell for Each Command
Variable Binding
Rules in Detail
Automatic Variables
Dependency Rules
Implicit Rules
Phony Targets
Multiple Targets
Resources for Makefile Authors
Creating a Source Distribution Archive
Forcing a Rule to Run
Leading Control Characters
Automatically Testing a Distribution
Unit Testing, Anyone?
Installing Products
Installation Choices
Uninstalling a Package
Testing Install and Uninstall
The Filesystem Hierarchy Standard
Supporting Standard Targets and Variables
Standard Targets
Standard Variables
Adding Location Variables to Jupiter
Getting Your Project into a Linux Distro
Build vs. Installation Prefix Overrides
User Variables
Configuring Your Package
Summary
3. CONFIGURING YOUR PROJECT WITH AUTOCONF
Autoconf Configuration Scripts
The Shortest configure.ac File
Comparing M4 to the C Preprocessor
The Nature of M4 Macros
Executing autoconf
Executing configure
Executing config.status
Adding Some Real Functionality
Generating Files from Templates
Adding VPATH Build Functionality
Let's Take a Breather
An Even Quicker Start with autoscan
The Proverbial autogen.sh Script
Updating Makefile.in
Initialization and Package Information
AC_PREREQ
AC_INIT
AC_CONFIG_SRCDIR
The Instantiating Macros
AC_CONFIG_HEADERS
Using autoheader to Generate an Include File Template
Back to Remote Builds for a Moment
Summary
4. MORE FUN WITH AUTOCONF: CONFIGURING USER OPTIONS
Substitutions and Definitions
AC_SUBST
AC_DEFINE
Checking for Compilers
Checking for Other Programs
A Common Problem with Autoconf
Checks for Libraries and Header Files
Is It Right or Just Good Enough?
Printing Messages
Supporting Optional Features and Packages
Coding Up the Feature Option
Formatting Help Strings
Checks for Type and Structure Definitions
The AC_OUTPUT Macro
Summary
5. AUTOMATIC MAKEFILES WITH AUTOMAKE
Getting Down to Business
Enabling Automake in configure.ac
A Hidden Benefit: Automatic Dependency Tracking
What's in a Makefile.am File?
Analyzing Our New Build System
Product List Variables
Installation Location Prefixes
Prefixes Not Associated with Installation
Primaries
Product Source Variables
PLV and PSV Modifiers
Unit Tests: Supporting make check
Reducing Complexity with Convenience Libraries
Product Option Variables
Per-Makefile Option Variables
Building the New Library
What Goes into a Distribution?
Maintainer Mode
Cutting Through the Noise
Summary
6. BUILDING LIBRARIES WITH LIBTOOL
The Benefits of Shared Libraries
How Shared Libraries Work
Dynamic Linking at Load Time
Automatic Dynamic Linking at Runtime
Manual Dynamic Linking at Runtime
Using Libtool
Abstracting the Build Process
Abstraction at Runtime
Installing Libtool
Adding Shared Libraries to Jupiter
Using the LTLIBRARIES Primary
Public Include Directories
Customizing Libtool with LT_INIT Options
Reconfigure and Build
So What Is PIC, Anyway?
Fixing the Jupiter PIC Problem
Summary
7. LIBRARY INTERFACE VERSIONING AND RUNTIME DYNAMIC LINKING
System-Specific Versioning
Linux and Solaris Library Versioning
IBM AIX Library Versioning
HP-UX/AT&T SVR4 Library Versioning
The Libtool Library Versioning Scheme
Library Versioning Is Interface Versioning
When Library Versioning Just Isn't Enough
Using libltdl
Necessary Infrastructure
Adding a Plug-In Interface
Doing It the Old-Fashioned Way
Converting to Libtool's ltdl Library
Preloading Multiple Modules
Checking It All Out
Summary
8. FLAIM: AN AUTOTOOLS EXAMPLE
What Is FLAIM?
Why FLAIM?
An Initial Look
Getting Started
Adding the configure.ac Files
Automake in the Umbrella Project
Why Add the Libtool Macros?
Adding a Macro Subdirectory
The Top-Level Makefile.am File
The FLAIM Subprojects
The FLAIM Toolkit configure.ac File
Automake Configuration Features
Doing Threads the Right Way
Getting Just the Right Libraries
Maintainer-Defined Command-Line Options
The FLAIM Toolkit Makefile.am File
Automake -hook and -local Rules
Designing the ftk/src/Makefile.am File
Moving On to the ftk/util Directory
Designing the XFLAIM Build System
The XFLAIM configure.ac File
Creating the xflaim/src/Makefile.am File
Turning to the xflaim/util Directory
Stamp Targets
Cleaning Your Room
Summary
9. FLAIM PART II: PUSHING THE ENVELOPE
Building Java Sources Using the Autotools
Autotools Java Support
Using ac-archive Macros
Canonical System Information
The xflaim/java Directory Structure
The xflaim/src/Makefile.am File
Building the JNI C++ Sources
The Java Wrapper Classes and JNI Headers
A Caveat About Using the JAVA Primary
Building the C# Sources
Manual Installation
Cleaning Up Again
Configuring Compiler Options
Hooking Doxygen into the Build Process
Adding Nonstandard Targets
Summary
10. USING THE M4 MACRO PROCESSOR WITH AUTOCONF
M4 Text Processing
Defining Macros
Macros with Arguments
Whitespace Around Arguments
The Recursive Nature of M4
Quoting Rules
Autoconf and M4
The Autoconf M4 Environment
Writing Autoconf Macros
Simple Text Replacement
Documenting Your Macros
M4 Conditionals
Adding Precision
Diagnosing Problems
Summary
11. A CATALOG OF TIPS AND REUSABLE SOLUTIONS FOR CREATING GREAT PROJECTS
Item 1: Keeping Private Details out of Public Interfaces
Solutions in C
Solutions in C++
The PIMPL Pattern
C++ Virtual Interfaces
Item 2: Implementing Recursive Extension Targets
Item 3: Using a Repository Revision Number in a Package Version
Item 4: Ensuring Your Distribution Packages Are Clean
Item 5: Hacking Autoconf Macros
Providing Library-Specific Autoconf Macros
Item 6: Cross-Compiling
Item 7: Emulating Autoconf Text Replacement Techniques
Item 8: Using the ac-archive Project
Item 9: Using pkg-config with Autotools
Providing pkg-config Files for Your Library Projects
Using pkg-config Files in configure.ac
Item 10: Using Incremental Installation Techniques
Item 11: Using Generated Source Code
Using the BUILT_SOURCES Variable
Dependency Management
A Two-Pass System
Doing It in One Pass
Built Sources Done Right
Item 12: Disabling Undesirable Targets
Item 13: Watch Those Tab Characters!
Item 14: Packaging Choices
Wrapping Up
UPDATES
← Prev
Back
Next →
← Prev
Back
Next →