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