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