update nearly all FSF copyright year lists to include 2010
[gnulib.git] / doc / gnulib-tool.texi
1 @node Invoking gnulib-tool
2 @chapter Invoking gnulib-tool
3
4 @c Copyright (C) 2005-2010 Free Software Foundation, Inc.
5
6 @c Permission is granted to copy, distribute and/or modify this document
7 @c under the terms of the GNU Free Documentation License, Version 1.3 or
8 @c any later version published by the Free Software Foundation; with no
9 @c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
10 @c Texts.  A copy of the license is included in the ``GNU Free
11 @c Documentation License'' file as part of this distribution.
12
13 @pindex gnulib-tool
14 @cindex invoking @command{gnulib-tool}
15
16 The @command{gnulib-tool} command is the recommended way to import
17 Gnulib modules.  It is possible to borrow Gnulib modules in a package
18 without using @command{gnulib-tool}, relying only on the
19 meta-information stored in the @file{modules/*} files, but with a
20 growing number of modules this becomes tedious.  @command{gnulib-tool}
21 simplifies the management of source files, @file{Makefile.am}s and
22 @file{configure.ac} in packages incorporating Gnulib modules.
23
24 @file{gnulib-tool} is not installed in a standard directory that is
25 contained in the @code{PATH} variable.  It needs to be run directly in
26 the directory that contains the Gnulib source code.  You can do this
27 either by specifying the absolute filename of @file{gnulib-tool}, or
28 you can also use a symbolic link from a place inside your @code{PATH}
29 to the @file{gnulib-tool} file of your preferred and most up-to-date
30 Gnulib checkout, like this:
31 @smallexample
32 $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool
33 @end smallexample
34
35 Run @samp{gnulib-tool --help} for information.  To get familiar with
36 @command{gnulib-tool} without affecting your sources, you can also try
37 some commands with the option @samp{--dry-run}; then
38 @code{gnulib-tool} will only report which actions it would perform in
39 a real run without changing anything.
40
41 @menu
42 * Initial import::              First import of Gnulib modules.
43 * Modified imports::            Changing the import specification.
44 * Simple update::               Tracking Gnulib development.
45 * Source changes::              Impact of Gnulib on your source files.
46 * gettextize and autopoint::    Caveat: @code{gettextize} and @code{autopoint} users!
47 * Localization::                Handling Gnulib's own message translations.
48 * VCS Issues::                  Integration with Version Control Systems.
49 * Unit tests::                  Bundling the unit tests of the Gnulib modules.
50 @end menu
51
52
53 @node Initial import
54 @section Initial import
55 @cindex initial import
56
57 Gnulib assumes your project uses Autoconf and Automake.  Invoking
58 @samp{gnulib-tool --import} will copy source files, create a
59 @file{Makefile.am} to build them, generate a file @file{gnulib-comp.m4} with
60 Autoconf M4 macro declarations used by @file{configure.ac}, and generate
61 a file @file{gnulib-cache.m4} containing the cached specification of how
62 Gnulib is used.
63
64 Our example will be a library that uses Autoconf, Automake and
65 Libtool.  It calls @code{strdup}, and you wish to use gnulib to make
66 the package portable to C89 and C99 (which don't have @code{strdup}).
67
68 @example
69 ~/src/libfoo$ gnulib-tool --import strdup
70 Module list with included dependencies:
71   absolute-header
72   extensions
73   strdup
74   string
75 File list:
76   lib/dummy.c
77   lib/strdup.c
78   lib/string.in.h
79   m4/absolute-header.m4
80   m4/extensions.m4
81   m4/gnulib-common.m4
82   m4/strdup.m4
83   m4/string_h.m4
84 Creating directory ./lib
85 Creating directory ./m4
86 Copying file lib/dummy.c
87 Copying file lib/strdup.c
88 Copying file lib/string.in.h
89 Copying file m4/absolute-header.m4
90 Copying file m4/extensions.m4
91 Copying file m4/gnulib-common.m4
92 Copying file m4/gnulib-tool.m4
93 Copying file m4/strdup.m4
94 Copying file m4/string_h.m4
95 Creating lib/Makefile.am
96 Creating m4/gnulib-cache.m4
97 Creating m4/gnulib-comp.m4
98 Finished.
99
100 You may need to add #include directives for the following .h files.
101   #include <string.h>
102
103 Don't forget to
104   - add "lib/Makefile" to AC_CONFIG_FILES in ./configure.ac,
105   - mention "lib" in SUBDIRS in Makefile.am,
106   - mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am,
107   - invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC,
108   - invoke gl_INIT in ./configure.ac.
109 ~/src/libfoo$
110 @end example
111
112 By default, the source code is copied into @file{lib/} and the M4
113 macros in @file{m4/}.  You can override these paths by using
114 @code{--source-base=DIRECTORY} and @code{--m4-base=DIRECTORY}.  Some
115 modules also provide other files necessary for building. These files
116 are copied into the directory specified by @samp{AC_CONFIG_AUX_DIR} in
117 @file{configure.ac} or by the @code{--aux-dir=DIRECTORY} option.  If
118 neither is specified, the current directory is assumed.
119
120 @code{gnulib-tool} can make symbolic links instead of copying the
121 source files.  The option to specify for this is @samp{--symlink}, or
122 @samp{-s} for short.  This can be useful to save a few kilobytes of disk
123 space.  But it is likely to introduce bugs when @code{gnulib} is updated;
124 it is more reliable to use @samp{gnulib-tool --update} (see below)
125 to update to newer versions of @code{gnulib}.  Furthermore it requires
126 extra effort to create self-contained tarballs, and it may disturb some
127 mechanism the maintainer applies to the sources.  For these reasons,
128 this option is generally discouraged.
129
130 @code{gnulib-tool} will overwrite any pre-existing files, in
131 particular @file{Makefile.am}.  Unfortunately, separating the
132 generated @file{Makefile.am} content (for building the gnulib library)
133 into a separate file, say @file{gnulib.mk}, that could be included
134 by your handwritten @file{Makefile.am} is not possible, due to how
135 variable assignments are handled by Automake.
136
137 Consequently, it is a good idea to choose directories that are not
138 already used by your projects, to separate gnulib imported files from
139 your own files.  This approach is also useful if you want to avoid
140 conflicts between other tools (e.g., @code{gettextize} that also copy
141 M4 files into your package.  Simon Josefsson successfully uses a source
142 base of @file{gl/}, and a M4 base of @file{gl/m4/}, in several
143 packages.
144
145 After the @samp{--import} option on the command line comes the list of
146 Gnulib modules that you want to incorporate in your package.  The names
147 of the modules coincide with the filenames in Gnulib's @file{modules/}
148 directory.
149
150 Some Gnulib modules depend on other Gnulib modules.  @code{gnulib-tool}
151 will automatically add the needed modules as well; you need not list
152 them explicitly.  @code{gnulib-tool} will also memorize which dependent
153 modules it has added, so that when someday a dependency is dropped, the
154 implicitly added module is dropped as well (unless you have explicitly
155 requested that module).
156
157 If you want to cut a dependency, i.e., not add a module although one of
158 your requested modules depends on it, you may use the option
159 @samp{--avoid=@var{module}} to do so.  Multiple uses of this option are
160 possible.  Of course, you will then need to implement the same interface
161 as the removed module.
162
163 A few manual steps are required to finish the initial import.
164 @code{gnulib-tool} printed a summary of these steps.
165
166 First, you must ensure Autoconf can find the macro definitions in
167 @file{gnulib-comp.m4}.  Use the @code{ACLOCAL_AMFLAGS} specifier in
168 your top-level @file{Makefile.am} file, as in:
169
170 @example
171 ACLOCAL_AMFLAGS = -I m4
172 @end example
173
174 You are now ready to call the M4 macros in @code{gnulib-comp.m4} from
175 @file{configure.ac}.  The macro @code{gl_EARLY} must be called as soon
176 as possible after verifying that the C compiler is working.
177 Typically, this is immediately after @code{AC_PROG_CC}, as in:
178
179 @example
180 ...
181 AC_PROG_CC
182 gl_EARLY
183 ...
184 @end example
185
186 The core part of the gnulib checks are done by the macro
187 @code{gl_INIT}.  Place it further down in the file, typically where
188 you normally check for header files or functions.  It must come after
189 other checks which may affect the compiler invocation, such as
190 @code{AC_MINIX}.  For example:
191
192 @example
193 ...
194 # For gnulib.
195 gl_INIT
196 ...
197 @end example
198
199 @code{gl_INIT} will in turn call the macros related with the
200 gnulib functions, be it specific gnulib macros, like @code{gl_FUNC_ALLOCA}
201 or autoconf or automake macros like @code{AC_FUNC_ALLOCA} or
202 @code{AM_FUNC_GETLINE}.  So there is no need to call those macros yourself
203 when you use the corresponding gnulib modules.
204
205 You must also make sure that the gnulib library is built.  Add the
206 @code{Makefile} in the gnulib source base directory to
207 @code{AC_CONFIG_FILES}, as in:
208
209 @example
210 AC_CONFIG_FILES(... lib/Makefile ...)
211 @end example
212
213 You must also make sure that @code{make} will recurse into the gnulib
214 directory.  To achieve this, add the gnulib source base directory to a
215 @code{SUBDIRS} Makefile.am statement, as in:
216
217 @example
218 SUBDIRS = lib
219 @end example
220
221 or if you, more likely, already have a few entries in @code{SUBDIRS},
222 you can add something like:
223
224 @example
225 SUBDIRS += lib
226 @end example
227
228 Finally, you have to add compiler and linker flags in the appropriate
229 source directories, so that you can make use of the gnulib library.
230 Since some modules (@samp{getopt}, for example) may copy files into
231 the build directory, @file{top_builddir/lib} is needed as well
232 as @file{top_srcdir/lib}.  For example:
233
234 @example
235 ...
236 AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib
237 ...
238 LDADD = lib/libgnu.a
239 ...
240 @end example
241
242 Don't forget to @code{#include} the various header files.  In this
243 example, you would need to make sure that @samp{#include <string.h>}
244 is evaluated when compiling all source code files, that want to make
245 use of @code{strdup}.
246
247 In the usual case where Autoconf is creating a @file{config.h} file,
248 you should include @file{config.h} first, before any other include
249 file.  That way, for example, if @file{config.h} defines
250 @samp{restrict} to be the empty string on a pre-C99 host, or a macro
251 like @samp{_FILE_OFFSET_BITS} that affects the layout of data
252 structures, the definition is consistent for all include files.
253 Also, on some platforms macros like @samp{_FILE_OFFSET_BITS} and
254 @samp{_GNU_SOURCE} may be ineffective, or may have only a limited
255 effect, if defined after the first system header file is included.
256
257 Finally, note that you can not use @code{AC_LIBOBJ} or
258 @code{AC_REPLACE_FUNCS} in your @file{configure.ac} and expect the
259 resulting object files to be automatically added to @file{lib/libgnu.a}.
260 This is because your @code{AC_LIBOBJ} and @code{AC_REPLACE_FUNCS} invocations
261 from @file{configure.ac} augment a variable @code{@@LIBOBJS@@} (and/or
262 @code{@@LTLIBOBJS@@} if using Libtool), whereas @file{lib/libgnu.a}
263 is built from the contents of a different variable, usually
264 @code{@@gl_LIBOBJS@@} (or @code{@@gl_LTLIBOBJS@@} if using Libtool).
265
266
267 @node Modified imports
268 @section Modified imports
269
270 You can at any moment decide to use Gnulib differently than the last time.
271
272 If you only want to use more Gnulib modules, simply invoke
273 @command{gnulib-tool --import @var{new-modules}}.  @code{gnulib-tool}
274 remembers which modules were used last time.  The list of modules that
275 you pass after @samp{--import} is @emph{added} to the previous list of
276 modules.
277
278 For most changes, such as added or removed modules, or even different
279 choices of @samp{--lib}, @samp{--source-base} or @samp{--aux-dir}, there
280 are two ways to perform the change.
281
282 The standard way is to modify manually the file @file{gnulib-cache.m4}
283 in the M4 macros directory, then launch @samp{gnulib-tool --import}.
284
285 The other way is to call @command{gnulib-tool} again, with the changed
286 command-line options.  Note that this doesn't let you remove modules,
287 because as you just learned, the list of modules is always cumulated.
288 Also this way is often impractical, because you don't remember the way
289 you invoked @code{gnulib-tool} last time.
290
291 The only change for which this doesn't work is a change of the
292 @samp{--m4-base} directory.  Because, when you pass a different value of
293 @samp{--m4-base}, @code{gnulib-tool} will not find the previous
294 @file{gnulib-cache.m4} file any more... A possible solution is to manually
295 copy the @file{gnulib-cache.m4} into the new M4 macro directory.
296
297 In the @file{gnulib-cache.m4}, the macros have the following meaning:
298 @table @code
299 @item gl_MODULES
300 The argument is a space separated list of the requested modules, not including
301 dependencies.
302
303 @item gl_AVOID
304 The argument is a space separated list of modules that should not be used,
305 even if they occur as dependencies.  Corresponds to the @samp{--avoid}
306 command line argument.
307
308 @item gl_SOURCE_BASE
309 The argument is the relative file name of the directory containing the gnulib
310 source files (mostly *.c and *.h files).  Corresponds to the
311 @samp{--source-base} command line argument.
312
313 @item gl_M4_BASE
314 The argument is the relative file name of the directory containing the gnulib
315 M4 macros (*.m4 files).  Corresponds to the @samp{--m4-base} command line
316 argument.
317
318 @item gl_TESTS_BASE
319 The argument is the relative file name of the directory containing the gnulib
320 unit test files.  Corresponds to the @samp{--tests-base} command line argument.
321
322 @item gl_LIB
323 The argument is the name of the library to be created.  Corresponds to the
324 @samp{--lib} command line argument.
325
326 @item gl_LGPL
327 The presence of this macro without arguments corresponds to the @samp{--lgpl}
328 command line argument.  The presence of this macro with an argument (whose
329 value must be 2 or 3) corresponds to the @samp{--lgpl=@var{arg}} command line
330 argument.
331
332 @item gl_LIBTOOL
333 The presence of this macro corresponds to the @samp{--libtool} command line
334 argument and to the absence of the @samp{--no-libtool} command line argument.
335 It takes no arguments.
336
337 @item gl_MACRO_PREFIX
338 The argument is the prefix to use for macros in the @file{gnulib-comp.m4}
339 file.  Corresponds to the @samp{--macro-prefix} command line argument.
340 @end table
341
342
343 @node Simple update
344 @section Simple update
345
346 When you want to update to a more recent version of Gnulib, without
347 changing the list of modules or other parameters, a simple call
348 does it:
349
350 @smallexample
351 $ gnulib-tool --import
352 @end smallexample
353
354 @noindent
355 This will create, update or remove files, as needed.
356
357 Note: From time to time, changes are made in Gnulib that are not backward
358 compatible.  When updating to a more recent Gnulib, you should consult
359 Gnulib's @file{NEWS} file to check whether the incompatible changes affect
360 your project.
361
362
363 @node Source changes
364 @section Changing your sources for use with Gnulib
365
366 Gnulib contains some header file overrides.  This means that when building
367 on systems with deficient header files in @file{/usr/include/}, it may create
368 files named @file{string.h}, @file{stdlib.h}, @file{stdint.h} or similar in
369 the build directory.  In the other source directories of your package you
370 will usually pass @samp{-I} options to the compiler, so that these Gnulib
371 substitutes are visible and take precedence over the files in
372 @file{/usr/include/}.
373
374 These Gnulib substitute header files rely on @file{<config.h>} being
375 already included.  Furthermore @file{<config.h>} must be the first include
376 in every compilation unit.  This means that to @emph{all your source files}
377 and likely also to @emph{all your tests source files} you need to add an
378 @samp{#include <config.h>} at the top.  Which source files are affected?
379 Exactly those whose compilation includes a @samp{-I} option that refers to
380 the Gnulib library directory.
381
382 This is annoying, but inevitable: On many systems, @file{<config.h>} is
383 used to set system dependent flags (such as @code{_GNU_SOURCE} on GNU systems),
384 and these flags have no effect after any system header file has been included.
385
386
387 @node gettextize and autopoint
388 @section Caveat: @code{gettextize} and @code{autopoint} users
389
390 @cindex gettextize, caveat
391 @cindex autopoint, caveat
392 The programs @code{gettextize} and @code{autopoint}, part of
393 GNU @code{gettext}, import or update the internationalization infrastructure.
394 Some of this infrastructure, namely ca.@: 20 autoconf macro files and the
395 @file{config.rpath} file, is also contained in Gnulib and may be imported
396 by @code{gnulib-tool}.  The use of @code{gettextize} or @code{autopoint}
397 will therefore overwrite some of the files that @code{gnulib-tool} has
398 imported, and vice versa.
399
400 Avoiding to use @code{gettextize} (manually, as package maintainer) or
401 @code{autopoint} (as part of a script like @code{autoreconf} or
402 @code{autogen.sh}) is not the solution: These programs also import the
403 infrastructure in the @file{po/} and optionally in the @file{intl/} directory.
404
405 The copies of the conflicting files in Gnulib are more up-to-date than
406 the copies brought in by @code{gettextize} and @code{autopoint}.  When a
407 new @code{gettext} release is made, the copies of the files in Gnulib will
408 be updated immediately.
409
410 The solution is therefore:
411
412 @enumerate
413 @item
414 When you run @code{gettextize}, always use the @code{gettextize} from the
415 matching GNU gettext release.  For the most recent Gnulib checkout, this is
416 the newest release found on @url{http://ftp.gnu.org/gnu/gettext/}.  For an
417 older Gnulib snapshot, it is the release that was the most recent release
418 at the time the Gnulib snapshot was taken.  Then, after @code{gettextize},
419 invoke @code{gnulib-tool}.
420
421 @item
422 When a script of yours run @code{autopoint}, invoke @code{gnulib-tool}
423 afterwards.
424
425 @item
426 If you get an error message like
427 @code{*** error: gettext infrastructure mismatch:
428 using a Makefile.in.in from gettext version ...
429 but the autoconf macros are from gettext version ...},
430 it means that a new GNU gettext release was made, and its autoconf macros
431 were integrated into Gnulib and now mismatch the @file{po/} infrastructure.
432 In this case, fetch and install the new GNU gettext release and run
433 @code{gettextize} followed by @code{gnulib-tool}.
434 @end enumerate
435
436
437 @node Localization
438 @section Handling Gnulib's own message translations
439
440 Gnulib provides some functions that emit translatable messages using GNU
441 @code{gettext}.  The @samp{gnulib} domain at the
442 @url{http://translationproject.org/, Translation Project} collects
443 translations of these messages, which you should incorporate into your
444 own programs.
445
446 There are two basic ways to achieve this.  The first, and older, method
447 is to list all the source files you use from Gnulib in your own
448 @file{po/POTFILES.in} file.  This will cause all the relevant
449 translatable strings to be included in your POT file.  When you send
450 this POT file to the Translation Project, translators will normally fill
451 in the translations of the Gnulib strings from their ``translation
452 memory'', and send you back updated PO files.
453
454 However, this process is error-prone: you might forget to list some
455 source files, or the translator might not be using a translation memory
456 and provide a different translation than another translator, or the
457 translation might not be kept in sync between Gnulib and your package.
458 It is also slow and causes substantial extra work, because a human
459 translator must be in the loop for each language and you will need to
460 incorporate their work on request.
461
462 For these reasons, a new method was designed and is now recommended.  If
463 you pass the @code{--po-base=@var{directory}} and @code{--po-domain=@var{domain}}
464 options to @code{gnulib-tool}, then @code{gnulib-tool} will create a
465 separate directory with its own @file{POTFILES.in}, and fetch current
466 translations directly from the Translation Project (using
467 @command{rsync} or @command{wget}, whichever is available).
468 The POT file in this directory will be called
469 @file{@var{domain}-gnulib.pot}, depending on the @var{domain} you gave to the
470 @code{--po-domain} option (typically the same as the package name).
471 This causes these translations to reside in a separate message domain,
472 so that they do not clash either with the translations for the main part
473 of your package nor with those of other packages on the system that use
474 possibly different versions of Gnulib.
475 When you use these options, the functions in Gnulib are built
476 in such a way that they will always use this domain regardless of the
477 default domain set by @code{textdomain}.
478
479 In order to use this method, you must -- in each program that might use
480 Gnulib code -- add an extra line to the part of the program that
481 initializes locale-dependent behavior.  Where you would normally write
482 something like:
483
484 @example
485 @group
486   setlocale (LC_ALL, "");
487   bindtextdomain (PACKAGE, LOCALEDIR);
488   textdomain (PACKAGE);
489 @end group
490 @end example
491
492 @noindent
493 you should add an additional @code{bindtextdomain} call to inform
494 gettext of where the MO files for the extra message domain may be found:
495
496 @example
497 @group
498   bindtextdomain (PACKAGE "-gnulib", LOCALEDIR);
499 @end group
500 @end example
501
502 (This example assumes that the @var{domain} that you specified
503 to @code{gnulib-tool} is the same as the value of the @code{PACKAGE}
504 preprocessor macro.)
505
506 Since you do not change the @code{textdomain} call, the default message
507 domain for your program remains the same and your own use of @code{gettext}
508 functions will not be affected.
509
510
511 @node VCS Issues
512 @section Issues with Version Control Systems
513
514 If a project stores its source files in a version control system (VCS),
515 such as CVS, SVN, or Git, one needs to decide which files to commit.
516
517 All files created by @code{gnulib-tool}, except @file{gnulib-cache.m4},
518 should be treated like generated source files, like for example a
519 @file{parser.c} file is generated from @file{parser.y}.
520
521 @itemize
522
523 @item
524 In projects which commit all source files, whether generated or not, into
525 their VCS, the @code{gnulib-tool} generated files should all be committed.
526 In this case, you also pass the option @samp{--no-vc-files} to
527 @code{gnulib-tool}.
528
529 Gnulib also contains files generated by @command{make} (and removed by
530 @code{make clean}), using information determined by @command{configure}.
531 They should not be checked into the VCS, but instead added to
532 @file{.gitignore} or @file{.cvsignore}.
533 When you have a Gnulib source file of the form @file{lib/foo.in.h}, the
534 corresponding @file{lib/foo.h} is such a file.
535
536 @item
537 In projects which customarily omit from their VCS all files that are generated
538 from other source files, all these files and directories would not be
539 added into the VCS.  The only file that must be added to the VCS is
540 @file{gnulib-cache.m4} in the M4 macros directory.  Also, the script for
541 restoring files not in the VCS, customarily called @file{autogen.sh} or
542 @file{bootstrap.sh}, will typically contain the statement for restoring
543 the omitted files:
544
545 @smallexample
546 $ gnulib-tool --update
547 @end smallexample
548
549 The @samp{--update} option operates much like the @samp{--import} option,
550 but it does not offer the possibility to change the way Gnulib is used.
551 Also it does not report in the ChangeLogs the files that it had to add
552 because they were missing.
553
554 @end itemize
555
556
557 @node Unit tests
558 @section Bundling the unit tests of the Gnulib modules
559
560 You can bundle the unit tests of the Gnulib modules together with your
561 package, through the @samp{--with-tests} option.  Together with
562 @samp{--with-tests}, you also specify the directory for these tests
563 through the @samp{--tests-base} option.  Of course, you need to add this
564 directory to the @code{SUBDIRS} variable in the @code{Makefile.am} of
565 the parent directory.
566
567 The advantage of having the unit tests bundled is that when your program
568 has a problem on a particular platform, running the unit tests may help
569 determine quickly if the problem is on Gnulib's side or on your package's
570 side.  Also, it helps verifying Gnulib's portability, of course.
571
572 The unit tests will be compiled and run when the user runs @samp{make check}.
573 When the user runs only @samp{make}, the unit tests will not be compiled.
574
575 In the @code{SUBDIRS} variable, it is useful to put the Gnulib tests directory
576 after the directory containing the other tests, not before:
577
578 @smallexample
579 SUBDIRS = gnulib-lib src man tests gnulib-tests
580 @end smallexample
581
582 @noindent
583 This will ensure that on platforms where there are test failures in either
584 directory, users will see and report the failures from the tests of your
585 program.
586
587 Note: In packages which use more than one invocation of @code{gnulib-tool}
588 in the scope of the same @code{configure.ac}, you cannot use
589 @samp{--with-tests}.  You will have to use a separate @code{configure.ac}
590 in this case.