Imported Upstream version 0.19.7
[platform/upstream/gettext.git] / gettext-tools / doc / gettext_13.html
1 <HTML>
2 <HEAD>
3 <!-- This HTML file has been created by texi2html 1.52b
4      from gettext.texi on 28 December 2015 -->
5
6 <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
7 <TITLE>GNU gettext utilities - 13  The Maintainer's View</TITLE>
8 </HEAD>
9 <BODY>
10 Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_12.html">previous</A>, <A HREF="gettext_14.html">next</A>, <A HREF="gettext_25.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>.
11 <P><HR><P>
12
13
14 <H1><A NAME="SEC213" HREF="gettext_toc.html#TOC213">13  The Maintainer's View</A></H1>
15 <P>
16 <A NAME="IDX1160"></A>
17
18 </P>
19 <P>
20 The maintainer of a package has many responsibilities.  One of them
21 is ensuring that the package will install easily on many platforms,
22 and that the magic we described earlier (see section <A HREF="gettext_2.html#SEC7">2  The User's View</A>) will work
23 for installers and end users.
24
25 </P>
26 <P>
27 Of course, there are many possible ways by which GNU <CODE>gettext</CODE>
28 might be integrated in a distribution, and this chapter does not cover
29 them in all generality.  Instead, it details one possible approach which
30 is especially adequate for many free software distributions following GNU
31 standards, or even better, Gnits standards, because GNU <CODE>gettext</CODE>
32 is purposely for helping the internationalization of the whole GNU
33 project, and as many other good free packages as possible.  So, the
34 maintainer's view presented here presumes that the package already has
35 a <TT>&lsquo;configure.ac&rsquo;</TT> file and uses GNU Autoconf.
36
37 </P>
38 <P>
39 Nevertheless, GNU <CODE>gettext</CODE> may surely be useful for free packages
40 not following GNU standards and conventions, but the maintainers of such
41 packages might have to show imagination and initiative in organizing
42 their distributions so <CODE>gettext</CODE> work for them in all situations.
43 There are surely many, out there.
44
45 </P>
46 <P>
47 Even if <CODE>gettext</CODE> methods are now stabilizing, slight adjustments
48 might be needed between successive <CODE>gettext</CODE> versions, so you
49 should ideally revise this chapter in subsequent releases, looking
50 for changes.
51
52 </P>
53
54
55
56 <H2><A NAME="SEC214" HREF="gettext_toc.html#TOC214">13.1  Flat or Non-Flat Directory Structures</A></H2>
57
58 <P>
59 Some free software packages are distributed as <CODE>tar</CODE> files which unpack
60 in a single directory, these are said to be <EM>flat</EM> distributions.
61 Other free software packages have a one level hierarchy of subdirectories, using
62 for example a subdirectory named <TT>&lsquo;doc/&rsquo;</TT> for the Texinfo manual and
63 man pages, another called <TT>&lsquo;lib/&rsquo;</TT> for holding functions meant to
64 replace or complement C libraries, and a subdirectory <TT>&lsquo;src/&rsquo;</TT> for
65 holding the proper sources for the package.  These other distributions
66 are said to be <EM>non-flat</EM>.
67
68 </P>
69 <P>
70 We cannot say much about flat distributions.  A flat
71 directory structure has the disadvantage of increasing the difficulty
72 of updating to a new version of GNU <CODE>gettext</CODE>.  Also, if you have
73 many PO files, this could somewhat pollute your single directory.
74 Also, GNU <CODE>gettext</CODE>'s libintl sources consist of C sources, shell
75 scripts, <CODE>sed</CODE> scripts and complicated Makefile rules, which don't
76 fit well into an existing flat structure.  For these reasons, we
77 recommend to use non-flat approach in this case as well.
78
79 </P>
80 <P>
81 Maybe because GNU <CODE>gettext</CODE> itself has a non-flat structure,
82 we have more experience with this approach, and this is what will be
83 described in the remaining of this chapter.  Some maintainers might
84 use this as an opportunity to unflatten their package structure.
85
86 </P>
87
88
89 <H2><A NAME="SEC215" HREF="gettext_toc.html#TOC215">13.2  Prerequisite Works</A></H2>
90 <P>
91 <A NAME="IDX1161"></A>
92 <A NAME="IDX1162"></A>
93 <A NAME="IDX1163"></A>
94
95 </P>
96 <P>
97 There are some works which are required for using GNU <CODE>gettext</CODE>
98 in one of your package.  These works have some kind of generality
99 that escape the point by point descriptions used in the remainder
100 of this chapter.  So, we describe them here.
101
102 </P>
103
104 <UL>
105 <LI>
106
107 Before attempting to use <CODE>gettextize</CODE> you should install some
108 other packages first.
109 Ensure that recent versions of GNU <CODE>m4</CODE>, GNU Autoconf and GNU
110 <CODE>gettext</CODE> are already installed at your site, and if not, proceed
111 to do this first.  If you get to install these things, beware that
112 GNU <CODE>m4</CODE> must be fully installed before GNU Autoconf is even
113 <EM>configured</EM>.
114
115 To further ease the task of a package maintainer the <CODE>automake</CODE>
116 package was designed and implemented.  GNU <CODE>gettext</CODE> now uses this
117 tool and the <TT>&lsquo;Makefile&rsquo;</TT>s in the <TT>&lsquo;intl/&rsquo;</TT> and <TT>&lsquo;po/&rsquo;</TT>
118 therefore know about all the goals necessary for using <CODE>automake</CODE>
119 and <TT>&lsquo;libintl&rsquo;</TT> in one project.
120
121 Those four packages are only needed by you, as a maintainer; the
122 installers of your own package and end users do not really need any of
123 GNU <CODE>m4</CODE>, GNU Autoconf, GNU <CODE>gettext</CODE>, or GNU <CODE>automake</CODE>
124 for successfully installing and running your package, with messages
125 properly translated.  But this is not completely true if you provide
126 internationalized shell scripts within your own package: GNU
127 <CODE>gettext</CODE> shall then be installed at the user site if the end users
128 want to see the translation of shell script messages.
129
130 <LI>
131
132 Your package should use Autoconf and have a <TT>&lsquo;configure.ac&rsquo;</TT> or
133 <TT>&lsquo;configure.in&rsquo;</TT> file.
134 If it does not, you have to learn how.  The Autoconf documentation
135 is quite well written, it is a good idea that you print it and get
136 familiar with it.
137
138 <LI>
139
140 Your C sources should have already been modified according to
141 instructions given earlier in this manual.  See section <A HREF="gettext_4.html#SEC16">4  Preparing Program Sources</A>.
142
143 <LI>
144
145 Your <TT>&lsquo;po/&rsquo;</TT> directory should receive all PO files submitted to you
146 by the translator teams, each having <TT>&lsquo;<VAR>ll</VAR>.po&rsquo;</TT> as a name.
147 This is not usually easy to get translation
148 work done before your package gets internationalized and available!
149 Since the cycle has to start somewhere, the easiest for the maintainer
150 is to start with absolutely no PO files, and wait until various
151 translator teams get interested in your package, and submit PO files.
152
153 </UL>
154
155 <P>
156 It is worth adding here a few words about how the maintainer should
157 ideally behave with PO files submissions.  As a maintainer, your role is
158 to authenticate the origin of the submission as being the representative
159 of the appropriate translating teams of the Translation Project (forward
160 the submission to <TT>&lsquo;coordinator@translationproject.org&rsquo;</TT> in case of doubt),
161 to ensure that the PO file format is not severely broken and does not
162 prevent successful installation, and for the rest, to merely put these
163 PO files in <TT>&lsquo;po/&rsquo;</TT> for distribution.
164
165 </P>
166 <P>
167 As a maintainer, you do not have to take on your shoulders the
168 responsibility of checking if the translations are adequate or
169 complete, and should avoid diving into linguistic matters.  Translation
170 teams drive themselves and are fully responsible of their linguistic
171 choices for the Translation Project.  Keep in mind that translator teams are <EM>not</EM>
172 driven by maintainers.  You can help by carefully redirecting all
173 communications and reports from users about linguistic matters to the
174 appropriate translation team, or explain users how to reach or join
175 their team.  The simplest might be to send them the <TT>&lsquo;ABOUT-NLS&rsquo;</TT> file.
176
177 </P>
178 <P>
179 Maintainers should <EM>never ever</EM> apply PO file bug reports
180 themselves, short-cutting translation teams.  If some translator has
181 difficulty to get some of her points through her team, it should not be
182 an option for her to directly negotiate translations with maintainers.
183 Teams ought to settle their problems themselves, if any.  If you, as
184 a maintainer, ever think there is a real problem with a team, please
185 never try to <EM>solve</EM> a team's problem on your own.
186
187 </P>
188
189
190 <H2><A NAME="SEC216" HREF="gettext_toc.html#TOC216">13.3  Invoking the <CODE>gettextize</CODE> Program</A></H2>
191
192 <P>
193 The <CODE>gettextize</CODE> program is an interactive tool that helps the
194 maintainer of a package internationalized through GNU <CODE>gettext</CODE>.
195 It is used for two purposes:
196
197 </P>
198
199 <UL>
200 <LI>
201
202 As a wizard, when a package is modified to use GNU <CODE>gettext</CODE> for
203 the first time.
204
205 <LI>
206
207 As a migration tool, for upgrading the GNU <CODE>gettext</CODE> support in
208 a package from a previous to a newer version of GNU <CODE>gettext</CODE>.
209 </UL>
210
211 <P>
212 This program performs the following tasks:
213
214 </P>
215
216 <UL>
217 <LI>
218
219 It copies into the package some files that are consistently and
220 identically needed in every package internationalized through
221 GNU <CODE>gettext</CODE>.
222
223 <LI>It performs as many of the tasks mentioned in the next section
224
225 section <A HREF="gettext_13.html#SEC217">13.4  Files You Must Create or Alter</A> as can be performed automatically.
226
227 <LI>It removes obsolete files and idioms used for previous GNU
228
229 <CODE>gettext</CODE> versions to the form recommended for the current GNU
230 <CODE>gettext</CODE> version.
231
232 <LI>It prints a summary of the tasks that ought to be done manually
233
234 and could not be done automatically by <CODE>gettextize</CODE>.
235 </UL>
236
237 <P>
238 It can be invoked as follows:
239
240 </P>
241 <P>
242 <A NAME="IDX1164"></A>
243 <A NAME="IDX1165"></A>
244
245 <PRE>
246 gettextize [ <VAR>option</VAR>... ] [ <VAR>directory</VAR> ]
247 </PRE>
248
249 <P>
250 and accepts the following options:
251
252 </P>
253 <DL COMPACT>
254
255 <DT><SAMP>&lsquo;-f&rsquo;</SAMP>
256 <DD>
257 <DT><SAMP>&lsquo;--force&rsquo;</SAMP>
258 <DD>
259 <A NAME="IDX1166"></A>
260 <A NAME="IDX1167"></A>
261 Force replacement of files which already exist.
262
263 <DT><SAMP>&lsquo;--intl&rsquo;</SAMP>
264 <DD>
265 <A NAME="IDX1168"></A>
266 Install the libintl sources in a subdirectory named <TT>&lsquo;intl/&rsquo;</TT>.
267 This libintl will be used to provide internationalization on systems
268 that don't have GNU libintl installed.  If this option is omitted,
269 the call to <CODE>AM_GNU_GETTEXT</CODE> in <TT>&lsquo;configure.ac&rsquo;</TT> should read:
270 <SAMP>&lsquo;AM_GNU_GETTEXT([external])&rsquo;</SAMP>, and internationalization will not
271 be enabled on systems lacking GNU gettext.
272
273 <DT><SAMP>&lsquo;--po-dir=<VAR>dir</VAR>&rsquo;</SAMP>
274 <DD>
275 <A NAME="IDX1169"></A>
276 Specify a directory containing PO files.  Such a directory contains the
277 translations into various languages of a particular POT file.  This
278 option can be specified multiple times, once for each translation domain.
279 If it is not specified, the directory named <TT>&lsquo;po/&rsquo;</TT> is updated.
280
281 <DT><SAMP>&lsquo;--no-changelog&rsquo;</SAMP>
282 <DD>
283 <A NAME="IDX1170"></A>
284 Don't update or create ChangeLog files.  By default, <CODE>gettextize</CODE>
285 logs all changes (file additions, modifications and removals) in a
286 file called <SAMP>&lsquo;ChangeLog&rsquo;</SAMP> in each affected directory.
287
288 <DT><SAMP>&lsquo;--symlink&rsquo;</SAMP>
289 <DD>
290 <A NAME="IDX1171"></A>
291 Make symbolic links instead of copying the needed files.  This can be
292 useful to save a few kilobytes of disk space, but it requires extra
293 effort to create self-contained tarballs, it may disturb some mechanism
294 the maintainer applies to the sources, and it is likely to introduce
295 bugs when a newer version of <CODE>gettext</CODE> is installed on the system.
296
297 <DT><SAMP>&lsquo;-n&rsquo;</SAMP>
298 <DD>
299 <DT><SAMP>&lsquo;--dry-run&rsquo;</SAMP>
300 <DD>
301 <A NAME="IDX1172"></A>
302 <A NAME="IDX1173"></A>
303 Print modifications but don't perform them.  All actions that
304 <CODE>gettextize</CODE> would normally execute are inhibited and instead only
305 listed on standard output.
306
307 <DT><SAMP>&lsquo;--help&rsquo;</SAMP>
308 <DD>
309 <A NAME="IDX1174"></A>
310 Display this help and exit.
311
312 <DT><SAMP>&lsquo;--version&rsquo;</SAMP>
313 <DD>
314 <A NAME="IDX1175"></A>
315 Output version information and exit.
316
317 </DL>
318
319 <P>
320 If <VAR>directory</VAR> is given, this is the top level directory of a
321 package to prepare for using GNU <CODE>gettext</CODE>.  If not given, it
322 is assumed that the current directory is the top level directory of
323 such a package.
324
325 </P>
326 <P>
327 The program <CODE>gettextize</CODE> provides the following files.  However,
328 no existing file will be replaced unless the option <CODE>--force</CODE>
329 (<CODE>-f</CODE>) is specified.
330
331 </P>
332
333 <OL>
334 <LI>
335
336 The <TT>&lsquo;ABOUT-NLS&rsquo;</TT> file is copied in the main directory of your package,
337 the one being at the top level.  This file gives the main indications
338 about how to install and use the Native Language Support features
339 of your program.  You might elect to use a more recent copy of this
340 <TT>&lsquo;ABOUT-NLS&rsquo;</TT> file than the one provided through <CODE>gettextize</CODE>,
341 if you have one handy.  You may also fetch a more recent copy of file
342 <TT>&lsquo;ABOUT-NLS&rsquo;</TT> from Translation Project sites, and from most GNU
343 archive sites.
344
345 <LI>
346
347 A <TT>&lsquo;po/&rsquo;</TT> directory is created for eventually holding
348 all translation files, but initially only containing the file
349 <TT>&lsquo;po/Makefile.in.in&rsquo;</TT> from the GNU <CODE>gettext</CODE> distribution
350 (beware the double <SAMP>&lsquo;.in&rsquo;</SAMP> in the file name) and a few auxiliary
351 files.  If the <TT>&lsquo;po/&rsquo;</TT> directory already exists, it will be preserved
352 along with the files it contains, and only <TT>&lsquo;Makefile.in.in&rsquo;</TT> and
353 the auxiliary files will be overwritten.
354
355 If <SAMP>&lsquo;--po-dir&rsquo;</SAMP> has been specified, this holds for every directory
356 specified through <SAMP>&lsquo;--po-dir&rsquo;</SAMP>, instead of <TT>&lsquo;po/&rsquo;</TT>.
357
358 <LI>
359
360 Only if <SAMP>&lsquo;--intl&rsquo;</SAMP> has been specified:
361 A <TT>&lsquo;intl/&rsquo;</TT> directory is created and filled with most of the files
362 originally in the <TT>&lsquo;intl/&rsquo;</TT> directory of the GNU <CODE>gettext</CODE>
363 distribution.  Also, if option <CODE>--force</CODE> (<CODE>-f</CODE>) is given,
364 the <TT>&lsquo;intl/&rsquo;</TT> directory is emptied first.
365
366 <LI>
367
368 The file <TT>&lsquo;config.rpath&rsquo;</TT> is copied into the directory containing
369 configuration support files.  It is needed by the <CODE>AM_GNU_GETTEXT</CODE>
370 autoconf macro.
371
372 <LI>
373
374 Only if the project is using GNU <CODE>automake</CODE>:
375 A set of <CODE>autoconf</CODE> macro files is copied into the package's
376 <CODE>autoconf</CODE> macro repository, usually in a directory called <TT>&lsquo;m4/&rsquo;</TT>.
377 </OL>
378
379 <P>
380 If your site support symbolic links, <CODE>gettextize</CODE> will not
381 actually copy the files into your package, but establish symbolic
382 links instead.  This avoids duplicating the disk space needed in
383 all packages.  Merely using the <SAMP>&lsquo;-h&rsquo;</SAMP> option while creating the
384 <CODE>tar</CODE> archive of your distribution will resolve each link by an
385 actual copy in the distribution archive.  So, to insist, you really
386 should use <SAMP>&lsquo;-h&rsquo;</SAMP> option with <CODE>tar</CODE> within your <CODE>dist</CODE>
387 goal of your main <TT>&lsquo;Makefile.in&rsquo;</TT>.
388
389 </P>
390 <P>
391 Furthermore, <CODE>gettextize</CODE> will update all <TT>&lsquo;Makefile.am&rsquo;</TT> files
392 in each affected directory, as well as the top level <TT>&lsquo;configure.ac&rsquo;</TT>
393 or <TT>&lsquo;configure.in&rsquo;</TT> file.
394
395 </P>
396 <P>
397 It is interesting to understand that most new files for supporting
398 GNU <CODE>gettext</CODE> facilities in one package go in <TT>&lsquo;intl/&rsquo;</TT>,
399 <TT>&lsquo;po/&rsquo;</TT> and <TT>&lsquo;m4/&rsquo;</TT> subdirectories.  One distinction between
400 <TT>&lsquo;intl/&rsquo;</TT> and the two other directories is that <TT>&lsquo;intl/&rsquo;</TT> is
401 meant to be completely identical in all packages using GNU <CODE>gettext</CODE>,
402 while the other directories will mostly contain package dependent
403 files.
404
405 </P>
406 <P>
407 The <CODE>gettextize</CODE> program makes backup files for all files it
408 replaces or changes, and also write ChangeLog entries about these
409 changes.  This way, the careful maintainer can check after running
410 <CODE>gettextize</CODE> whether its changes are acceptable to him, and
411 possibly adjust them.  An exception to this rule is the <TT>&lsquo;intl/&rsquo;</TT>
412 directory, which is added or replaced or removed as a whole.
413
414 </P>
415 <P>
416 It is important to understand that <CODE>gettextize</CODE> can not do the
417 entire job of adapting a package for using GNU <CODE>gettext</CODE>.  The
418 amount of remaining work depends on whether the package uses GNU
419 <CODE>automake</CODE> or not.  But in any case, the maintainer should still
420 read the section section <A HREF="gettext_13.html#SEC217">13.4  Files You Must Create or Alter</A> after invoking <CODE>gettextize</CODE>.
421
422 </P>
423 <P>
424 In particular, if after using <SAMP>&lsquo;gettexize&rsquo;</SAMP>, you get an error
425 <SAMP>&lsquo;AC_COMPILE_IFELSE was called before AC_GNU_SOURCE&rsquo;</SAMP> or
426 <SAMP>&lsquo;AC_RUN_IFELSE was called before AC_GNU_SOURCE&rsquo;</SAMP>, you can fix it
427 by modifying <TT>&lsquo;configure.ac&rsquo;</TT>, as described in section <A HREF="gettext_13.html#SEC222">13.4.5  <TT>&lsquo;configure.ac&rsquo;</TT> at top level</A>.
428
429 </P>
430 <P>
431 It is also important to understand that <CODE>gettextize</CODE> is not part
432 of the GNU build system, in the sense that it should not be invoked
433 automatically, and not be invoked by someone who doesn't assume the
434 responsibilities of a package maintainer.  For the latter purpose, a
435 separate tool is provided, see section <A HREF="gettext_13.html#SEC243">13.6.4  Invoking the <CODE>autopoint</CODE> Program</A>.
436
437 </P>
438
439
440 <H2><A NAME="SEC217" HREF="gettext_toc.html#TOC217">13.4  Files You Must Create or Alter</A></H2>
441 <P>
442 <A NAME="IDX1176"></A>
443
444 </P>
445 <P>
446 Besides files which are automatically added through <CODE>gettextize</CODE>,
447 there are many files needing revision for properly interacting with
448 GNU <CODE>gettext</CODE>.  If you are closely following GNU standards for
449 Makefile engineering and auto-configuration, the adaptations should
450 be easier to achieve.  Here is a point by point description of the
451 changes needed in each.
452
453 </P>
454 <P>
455 So, here comes a list of files, each one followed by a description of
456 all alterations it needs.  Many examples are taken out from the GNU
457 <CODE>gettext</CODE> 0.19.7 distribution itself, or from the GNU
458 <CODE>hello</CODE> distribution (<A HREF="http://www.gnu.org/software/hello">http://www.gnu.org/software/hello</A>).
459 You may indeed refer to the source code of the GNU <CODE>gettext</CODE> and
460 GNU <CODE>hello</CODE> packages, as they are intended to be good examples for
461 using GNU gettext functionality.
462
463 </P>
464
465
466
467 <H3><A NAME="SEC218" HREF="gettext_toc.html#TOC218">13.4.1  <TT>&lsquo;POTFILES.in&rsquo;</TT> in <TT>&lsquo;po/&rsquo;</TT></A></H3>
468 <P>
469 <A NAME="IDX1177"></A>
470
471 </P>
472 <P>
473 The <TT>&lsquo;po/&rsquo;</TT> directory should receive a file named
474 <TT>&lsquo;POTFILES.in&rsquo;</TT>.  This file tells which files, among all program
475 sources, have marked strings needing translation.  Here is an example
476 of such a file:
477
478 </P>
479
480 <PRE>
481 # List of source files containing translatable strings.
482 # Copyright (C) 1995 Free Software Foundation, Inc.
483
484 # Common library files
485 lib/error.c
486 lib/getopt.c
487 lib/xmalloc.c
488
489 # Package source files
490 src/gettext.c
491 src/msgfmt.c
492 src/xgettext.c
493 </PRE>
494
495 <P>
496 Hash-marked comments and white lines are ignored.  All other lines
497 list those source files containing strings marked for translation
498 (see section <A HREF="gettext_4.html#SEC20">4.4  How Marks Appear in Sources</A>), in a notation relative to the top level
499 of your whole distribution, rather than the location of the
500 <TT>&lsquo;POTFILES.in&rsquo;</TT> file itself.
501
502 </P>
503 <P>
504 When a C file is automatically generated by a tool, like <CODE>flex</CODE> or
505 <CODE>bison</CODE>, that doesn't introduce translatable strings by itself,
506 it is recommended to list in <TT>&lsquo;po/POTFILES.in&rsquo;</TT> the real source file
507 (ending in <TT>&lsquo;.l&rsquo;</TT> in the case of <CODE>flex</CODE>, or in <TT>&lsquo;.y&rsquo;</TT> in the
508 case of <CODE>bison</CODE>), not the generated C file.
509
510 </P>
511
512
513 <H3><A NAME="SEC219" HREF="gettext_toc.html#TOC219">13.4.2  <TT>&lsquo;LINGUAS&rsquo;</TT> in <TT>&lsquo;po/&rsquo;</TT></A></H3>
514 <P>
515 <A NAME="IDX1178"></A>
516
517 </P>
518 <P>
519 The <TT>&lsquo;po/&rsquo;</TT> directory should also receive a file named
520 <TT>&lsquo;LINGUAS&rsquo;</TT>.  This file contains the list of available translations.
521 It is a whitespace separated list.  Hash-marked comments and white lines
522 are ignored.  Here is an example file:
523
524 </P>
525
526 <PRE>
527 # Set of available languages.
528 de fr
529 </PRE>
530
531 <P>
532 This example means that German and French PO files are available, so
533 that these languages are currently supported by your package.  If you
534 want to further restrict, at installation time, the set of installed
535 languages, this should not be done by modifying the <TT>&lsquo;LINGUAS&rsquo;</TT> file,
536 but rather by using the <CODE>LINGUAS</CODE> environment variable
537 (see section <A HREF="gettext_14.html#SEC247">14  The Installer's and Distributor's View</A>).
538
539 </P>
540 <P>
541 It is recommended that you add the "languages" <SAMP>&lsquo;en@quot&rsquo;</SAMP> and
542 <SAMP>&lsquo;en@boldquot&rsquo;</SAMP> to the <CODE>LINGUAS</CODE> file.  <CODE>en@quot</CODE> is a
543 variant of English message catalogs (<CODE>en</CODE>) which uses real quotation
544 marks instead of the ugly looking asymmetric ASCII substitutes <SAMP>&lsquo;`&rsquo;</SAMP>
545 and <SAMP>&lsquo;'&rsquo;</SAMP>.  <CODE>en@boldquot</CODE> is a variant of <CODE>en@quot</CODE> that
546 additionally outputs quoted pieces of text in a bold font, when used in
547 a terminal emulator which supports the VT100 escape sequences (such as
548 <CODE>xterm</CODE> or the Linux console, but not Emacs in <KBD>M-x shell</KBD> mode).
549
550 </P>
551 <P>
552 These extra message catalogs <SAMP>&lsquo;en@quot&rsquo;</SAMP> and <SAMP>&lsquo;en@boldquot&rsquo;</SAMP>
553 are constructed automatically, not by translators; to support them, you
554 need the files <TT>&lsquo;Rules-quot&rsquo;</TT>, <TT>&lsquo;quot.sed&rsquo;</TT>, <TT>&lsquo;boldquot.sed&rsquo;</TT>,
555 <TT>&lsquo;en@quot.header&rsquo;</TT>, <TT>&lsquo;en@boldquot.header&rsquo;</TT>, <TT>&lsquo;insert-header.sin&rsquo;</TT>
556 in the <TT>&lsquo;po/&rsquo;</TT> directory.  You can copy them from GNU gettext's <TT>&lsquo;po/&rsquo;</TT>
557 directory; they are also installed by running <CODE>gettextize</CODE>.
558
559 </P>
560
561
562 <H3><A NAME="SEC220" HREF="gettext_toc.html#TOC220">13.4.3  <TT>&lsquo;Makevars&rsquo;</TT> in <TT>&lsquo;po/&rsquo;</TT></A></H3>
563 <P>
564 <A NAME="IDX1179"></A>
565
566 </P>
567 <P>
568 The <TT>&lsquo;po/&rsquo;</TT> directory also has a file named <TT>&lsquo;Makevars&rsquo;</TT>.  It
569 contains variables that are specific to your project.  <TT>&lsquo;po/Makevars&rsquo;</TT>
570 gets inserted into the <TT>&lsquo;po/Makefile&rsquo;</TT> when the latter is created.
571 The variables thus take effect when the POT file is created or updated,
572 and when the message catalogs get installed.
573
574 </P>
575 <P>
576 The first three variables can be left unmodified if your package has a
577 single message domain and, accordingly, a single <TT>&lsquo;po/&rsquo;</TT> directory.
578 Only packages which have multiple <TT>&lsquo;po/&rsquo;</TT> directories at different
579 locations need to adjust the three first variables defined in
580 <TT>&lsquo;Makevars&rsquo;</TT>.
581
582 </P>
583 <P>
584 As an alternative to the <CODE>XGETTEXT_OPTIONS</CODE> variables, it is also
585 possible to specify <CODE>xgettext</CODE> options through the
586 <CODE>AM_XGETTEXT_OPTION</CODE> autoconf macro.  See section <A HREF="gettext_13.html#SEC237">13.5.6  AM_XGETTEXT_OPTION in <TT>&lsquo;po.m4&rsquo;</TT></A>.
587
588 </P>
589
590
591 <H3><A NAME="SEC221" HREF="gettext_toc.html#TOC221">13.4.4  Extending <TT>&lsquo;Makefile&rsquo;</TT> in <TT>&lsquo;po/&rsquo;</TT></A></H3>
592 <P>
593 <A NAME="IDX1180"></A>
594
595 </P>
596 <P>
597 All files called <TT>&lsquo;Rules-*&rsquo;</TT> in the <TT>&lsquo;po/&rsquo;</TT> directory get appended to
598 the <TT>&lsquo;po/Makefile&rsquo;</TT> when it is created.  They present an opportunity to
599 add rules for special PO files to the Makefile, without needing to mess
600 with <TT>&lsquo;po/Makefile.in.in&rsquo;</TT>.
601
602 </P>
603 <P>
604 <A NAME="IDX1181"></A>
605 <A NAME="IDX1182"></A>
606 GNU gettext comes with a <TT>&lsquo;Rules-quot&rsquo;</TT> file, containing rules for
607 building catalogs <TT>&lsquo;en@quot.po&rsquo;</TT> and <TT>&lsquo;en@boldquot.po&rsquo;</TT>.  The
608 effect of <TT>&lsquo;en@quot.po&rsquo;</TT> is that people who set their <CODE>LANGUAGE</CODE>
609 environment variable to <SAMP>&lsquo;en@quot&rsquo;</SAMP> will get messages with proper
610 looking symmetric Unicode quotation marks instead of abusing the ASCII
611 grave accent and the ASCII apostrophe for indicating quotations.  To
612 enable this catalog, simply add <CODE>en@quot</CODE> to the <TT>&lsquo;po/LINGUAS&rsquo;</TT>
613 file.  The effect of <TT>&lsquo;en@boldquot.po&rsquo;</TT> is that people who set
614 <CODE>LANGUAGE</CODE> to <SAMP>&lsquo;en@boldquot&rsquo;</SAMP> will get not only proper quotation
615 marks, but also the quoted text will be shown in a bold font on terminals
616 and consoles.  This catalog is useful only for command-line programs, not
617 GUI programs.  To enable it, similarly add <CODE>en@boldquot</CODE> to the
618 <TT>&lsquo;po/LINGUAS&rsquo;</TT> file.
619
620 </P>
621 <P>
622 Similarly, you can create rules for building message catalogs for the
623 <TT>&lsquo;sr@latin&rsquo;</TT> locale -- Serbian written with the Latin alphabet --
624 from those for the <TT>&lsquo;sr&rsquo;</TT> locale -- Serbian written with Cyrillic
625 letters.  See section <A HREF="gettext_9.html#SEC102">9.4  Invoking the <CODE>msgfilter</CODE> Program</A>.
626
627 </P>
628
629
630 <H3><A NAME="SEC222" HREF="gettext_toc.html#TOC222">13.4.5  <TT>&lsquo;configure.ac&rsquo;</TT> at top level</A></H3>
631
632 <P>
633 <TT>&lsquo;configure.ac&rsquo;</TT> or <TT>&lsquo;configure.in&rsquo;</TT> - this is the source from which
634 <CODE>autoconf</CODE> generates the <TT>&lsquo;configure&rsquo;</TT> script.
635
636 </P>
637
638 <OL>
639 <LI>Declare the package and version.
640
641 <A NAME="IDX1183"></A>
642
643 This is done by a set of lines like these:
644
645
646 <PRE>
647 PACKAGE=gettext
648 VERSION=0.19.7
649 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
650 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
651 AC_SUBST(PACKAGE)
652 AC_SUBST(VERSION)
653 </PRE>
654
655 or, if you are using GNU <CODE>automake</CODE>, by a line like this:
656
657
658 <PRE>
659 AM_INIT_AUTOMAKE(gettext, 0.19.7)
660 </PRE>
661
662 Of course, you replace <SAMP>&lsquo;gettext&rsquo;</SAMP> with the name of your package,
663 and <SAMP>&lsquo;0.19.7&rsquo;</SAMP> by its version numbers, exactly as they
664 should appear in the packaged <CODE>tar</CODE> file name of your distribution
665 (<TT>&lsquo;gettext-0.19.7.tar.gz&rsquo;</TT>, here).
666
667 <LI>Check for internationalization support.
668
669 Here is the main <CODE>m4</CODE> macro for triggering internationalization
670 support.  Just add this line to <TT>&lsquo;configure.ac&rsquo;</TT>:
671
672
673 <PRE>
674 AM_GNU_GETTEXT
675 </PRE>
676
677 This call is purposely simple, even if it generates a lot of configure
678 time checking and actions.
679
680 If you have suppressed the <TT>&lsquo;intl/&rsquo;</TT> subdirectory by calling
681 <CODE>gettextize</CODE> without <SAMP>&lsquo;--intl&rsquo;</SAMP> option, this call should read
682
683
684 <PRE>
685 AM_GNU_GETTEXT([external])
686 </PRE>
687
688 <LI>Have output files created.
689
690 The <CODE>AC_OUTPUT</CODE> directive, at the end of your <TT>&lsquo;configure.ac&rsquo;</TT>
691 file, needs to be modified in two ways:
692
693
694 <PRE>
695 AC_OUTPUT([<VAR>existing configuration files</VAR> intl/Makefile po/Makefile.in],
696 [<VAR>existing additional actions</VAR>])
697 </PRE>
698
699 The modification to the first argument to <CODE>AC_OUTPUT</CODE> asks
700 for substitution in the <TT>&lsquo;intl/&rsquo;</TT> and <TT>&lsquo;po/&rsquo;</TT> directories.
701 Note the <SAMP>&lsquo;.in&rsquo;</SAMP> suffix used for <TT>&lsquo;po/&rsquo;</TT> only.  This is because
702 the distributed file is really <TT>&lsquo;po/Makefile.in.in&rsquo;</TT>.
703
704 If you have suppressed the <TT>&lsquo;intl/&rsquo;</TT> subdirectory by calling
705 <CODE>gettextize</CODE> without <SAMP>&lsquo;--intl&rsquo;</SAMP> option, then you don't need to
706 add <CODE>intl/Makefile</CODE> to the <CODE>AC_OUTPUT</CODE> line.
707
708 </OL>
709
710 <P>
711 If, after doing the recommended modifications, a command like
712 <SAMP>&lsquo;aclocal -I m4&rsquo;</SAMP> or <SAMP>&lsquo;autoconf&rsquo;</SAMP> or <SAMP>&lsquo;autoreconf&rsquo;</SAMP> fails with
713 a trace similar to this:
714
715 </P>
716
717 <PRE>
718 configure.ac:44: warning: AC_COMPILE_IFELSE was called before AC_GNU_SOURCE
719 ../../lib/autoconf/specific.m4:335: AC_GNU_SOURCE is expanded from...
720 m4/lock.m4:224: gl_LOCK is expanded from...
721 m4/gettext.m4:571: gt_INTL_SUBDIR_CORE is expanded from...
722 m4/gettext.m4:472: AM_INTL_SUBDIR is expanded from...
723 m4/gettext.m4:347: AM_GNU_GETTEXT is expanded from...
724 configure.ac:44: the top level
725 configure.ac:44: warning: AC_RUN_IFELSE was called before AC_GNU_SOURCE
726 </PRE>
727
728 <P>
729 you need to add an explicit invocation of <SAMP>&lsquo;AC_GNU_SOURCE&rsquo;</SAMP> in the
730 <TT>&lsquo;configure.ac&rsquo;</TT> file - after <SAMP>&lsquo;AC_PROG_CC&rsquo;</SAMP> but before
731 <SAMP>&lsquo;AM_GNU_GETTEXT&rsquo;</SAMP>, most likely very close to the <SAMP>&lsquo;AC_PROG_CC&rsquo;</SAMP>
732 invocation.  This is necessary because of ordering restrictions imposed
733 by GNU autoconf.
734
735 </P>
736
737
738 <H3><A NAME="SEC223" HREF="gettext_toc.html#TOC223">13.4.6  <TT>&lsquo;config.guess&rsquo;</TT>, <TT>&lsquo;config.sub&rsquo;</TT> at top level</A></H3>
739
740 <P>
741 If you haven't suppressed the <TT>&lsquo;intl/&rsquo;</TT> subdirectory,
742 you need to add the GNU <TT>&lsquo;config.guess&rsquo;</TT> and <TT>&lsquo;config.sub&rsquo;</TT> files
743 to your distribution.  They are needed because the <TT>&lsquo;intl/&rsquo;</TT> directory
744 has platform dependent support for determining the locale's character
745 encoding and therefore needs to identify the platform.
746
747 </P>
748 <P>
749 You can obtain the newest version of <TT>&lsquo;config.guess&rsquo;</TT> and
750 <TT>&lsquo;config.sub&rsquo;</TT> from the <SAMP>&lsquo;config&rsquo;</SAMP> project at
751 <TT>&lsquo;http://savannah.gnu.org/&rsquo;</TT>. The commands to fetch them are
752
753 <PRE>
754 $ wget -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
755 $ wget -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
756 </PRE>
757
758 <P>
759 Less recent versions are also contained in the GNU <CODE>automake</CODE> and
760 GNU <CODE>libtool</CODE> packages.
761
762 </P>
763 <P>
764 Normally, <TT>&lsquo;config.guess&rsquo;</TT> and <TT>&lsquo;config.sub&rsquo;</TT> are put at the
765 top level of a distribution.  But it is also possible to put them in a
766 subdirectory, altogether with other configuration support files like
767 <TT>&lsquo;install-sh&rsquo;</TT>, <TT>&lsquo;ltconfig&rsquo;</TT>, <TT>&lsquo;ltmain.sh&rsquo;</TT> or <TT>&lsquo;missing&rsquo;</TT>.
768 All you need to do, other than moving the files, is to add the following line
769 to your <TT>&lsquo;configure.ac&rsquo;</TT>.
770
771 </P>
772
773 <PRE>
774 AC_CONFIG_AUX_DIR([<VAR>subdir</VAR>])
775 </PRE>
776
777
778
779 <H3><A NAME="SEC224" HREF="gettext_toc.html#TOC224">13.4.7  <TT>&lsquo;mkinstalldirs&rsquo;</TT> at top level</A></H3>
780 <P>
781 <A NAME="IDX1184"></A>
782
783 </P>
784 <P>
785 With earlier versions of GNU gettext, you needed to add the GNU
786 <TT>&lsquo;mkinstalldirs&rsquo;</TT> script to your distribution.  This is not needed any
787 more.  You can remove it if you not also using an automake version older than
788 automake 1.9.
789
790 </P>
791
792
793 <H3><A NAME="SEC225" HREF="gettext_toc.html#TOC225">13.4.8  <TT>&lsquo;aclocal.m4&rsquo;</TT> at top level</A></H3>
794 <P>
795 <A NAME="IDX1185"></A>
796
797 </P>
798 <P>
799 If you do not have an <TT>&lsquo;aclocal.m4&rsquo;</TT> file in your distribution,
800 the simplest is to concatenate the files <TT>&lsquo;codeset.m4&rsquo;</TT>, <TT>&lsquo;fcntl-o.m4&rsquo;</TT>,
801 <TT>&lsquo;gettext.m4&rsquo;</TT>, <TT>&lsquo;glibc2.m4&rsquo;</TT>, <TT>&lsquo;glibc21.m4&rsquo;</TT>, <TT>&lsquo;iconv.m4&rsquo;</TT>,
802 <TT>&lsquo;intdiv0.m4&rsquo;</TT>, <TT>&lsquo;intl.m4&rsquo;</TT>, <TT>&lsquo;intldir.m4&rsquo;</TT>, <TT>&lsquo;intlmacosx.m4&rsquo;</TT>,
803 <TT>&lsquo;intmax.m4&rsquo;</TT>, <TT>&lsquo;inttypes_h.m4&rsquo;</TT>, <TT>&lsquo;inttypes-pri.m4&rsquo;</TT>,
804 <TT>&lsquo;lcmessage.m4&rsquo;</TT>, <TT>&lsquo;lib-ld.m4&rsquo;</TT>, <TT>&lsquo;lib-link.m4&rsquo;</TT>,
805 <TT>&lsquo;lib-prefix.m4&rsquo;</TT>, <TT>&lsquo;lock.m4&rsquo;</TT>, <TT>&lsquo;longlong.m4&rsquo;</TT>, <TT>&lsquo;nls.m4&rsquo;</TT>,
806 <TT>&lsquo;po.m4&rsquo;</TT>, <TT>&lsquo;printf-posix.m4&rsquo;</TT>, <TT>&lsquo;progtest.m4&rsquo;</TT>, <TT>&lsquo;size_max.m4&rsquo;</TT>,
807 <TT>&lsquo;stdint_h.m4&rsquo;</TT>, <TT>&lsquo;threadlib.m4&rsquo;</TT>, <TT>&lsquo;uintmax_t.m4&rsquo;</TT>,
808 <TT>&lsquo;visibility.m4&rsquo;</TT>, <TT>&lsquo;wchar_t.m4&rsquo;</TT>, <TT>&lsquo;wint_t.m4&rsquo;</TT>, <TT>&lsquo;xsize.m4&rsquo;</TT>
809 from GNU <CODE>gettext</CODE>'s
810 <TT>&lsquo;m4/&rsquo;</TT> directory into a single file.  If you have suppressed the
811 <TT>&lsquo;intl/&rsquo;</TT> directory, only <TT>&lsquo;gettext.m4&rsquo;</TT>, <TT>&lsquo;iconv.m4&rsquo;</TT>,
812 <TT>&lsquo;lib-ld.m4&rsquo;</TT>, <TT>&lsquo;lib-link.m4&rsquo;</TT>, <TT>&lsquo;lib-prefix.m4&rsquo;</TT>,
813 <TT>&lsquo;nls.m4&rsquo;</TT>, <TT>&lsquo;po.m4&rsquo;</TT>, <TT>&lsquo;progtest.m4&rsquo;</TT> need to be concatenated.
814
815 </P>
816 <P>
817 If you are not using GNU <CODE>automake</CODE> 1.8 or newer, you will need to
818 add a file <TT>&lsquo;mkdirp.m4&rsquo;</TT> from a newer automake distribution to the
819 list of files above.
820
821 </P>
822 <P>
823 If you already have an <TT>&lsquo;aclocal.m4&rsquo;</TT> file, then you will have
824 to merge the said macro files into your <TT>&lsquo;aclocal.m4&rsquo;</TT>.  Note that if
825 you are upgrading from a previous release of GNU <CODE>gettext</CODE>, you
826 should most probably <EM>replace</EM> the macros (<CODE>AM_GNU_GETTEXT</CODE>,
827 etc.), as they usually
828 change a little from one release of GNU <CODE>gettext</CODE> to the next.
829 Their contents may vary as we get more experience with strange systems
830 out there.
831
832 </P>
833 <P>
834 If you are using GNU <CODE>automake</CODE> 1.5 or newer, it is enough to put
835 these macro files into a subdirectory named <TT>&lsquo;m4/&rsquo;</TT> and add the line
836
837 </P>
838
839 <PRE>
840 ACLOCAL_AMFLAGS = -I m4
841 </PRE>
842
843 <P>
844 to your top level <TT>&lsquo;Makefile.am&rsquo;</TT>.
845
846 </P>
847 <P>
848 If you are using GNU <CODE>automake</CODE> 1.10 or newer, it is even easier:
849 Add the line
850
851 </P>
852
853 <PRE>
854 ACLOCAL_AMFLAGS = --install -I m4
855 </PRE>
856
857 <P>
858 to your top level <TT>&lsquo;Makefile.am&rsquo;</TT>, and run <SAMP>&lsquo;aclocal --install -I m4&rsquo;</SAMP>.
859 This will copy the needed files to the <TT>&lsquo;m4/&rsquo;</TT> subdirectory automatically,
860 before updating <TT>&lsquo;aclocal.m4&rsquo;</TT>.
861
862 </P>
863 <P>
864 These macros check for the internationalization support functions
865 and related informations.  Hopefully, once stabilized, these macros
866 might be integrated in the standard Autoconf set, because this
867 piece of <CODE>m4</CODE> code will be the same for all projects using GNU
868 <CODE>gettext</CODE>.
869
870 </P>
871
872
873 <H3><A NAME="SEC226" HREF="gettext_toc.html#TOC226">13.4.9  <TT>&lsquo;acconfig.h&rsquo;</TT> at top level</A></H3>
874 <P>
875 <A NAME="IDX1186"></A>
876
877 </P>
878 <P>
879 Earlier GNU <CODE>gettext</CODE> releases required to put definitions for
880 <CODE>ENABLE_NLS</CODE>, <CODE>HAVE_GETTEXT</CODE> and <CODE>HAVE_LC_MESSAGES</CODE>,
881 <CODE>HAVE_STPCPY</CODE>, <CODE>PACKAGE</CODE> and <CODE>VERSION</CODE> into an
882 <TT>&lsquo;acconfig.h&rsquo;</TT> file.  This is not needed any more; you can remove
883 them from your <TT>&lsquo;acconfig.h&rsquo;</TT> file unless your package uses them
884 independently from the <TT>&lsquo;intl/&rsquo;</TT> directory.
885
886 </P>
887
888
889 <H3><A NAME="SEC227" HREF="gettext_toc.html#TOC227">13.4.10  <TT>&lsquo;config.h.in&rsquo;</TT> at top level</A></H3>
890 <P>
891 <A NAME="IDX1187"></A>
892
893 </P>
894 <P>
895 The include file template that holds the C macros to be defined by
896 <CODE>configure</CODE> is usually called <TT>&lsquo;config.h.in&rsquo;</TT> and may be
897 maintained either manually or automatically.
898
899 </P>
900 <P>
901 If <CODE>gettextize</CODE> has created an <TT>&lsquo;intl/&rsquo;</TT> directory, this file
902 must be called <TT>&lsquo;config.h.in&rsquo;</TT> and must be at the top level.  If,
903 however, you have suppressed the <TT>&lsquo;intl/&rsquo;</TT> directory by calling
904 <CODE>gettextize</CODE> without <SAMP>&lsquo;--intl&rsquo;</SAMP> option, then you can choose the
905 name of this file and its location freely.
906
907 </P>
908 <P>
909 If it is maintained automatically, by use of the <SAMP>&lsquo;autoheader&rsquo;</SAMP>
910 program, you need to do nothing about it.  This is the case in particular
911 if you are using GNU <CODE>automake</CODE>.
912
913 </P>
914 <P>
915 If it is maintained manually, and if <CODE>gettextize</CODE> has created an
916 <TT>&lsquo;intl/&rsquo;</TT> directory, you should switch to using <SAMP>&lsquo;autoheader&rsquo;</SAMP>.
917 The list of C macros to be added for the sake of the <TT>&lsquo;intl/&rsquo;</TT>
918 directory is just too long to be maintained manually; it also changes
919 between different versions of GNU <CODE>gettext</CODE>.
920
921 </P>
922 <P>
923 If it is maintained manually, and if on the other hand you have
924 suppressed the <TT>&lsquo;intl/&rsquo;</TT> directory by calling <CODE>gettextize</CODE>
925 without <SAMP>&lsquo;--intl&rsquo;</SAMP> option, then you can get away by adding the
926 following lines to <TT>&lsquo;config.h.in&rsquo;</TT>:
927
928 </P>
929
930 <PRE>
931 /* Define to 1 if translation of program messages to the user's
932    native language is requested. */
933 #undef ENABLE_NLS
934 </PRE>
935
936
937
938 <H3><A NAME="SEC228" HREF="gettext_toc.html#TOC228">13.4.11  <TT>&lsquo;Makefile.in&rsquo;</TT> at top level</A></H3>
939
940 <P>
941 Here are a few modifications you need to make to your main, top-level
942 <TT>&lsquo;Makefile.in&rsquo;</TT> file.
943
944 </P>
945
946 <OL>
947 <LI>
948
949 Add the following lines near the beginning of your <TT>&lsquo;Makefile.in&rsquo;</TT>,
950 so the <SAMP>&lsquo;dist:&rsquo;</SAMP> goal will work properly (as explained further down):
951
952
953 <PRE>
954 PACKAGE = @PACKAGE@
955 VERSION = @VERSION@
956 </PRE>
957
958 <LI>
959
960 Add file <TT>&lsquo;ABOUT-NLS&rsquo;</TT> to the <CODE>DISTFILES</CODE> definition, so the file gets
961 distributed.
962
963 <LI>
964
965 Wherever you process subdirectories in your <TT>&lsquo;Makefile.in&rsquo;</TT>, be sure
966 you also process the subdirectories <SAMP>&lsquo;intl&rsquo;</SAMP> and <SAMP>&lsquo;po&rsquo;</SAMP>.  Special
967 rules in the <TT>&lsquo;Makefiles&rsquo;</TT> take care for the case where no
968 internationalization is wanted.
969
970 If you are using Makefiles, either generated by automake, or hand-written
971 so they carefully follow the GNU coding standards, the effected goals for
972 which the new subdirectories must be handled include <SAMP>&lsquo;installdirs&rsquo;</SAMP>,
973 <SAMP>&lsquo;install&rsquo;</SAMP>, <SAMP>&lsquo;uninstall&rsquo;</SAMP>, <SAMP>&lsquo;clean&rsquo;</SAMP>, <SAMP>&lsquo;distclean&rsquo;</SAMP>.
974
975 Here is an example of a canonical order of processing.  In this
976 example, we also define <CODE>SUBDIRS</CODE> in <CODE>Makefile.in</CODE> for it
977 to be further used in the <SAMP>&lsquo;dist:&rsquo;</SAMP> goal.
978
979
980 <PRE>
981 SUBDIRS = doc intl lib src po
982 </PRE>
983
984 Note that you must arrange for <SAMP>&lsquo;make&rsquo;</SAMP> to descend into the
985 <CODE>intl</CODE> directory before descending into other directories containing
986 code which make use of the <CODE>libintl.h</CODE> header file.  For this
987 reason, here we mention <CODE>intl</CODE> before <CODE>lib</CODE> and <CODE>src</CODE>.
988
989 <LI>
990
991 A delicate point is the <SAMP>&lsquo;dist:&rsquo;</SAMP> goal, as both
992 <TT>&lsquo;intl/Makefile&rsquo;</TT> and <TT>&lsquo;po/Makefile&rsquo;</TT> will later assume that the
993 proper directory has been set up from the main <TT>&lsquo;Makefile&rsquo;</TT>.  Here is
994 an example at what the <SAMP>&lsquo;dist:&rsquo;</SAMP> goal might look like:
995
996
997 <PRE>
998 distdir = $(PACKAGE)-$(VERSION)
999 dist: Makefile
1000         rm -fr $(distdir)
1001         mkdir $(distdir)
1002         chmod 777 $(distdir)
1003         for file in $(DISTFILES); do \
1004           ln $$file $(distdir) 2&#62;/dev/null || cp -p $$file $(distdir); \
1005         done
1006         for subdir in $(SUBDIRS); do \
1007           mkdir $(distdir)/$$subdir || exit 1; \
1008           chmod 777 $(distdir)/$$subdir; \
1009           (cd $$subdir &#38;&#38; $(MAKE) $@) || exit 1; \
1010         done
1011         tar chozf $(distdir).tar.gz $(distdir)
1012         rm -fr $(distdir)
1013 </PRE>
1014
1015 </OL>
1016
1017 <P>
1018 Note that if you are using GNU <CODE>automake</CODE>, <TT>&lsquo;Makefile.in&rsquo;</TT> is
1019 automatically generated from <TT>&lsquo;Makefile.am&rsquo;</TT>, and all needed changes
1020 to <TT>&lsquo;Makefile.am&rsquo;</TT> are already made by running <SAMP>&lsquo;gettextize&rsquo;</SAMP>.
1021
1022 </P>
1023
1024
1025 <H3><A NAME="SEC229" HREF="gettext_toc.html#TOC229">13.4.12  <TT>&lsquo;Makefile.in&rsquo;</TT> in <TT>&lsquo;src/&rsquo;</TT></A></H3>
1026
1027 <P>
1028 Some of the modifications made in the main <TT>&lsquo;Makefile.in&rsquo;</TT> will
1029 also be needed in the <TT>&lsquo;Makefile.in&rsquo;</TT> from your package sources,
1030 which we assume here to be in the <TT>&lsquo;src/&rsquo;</TT> subdirectory.  Here are
1031 all the modifications needed in <TT>&lsquo;src/Makefile.in&rsquo;</TT>:
1032
1033 </P>
1034
1035 <OL>
1036 <LI>
1037
1038 In view of the <SAMP>&lsquo;dist:&rsquo;</SAMP> goal, you should have these lines near the
1039 beginning of <TT>&lsquo;src/Makefile.in&rsquo;</TT>:
1040
1041
1042 <PRE>
1043 PACKAGE = @PACKAGE@
1044 VERSION = @VERSION@
1045 </PRE>
1046
1047 <LI>
1048
1049 If not done already, you should guarantee that <CODE>top_srcdir</CODE>
1050 gets defined.  This will serve for <CODE>cpp</CODE> include files.  Just add
1051 the line:
1052
1053
1054 <PRE>
1055 top_srcdir = @top_srcdir@
1056 </PRE>
1057
1058 <LI>
1059
1060 You might also want to define <CODE>subdir</CODE> as <SAMP>&lsquo;src&rsquo;</SAMP>, later
1061 allowing for almost uniform <SAMP>&lsquo;dist:&rsquo;</SAMP> goals in all your
1062 <TT>&lsquo;Makefile.in&rsquo;</TT>.  At list, the <SAMP>&lsquo;dist:&rsquo;</SAMP> goal below assume that
1063 you used:
1064
1065
1066 <PRE>
1067 subdir = src
1068 </PRE>
1069
1070 <LI>
1071
1072 The <CODE>main</CODE> function of your program will normally call
1073 <CODE>bindtextdomain</CODE> (see see section <A HREF="gettext_4.html#SEC18">4.2  Triggering <CODE>gettext</CODE> Operations</A>), like this:
1074
1075
1076 <PRE>
1077 bindtextdomain (<VAR>PACKAGE</VAR>, LOCALEDIR);
1078 textdomain (<VAR>PACKAGE</VAR>);
1079 </PRE>
1080
1081 To make LOCALEDIR known to the program, add the following lines to
1082 <TT>&lsquo;Makefile.in&rsquo;</TT> if you are using Autoconf version 2.60 or newer:
1083
1084
1085 <PRE>
1086 datadir = @datadir@
1087 datarootdir= @datarootdir@
1088 localedir = @localedir@
1089 DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
1090 </PRE>
1091
1092 or these lines if your version of Autoconf is older than 2.60:
1093
1094
1095 <PRE>
1096 datadir = @datadir@
1097 localedir = $(datadir)/locale
1098 DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
1099 </PRE>
1100
1101 Note that <CODE>@datadir@</CODE> defaults to <SAMP>&lsquo;$(prefix)/share&rsquo;</SAMP>, thus
1102 <CODE>$(localedir)</CODE> defaults to <SAMP>&lsquo;$(prefix)/share/locale&rsquo;</SAMP>.
1103
1104 <LI>
1105
1106 You should ensure that the final linking will use <CODE>@LIBINTL@</CODE> or
1107 <CODE>@LTLIBINTL@</CODE> as a library.  <CODE>@LIBINTL@</CODE> is for use without
1108 <CODE>libtool</CODE>, <CODE>@LTLIBINTL@</CODE> is for use with <CODE>libtool</CODE>.  An
1109 easy way to achieve this is to manage that it gets into <CODE>LIBS</CODE>, like
1110 this:
1111
1112
1113 <PRE>
1114 LIBS = @LIBINTL@ @LIBS@
1115 </PRE>
1116
1117 In most packages internationalized with GNU <CODE>gettext</CODE>, one will
1118 find a directory <TT>&lsquo;lib/&rsquo;</TT> in which a library containing some helper
1119 functions will be build.  (You need at least the few functions which the
1120 GNU <CODE>gettext</CODE> Library itself needs.)  However some of the functions
1121 in the <TT>&lsquo;lib/&rsquo;</TT> also give messages to the user which of course should be
1122 translated, too.  Taking care of this, the support library (say
1123 <TT>&lsquo;libsupport.a&rsquo;</TT>) should be placed before <CODE>@LIBINTL@</CODE> and
1124 <CODE>@LIBS@</CODE> in the above example.  So one has to write this:
1125
1126
1127 <PRE>
1128 LIBS = ../lib/libsupport.a @LIBINTL@ @LIBS@
1129 </PRE>
1130
1131 <LI>
1132
1133 You should also ensure that directory <TT>&lsquo;intl/&rsquo;</TT> will be searched for
1134 C preprocessor include files in all circumstances.  So, you have to
1135 manage so both <SAMP>&lsquo;-I../intl&rsquo;</SAMP> and <SAMP>&lsquo;-I$(top_srcdir)/intl&rsquo;</SAMP> will
1136 be given to the C compiler.
1137
1138 <LI>
1139
1140 Your <SAMP>&lsquo;dist:&rsquo;</SAMP> goal has to conform with others.  Here is a
1141 reasonable definition for it:
1142
1143
1144 <PRE>
1145 distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
1146 dist: Makefile $(DISTFILES)
1147         for file in $(DISTFILES); do \
1148           ln $$file $(distdir) 2&#62;/dev/null || cp -p $$file $(distdir) || exit 1; \
1149         done
1150 </PRE>
1151
1152 </OL>
1153
1154 <P>
1155 Note that if you are using GNU <CODE>automake</CODE>, <TT>&lsquo;Makefile.in&rsquo;</TT> is
1156 automatically generated from <TT>&lsquo;Makefile.am&rsquo;</TT>, and the first three
1157 changes and the last change are not necessary.  The remaining needed
1158 <TT>&lsquo;Makefile.am&rsquo;</TT> modifications are the following:
1159
1160 </P>
1161
1162 <OL>
1163 <LI>
1164
1165 To make LOCALEDIR known to the program, add the following to
1166 <TT>&lsquo;Makefile.am&rsquo;</TT>:
1167
1168
1169 <PRE>
1170 &#60;module&#62;_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
1171 </PRE>
1172
1173 for each specific module or compilation unit, or
1174
1175
1176 <PRE>
1177 AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
1178 </PRE>
1179
1180 for all modules and compilation units together.  Furthermore, if you are
1181 using an Autoconf version older then 2.60, add this line to define
1182 <SAMP>&lsquo;localedir&rsquo;</SAMP>:
1183
1184
1185 <PRE>
1186 localedir = $(datadir)/locale
1187 </PRE>
1188
1189 <LI>
1190
1191 To ensure that the final linking will use <CODE>@LIBINTL@</CODE> or
1192 <CODE>@LTLIBINTL@</CODE> as a library, add the following to
1193 <TT>&lsquo;Makefile.am&rsquo;</TT>:
1194
1195
1196 <PRE>
1197 &#60;program&#62;_LDADD = @LIBINTL@
1198 </PRE>
1199
1200 for each specific program, or
1201
1202
1203 <PRE>
1204 LDADD = @LIBINTL@
1205 </PRE>
1206
1207 for all programs together.  Remember that when you use <CODE>libtool</CODE>
1208 to link a program, you need to use @LTLIBINTL@ instead of @LIBINTL@
1209 for that program.
1210
1211 <LI>
1212
1213 If you have an <TT>&lsquo;intl/&rsquo;</TT> directory, whose contents is created by
1214 <CODE>gettextize</CODE>, then to ensure that it will be searched for
1215 C preprocessor include files in all circumstances, add something like
1216 this to <TT>&lsquo;Makefile.am&rsquo;</TT>:
1217
1218
1219 <PRE>
1220 AM_CPPFLAGS = -I../intl -I$(top_srcdir)/intl
1221 </PRE>
1222
1223 </OL>
1224
1225
1226
1227 <H3><A NAME="SEC230" HREF="gettext_toc.html#TOC230">13.4.13  <TT>&lsquo;gettext.h&rsquo;</TT> in <TT>&lsquo;lib/&rsquo;</TT></A></H3>
1228 <P>
1229 <A NAME="IDX1188"></A>
1230 <A NAME="IDX1189"></A>
1231 <A NAME="IDX1190"></A>
1232
1233 </P>
1234 <P>
1235 Internationalization of packages, as provided by GNU <CODE>gettext</CODE>, is
1236 optional.  It can be turned off in two situations:
1237
1238 </P>
1239
1240 <UL>
1241 <LI>
1242
1243 When the installer has specified <SAMP>&lsquo;./configure --disable-nls&rsquo;</SAMP>.  This
1244 can be useful when small binaries are more important than features, for
1245 example when building utilities for boot diskettes.  It can also be useful
1246 in order to get some specific C compiler warnings about code quality with
1247 some older versions of GCC (older than 3.0).
1248
1249 <LI>
1250
1251 When the package does not include the <CODE>intl/</CODE> subdirectory, and the
1252 libintl.h header (with its associated libintl library, if any) is not
1253 already installed on the system, it is preferable that the package builds
1254 without internationalization support, rather than to give a compilation
1255 error.
1256 </UL>
1257
1258 <P>
1259 A C preprocessor macro can be used to detect these two cases.  Usually,
1260 when <CODE>libintl.h</CODE> was found and not explicitly disabled, the
1261 <CODE>ENABLE_NLS</CODE> macro will be defined to 1 in the autoconf generated
1262 configuration file (usually called <TT>&lsquo;config.h&rsquo;</TT>).  In the two negative
1263 situations, however, this macro will not be defined, thus it will evaluate
1264 to 0 in C preprocessor expressions.
1265
1266 </P>
1267 <P>
1268 <A NAME="IDX1191"></A>
1269 <TT>&lsquo;gettext.h&rsquo;</TT> is a convenience header file for conditional use of
1270 <TT>&lsquo;&#60;libintl.h&#62;&rsquo;</TT>, depending on the <CODE>ENABLE_NLS</CODE> macro.  If
1271 <CODE>ENABLE_NLS</CODE> is set, it includes <TT>&lsquo;&#60;libintl.h&#62;&rsquo;</TT>; otherwise it
1272 defines no-op substitutes for the libintl.h functions.  We recommend
1273 the use of <CODE>"gettext.h"</CODE> over direct use of <TT>&lsquo;&#60;libintl.h&#62;&rsquo;</TT>,
1274 so that portability to older systems is guaranteed and installers can
1275 turn off internationalization if they want to.  In the C code, you will
1276 then write
1277
1278 </P>
1279
1280 <PRE>
1281 #include "gettext.h"
1282 </PRE>
1283
1284 <P>
1285 instead of
1286
1287 </P>
1288
1289 <PRE>
1290 #include &#60;libintl.h&#62;
1291 </PRE>
1292
1293 <P>
1294 The location of <CODE>gettext.h</CODE> is usually in a directory containing
1295 auxiliary include files.  In many GNU packages, there is a directory
1296 <TT>&lsquo;lib/&rsquo;</TT> containing helper functions; <TT>&lsquo;gettext.h&rsquo;</TT> fits there.
1297 In other packages, it can go into the <TT>&lsquo;src&rsquo;</TT> directory.
1298
1299 </P>
1300 <P>
1301 Do not install the <CODE>gettext.h</CODE> file in public locations.  Every
1302 package that needs it should contain a copy of it on its own.
1303
1304 </P>
1305
1306
1307 <H2><A NAME="SEC231" HREF="gettext_toc.html#TOC231">13.5  Autoconf macros for use in <TT>&lsquo;configure.ac&rsquo;</TT></A></H2>
1308 <P>
1309 <A NAME="IDX1192"></A>
1310
1311 </P>
1312 <P>
1313 GNU <CODE>gettext</CODE> installs macros for use in a package's
1314 <TT>&lsquo;configure.ac&rsquo;</TT> or <TT>&lsquo;configure.in&rsquo;</TT>.
1315 See section â€˜Introduction’ in <CITE>The Autoconf Manual</CITE>.
1316 The primary macro is, of course, <CODE>AM_GNU_GETTEXT</CODE>.
1317
1318 </P>
1319
1320
1321
1322 <H3><A NAME="SEC232" HREF="gettext_toc.html#TOC232">13.5.1  AM_GNU_GETTEXT in <TT>&lsquo;gettext.m4&rsquo;</TT></A></H3>
1323
1324 <P>
1325 <A NAME="IDX1193"></A>
1326 The <CODE>AM_GNU_GETTEXT</CODE> macro tests for the presence of the GNU gettext
1327 function family in either the C library or a separate <CODE>libintl</CODE>
1328 library (shared or static libraries are both supported) or in the package's
1329 <TT>&lsquo;intl/&rsquo;</TT> directory.  It also invokes <CODE>AM_PO_SUBDIRS</CODE>, thus preparing
1330 the <TT>&lsquo;po/&rsquo;</TT> directories of the package for building.
1331
1332 </P>
1333 <P>
1334 <CODE>AM_GNU_GETTEXT</CODE> accepts up to three optional arguments.  The general
1335 syntax is
1336
1337 </P>
1338
1339 <PRE>
1340 AM_GNU_GETTEXT([<VAR>intlsymbol</VAR>], [<VAR>needsymbol</VAR>], [<VAR>intldir</VAR>])
1341 </PRE>
1342
1343 <P>
1344 <VAR>intlsymbol</VAR> can be <SAMP>&lsquo;external&rsquo;</SAMP> or <SAMP>&lsquo;no-libtool&rsquo;</SAMP>.  The default
1345 (if it is not specified or empty) is <SAMP>&lsquo;no-libtool&rsquo;</SAMP>.  <VAR>intlsymbol</VAR>
1346 should be <SAMP>&lsquo;external&rsquo;</SAMP> for packages with no <TT>&lsquo;intl/&rsquo;</TT> directory.
1347 For packages with an <TT>&lsquo;intl/&rsquo;</TT> directory, you can either use an
1348 <VAR>intlsymbol</VAR> equal to <SAMP>&lsquo;no-libtool&rsquo;</SAMP>, or you can use <SAMP>&lsquo;external&rsquo;</SAMP>
1349 and override by using the macro <CODE>AM_GNU_GETTEXT_INTL_SUBDIR</CODE> elsewhere.
1350 The two ways to specify the existence of an <TT>&lsquo;intl/&rsquo;</TT> directory are
1351 equivalent.  At build time, a static library
1352 <CODE>$(top_builddir)/intl/libintl.a</CODE> will then be created.
1353
1354 </P>
1355 <P>
1356 If <VAR>needsymbol</VAR> is specified and is <SAMP>&lsquo;need-ngettext&rsquo;</SAMP>, then GNU
1357 gettext implementations (in libc or libintl) without the <CODE>ngettext()</CODE>
1358 function will be ignored.  If <VAR>needsymbol</VAR> is specified and is
1359 <SAMP>&lsquo;need-formatstring-macros&rsquo;</SAMP>, then GNU gettext implementations that don't
1360 support the ISO C 99 <TT>&lsquo;&#60;inttypes.h&#62;&rsquo;</TT> formatstring macros will be ignored.
1361 Only one <VAR>needsymbol</VAR> can be specified.  These requirements can also be
1362 specified by using the macro <CODE>AM_GNU_GETTEXT_NEED</CODE> elsewhere.  To specify
1363 more than one requirement, just specify the strongest one among them, or
1364 invoke the <CODE>AM_GNU_GETTEXT_NEED</CODE> macro several times.  The hierarchy
1365 among the various alternatives is as follows: <SAMP>&lsquo;need-formatstring-macros&rsquo;</SAMP>
1366 implies <SAMP>&lsquo;need-ngettext&rsquo;</SAMP>.
1367
1368 </P>
1369 <P>
1370 <VAR>intldir</VAR> is used to find the intl libraries.  If empty, the value
1371 <SAMP>&lsquo;$(top_builddir)/intl/&rsquo;</SAMP> is used.
1372
1373 </P>
1374 <P>
1375 The <CODE>AM_GNU_GETTEXT</CODE> macro determines whether GNU gettext is
1376 available and should be used.  If so, it sets the <CODE>USE_NLS</CODE> variable
1377 to <SAMP>&lsquo;yes&rsquo;</SAMP>; it defines <CODE>ENABLE_NLS</CODE> to 1 in the autoconf
1378 generated configuration file (usually called <TT>&lsquo;config.h&rsquo;</TT>); it sets
1379 the variables <CODE>LIBINTL</CODE> and <CODE>LTLIBINTL</CODE> to the linker options
1380 for use in a Makefile (<CODE>LIBINTL</CODE> for use without libtool,
1381 <CODE>LTLIBINTL</CODE> for use with libtool); it adds an <SAMP>&lsquo;-I&rsquo;</SAMP> option to
1382 <CODE>CPPFLAGS</CODE> if necessary.  In the negative case, it sets
1383 <CODE>USE_NLS</CODE> to <SAMP>&lsquo;no&rsquo;</SAMP>; it sets <CODE>LIBINTL</CODE> and <CODE>LTLIBINTL</CODE>
1384 to empty and doesn't change <CODE>CPPFLAGS</CODE>.
1385
1386 </P>
1387 <P>
1388 The complexities that <CODE>AM_GNU_GETTEXT</CODE> deals with are the following:
1389
1390 </P>
1391
1392 <UL>
1393 <LI>
1394
1395 <A NAME="IDX1194"></A>
1396 Some operating systems have <CODE>gettext</CODE> in the C library, for example
1397 glibc.  Some have it in a separate library <CODE>libintl</CODE>.  GNU <CODE>libintl</CODE>
1398 might have been installed as part of the GNU <CODE>gettext</CODE> package.
1399
1400 <LI>
1401
1402 GNU <CODE>libintl</CODE>, if installed, is not necessarily already in the search
1403 path (<CODE>CPPFLAGS</CODE> for the include file search path, <CODE>LDFLAGS</CODE> for
1404 the library search path).
1405
1406 <LI>
1407
1408 Except for glibc, the operating system's native <CODE>gettext</CODE> cannot
1409 exploit the GNU mo files, doesn't have the necessary locale dependency
1410 features, and cannot convert messages from the catalog's text encoding
1411 to the user's locale encoding.
1412
1413 <LI>
1414
1415 GNU <CODE>libintl</CODE>, if installed, is not necessarily already in the
1416 run time library search path.  To avoid the need for setting an environment
1417 variable like <CODE>LD_LIBRARY_PATH</CODE>, the macro adds the appropriate
1418 run time search path options to the <CODE>LIBINTL</CODE> and <CODE>LTLIBINTL</CODE>
1419 variables.  This works on most systems, but not on some operating systems
1420 with limited shared library support, like SCO.
1421
1422 <LI>
1423
1424 GNU <CODE>libintl</CODE> relies on POSIX/XSI <CODE>iconv</CODE>.  The macro checks for
1425 linker options needed to use iconv and appends them to the <CODE>LIBINTL</CODE>
1426 and <CODE>LTLIBINTL</CODE> variables.
1427 </UL>
1428
1429
1430
1431 <H3><A NAME="SEC233" HREF="gettext_toc.html#TOC233">13.5.2  AM_GNU_GETTEXT_VERSION in <TT>&lsquo;gettext.m4&rsquo;</TT></A></H3>
1432
1433 <P>
1434 <A NAME="IDX1195"></A>
1435 The <CODE>AM_GNU_GETTEXT_VERSION</CODE> macro declares the version number of
1436 the GNU gettext infrastructure that is used by the package.
1437
1438 </P>
1439 <P>
1440 The use of this macro is optional; only the <CODE>autopoint</CODE> program makes
1441 use of it (see section <A HREF="gettext_13.html#SEC239">13.6  Integrating with Version Control Systems</A>).
1442
1443 </P>
1444
1445
1446 <H3><A NAME="SEC234" HREF="gettext_toc.html#TOC234">13.5.3  AM_GNU_GETTEXT_NEED in <TT>&lsquo;gettext.m4&rsquo;</TT></A></H3>
1447
1448 <P>
1449 <A NAME="IDX1196"></A>
1450 The <CODE>AM_GNU_GETTEXT_NEED</CODE> macro declares a constraint regarding the
1451 GNU gettext implementation.  The syntax is
1452
1453 </P>
1454
1455 <PRE>
1456 AM_GNU_GETTEXT_NEED([<VAR>needsymbol</VAR>])
1457 </PRE>
1458
1459 <P>
1460 If <VAR>needsymbol</VAR> is <SAMP>&lsquo;need-ngettext&rsquo;</SAMP>, then GNU gettext implementations
1461 (in libc or libintl) without the <CODE>ngettext()</CODE> function will be ignored.
1462 If <VAR>needsymbol</VAR> is <SAMP>&lsquo;need-formatstring-macros&rsquo;</SAMP>, then GNU gettext
1463 implementations that don't support the ISO C 99 <TT>&lsquo;&#60;inttypes.h&#62;&rsquo;</TT>
1464 formatstring macros will be ignored.
1465
1466 </P>
1467 <P>
1468 The optional second argument of <CODE>AM_GNU_GETTEXT</CODE> is also taken into
1469 account.
1470
1471 </P>
1472 <P>
1473 The <CODE>AM_GNU_GETTEXT_NEED</CODE> invocations can occur before or after
1474 the <CODE>AM_GNU_GETTEXT</CODE> invocation; the order doesn't matter.
1475
1476 </P>
1477
1478
1479 <H3><A NAME="SEC235" HREF="gettext_toc.html#TOC235">13.5.4  AM_GNU_GETTEXT_INTL_SUBDIR in <TT>&lsquo;intldir.m4&rsquo;</TT></A></H3>
1480
1481 <P>
1482 <A NAME="IDX1197"></A>
1483 The <CODE>AM_GNU_GETTEXT_INTL_SUBDIR</CODE> macro specifies that the
1484 <CODE>AM_GNU_GETTEXT</CODE> macro, although invoked with the first argument
1485 <SAMP>&lsquo;external&rsquo;</SAMP>, should also prepare for building the <TT>&lsquo;intl/&rsquo;</TT>
1486 subdirectory.
1487
1488 </P>
1489 <P>
1490 The <CODE>AM_GNU_GETTEXT_INTL_SUBDIR</CODE> invocation can occur before or after
1491 the <CODE>AM_GNU_GETTEXT</CODE> invocation; the order doesn't matter.
1492
1493 </P>
1494 <P>
1495 The use of this macro requires GNU automake 1.10 or newer and
1496 GNU autoconf 2.61 or newer.
1497
1498 </P>
1499
1500
1501 <H3><A NAME="SEC236" HREF="gettext_toc.html#TOC236">13.5.5  AM_PO_SUBDIRS in <TT>&lsquo;po.m4&rsquo;</TT></A></H3>
1502
1503 <P>
1504 <A NAME="IDX1198"></A>
1505 The <CODE>AM_PO_SUBDIRS</CODE> macro prepares the <TT>&lsquo;po/&rsquo;</TT> directories of the
1506 package for building.  This macro should be used in internationalized
1507 programs written in other programming languages than C, C++, Objective C,
1508 for example <CODE>sh</CODE>, <CODE>Python</CODE>, <CODE>Lisp</CODE>.  See section <A HREF="gettext_15.html#SEC248">15  Other Programming Languages</A> for a list of programming languages that support localization
1509 through PO files.
1510
1511 </P>
1512 <P>
1513 The <CODE>AM_PO_SUBDIRS</CODE> macro determines whether internationalization
1514 should be used.  If so, it sets the <CODE>USE_NLS</CODE> variable to <SAMP>&lsquo;yes&rsquo;</SAMP>,
1515 otherwise to <SAMP>&lsquo;no&rsquo;</SAMP>.  It also determines the right values for Makefile
1516 variables in each <TT>&lsquo;po/&rsquo;</TT> directory.
1517
1518 </P>
1519
1520
1521 <H3><A NAME="SEC237" HREF="gettext_toc.html#TOC237">13.5.6  AM_XGETTEXT_OPTION in <TT>&lsquo;po.m4&rsquo;</TT></A></H3>
1522
1523 <P>
1524 <A NAME="IDX1199"></A>
1525 The <CODE>AM_XGETTEXT_OPTION</CODE> macro registers a command-line option to be
1526 used in the invocations of <CODE>xgettext</CODE> in the <TT>&lsquo;po/&rsquo;</TT> directories
1527 of the package.
1528
1529 </P>
1530 <P>
1531 For example, if you have a source file that defines a function
1532 <SAMP>&lsquo;error_at_line&rsquo;</SAMP> whose fifth argument is a format string, you can use
1533
1534 <PRE>
1535 AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])
1536 </PRE>
1537
1538 <P>
1539 to instruct <CODE>xgettext</CODE> to mark all translatable strings in <SAMP>&lsquo;gettext&rsquo;</SAMP>
1540 invocations that occur as fifth argument to this function as <SAMP>&lsquo;c-format&rsquo;</SAMP>.
1541
1542 </P>
1543 <P>
1544 See section <A HREF="gettext_5.html#SEC28">5.1  Invoking the <CODE>xgettext</CODE> Program</A> for the list of options that <CODE>xgettext</CODE>
1545 accepts.
1546
1547 </P>
1548 <P>
1549 The use of this macro is an alternative to the use of the
1550 <SAMP>&lsquo;XGETTEXT_OPTIONS&rsquo;</SAMP> variable in <TT>&lsquo;po/Makevars&rsquo;</TT>.
1551
1552 </P>
1553
1554
1555 <H3><A NAME="SEC238" HREF="gettext_toc.html#TOC238">13.5.7  AM_ICONV in <TT>&lsquo;iconv.m4&rsquo;</TT></A></H3>
1556
1557 <P>
1558 <A NAME="IDX1200"></A>
1559 The <CODE>AM_ICONV</CODE> macro tests for the presence of the POSIX/XSI
1560 <CODE>iconv</CODE> function family in either the C library or a separate
1561 <CODE>libiconv</CODE> library.  If found, it sets the <CODE>am_cv_func_iconv</CODE>
1562 variable to <SAMP>&lsquo;yes&rsquo;</SAMP>; it defines <CODE>HAVE_ICONV</CODE> to 1 in the autoconf
1563 generated configuration file (usually called <TT>&lsquo;config.h&rsquo;</TT>); it defines
1564 <CODE>ICONV_CONST</CODE> to <SAMP>&lsquo;const&rsquo;</SAMP> or to empty, depending on whether the
1565 second argument of <CODE>iconv()</CODE> is of type <SAMP>&lsquo;const char **&rsquo;</SAMP> or
1566 <SAMP>&lsquo;char **&rsquo;</SAMP>; it sets the variables <CODE>LIBICONV</CODE> and
1567 <CODE>LTLIBICONV</CODE> to the linker options for use in a Makefile
1568 (<CODE>LIBICONV</CODE> for use without libtool, <CODE>LTLIBICONV</CODE> for use with
1569 libtool); it adds an <SAMP>&lsquo;-I&rsquo;</SAMP> option to <CODE>CPPFLAGS</CODE> if
1570 necessary.  If not found, it sets <CODE>LIBICONV</CODE> and <CODE>LTLIBICONV</CODE> to
1571 empty and doesn't change <CODE>CPPFLAGS</CODE>.
1572
1573 </P>
1574 <P>
1575 The complexities that <CODE>AM_ICONV</CODE> deals with are the following:
1576
1577 </P>
1578
1579 <UL>
1580 <LI>
1581
1582 <A NAME="IDX1201"></A>
1583 Some operating systems have <CODE>iconv</CODE> in the C library, for example
1584 glibc.  Some have it in a separate library <CODE>libiconv</CODE>, for example
1585 OSF/1 or FreeBSD.  Regardless of the operating system, GNU <CODE>libiconv</CODE>
1586 might have been installed.  In that case, it should be used instead of the
1587 operating system's native <CODE>iconv</CODE>.
1588
1589 <LI>
1590
1591 GNU <CODE>libiconv</CODE>, if installed, is not necessarily already in the search
1592 path (<CODE>CPPFLAGS</CODE> for the include file search path, <CODE>LDFLAGS</CODE> for
1593 the library search path).
1594
1595 <LI>
1596
1597 GNU <CODE>libiconv</CODE> is binary incompatible with some operating system's
1598 native <CODE>iconv</CODE>, for example on FreeBSD.  Use of an <TT>&lsquo;iconv.h&rsquo;</TT>
1599 and <TT>&lsquo;libiconv.so&rsquo;</TT> that don't fit together would produce program
1600 crashes.
1601
1602 <LI>
1603
1604 GNU <CODE>libiconv</CODE>, if installed, is not necessarily already in the
1605 run time library search path.  To avoid the need for setting an environment
1606 variable like <CODE>LD_LIBRARY_PATH</CODE>, the macro adds the appropriate
1607 run time search path options to the <CODE>LIBICONV</CODE> variable.  This works
1608 on most systems, but not on some operating systems with limited shared
1609 library support, like SCO.
1610 </UL>
1611
1612 <P>
1613 <TT>&lsquo;iconv.m4&rsquo;</TT> is distributed with the GNU gettext package because
1614 <TT>&lsquo;gettext.m4&rsquo;</TT> relies on it.
1615
1616 </P>
1617
1618
1619 <H2><A NAME="SEC239" HREF="gettext_toc.html#TOC239">13.6  Integrating with Version Control Systems</A></H2>
1620
1621 <P>
1622 Many projects use version control systems for distributed development
1623 and source backup.  This section gives some advice how to manage the
1624 uses of <CODE>gettextize</CODE>, <CODE>autopoint</CODE> and <CODE>autoconf</CODE> on
1625 version controlled files.
1626
1627 </P>
1628
1629
1630
1631 <H3><A NAME="SEC240" HREF="gettext_toc.html#TOC240">13.6.1  Avoiding version mismatch in distributed development</A></H3>
1632
1633 <P>
1634 In a project development with multiple developers, there should be a
1635 single developer who occasionally - when there is desire to upgrade to
1636 a new <CODE>gettext</CODE> version - runs <CODE>gettextize</CODE> and performs the
1637 changes listed in section <A HREF="gettext_13.html#SEC217">13.4  Files You Must Create or Alter</A>, and then commits his changes
1638 to the repository.
1639
1640 </P>
1641 <P>
1642 It is highly recommended that all developers on a project use the same
1643 version of GNU <CODE>gettext</CODE> in the package.  In other words, if a
1644 developer runs <CODE>gettextize</CODE>, he should go the whole way, make the
1645 necessary remaining changes and commit his changes to the repository.
1646 Otherwise the following damages will likely occur:
1647
1648 </P>
1649
1650 <UL>
1651 <LI>
1652
1653 Apparent version mismatch between developers.  Since some <CODE>gettext</CODE>
1654 specific portions in <TT>&lsquo;configure.ac&rsquo;</TT>, <TT>&lsquo;configure.in&rsquo;</TT> and
1655 <CODE>Makefile.am</CODE>, <CODE>Makefile.in</CODE> files depend on the <CODE>gettext</CODE>
1656 version, the use of infrastructure files belonging to different
1657 <CODE>gettext</CODE> versions can easily lead to build errors.
1658
1659 <LI>
1660
1661 Hidden version mismatch.  Such version mismatch can also lead to
1662 malfunctioning of the package, that may be undiscovered by the developers.
1663 The worst case of hidden version mismatch is that internationalization
1664 of the package doesn't work at all.
1665
1666 <LI>
1667
1668 Release risks.  All developers implicitly perform constant testing on
1669 a package.  This is important in the days and weeks before a release.
1670 If the guy who makes the release tar files uses a different version
1671 of GNU <CODE>gettext</CODE> than the other developers, the distribution will
1672 be less well tested than if all had been using the same <CODE>gettext</CODE>
1673 version.  For example, it is possible that a platform specific bug goes
1674 undiscovered due to this constellation.
1675 </UL>
1676
1677
1678
1679 <H3><A NAME="SEC241" HREF="gettext_toc.html#TOC241">13.6.2  Files to put under version control</A></H3>
1680
1681 <P>
1682 There are basically three ways to deal with generated files in the
1683 context of a version controlled repository, such as <TT>&lsquo;configure&rsquo;</TT>
1684 generated from <TT>&lsquo;configure.ac&rsquo;</TT>, <CODE><VAR>parser</VAR>.c</CODE> generated
1685 from <CODE><VAR>parser</VAR>.y</CODE>, or <CODE>po/Makefile.in.in</CODE> autoinstalled
1686 by <CODE>gettextize</CODE> or <CODE>autopoint</CODE>.
1687
1688 </P>
1689
1690 <OL>
1691 <LI>
1692
1693 All generated files are always committed into the repository.
1694
1695 <LI>
1696
1697 All generated files are committed into the repository occasionally,
1698 for example each time a release is made.
1699
1700 <LI>
1701
1702 Generated files are never committed into the repository.
1703 </OL>
1704
1705 <P>
1706 Each of these three approaches has different advantages and drawbacks.
1707
1708 </P>
1709
1710 <OL>
1711 <LI>
1712
1713 The advantage is that anyone can check out the source at any moment and
1714 gets a working build.  The drawbacks are:  1a. It requires some frequent
1715 "push" actions by the maintainers.  1b. The repository grows in size
1716 quite fast.
1717
1718 <LI>
1719
1720 The advantage is that anyone can check out the source, and the usual
1721 "./configure; make" will work.  The drawbacks are: 2a. The one who
1722 checks out the repository needs tools like GNU <CODE>automake</CODE>, GNU
1723 <CODE>autoconf</CODE>, GNU <CODE>m4</CODE> installed in his PATH; sometimes he
1724 even needs particular versions of them.  2b. When a release is made
1725 and a commit is made on the generated files, the other developers get
1726 conflicts on the generated files when merging the local work back to
1727 the repository.  Although these conflicts are easy to resolve, they
1728 are annoying.
1729
1730 <LI>
1731
1732 The advantage is less work for the maintainers.  The drawback is that
1733 anyone who checks out the source not only needs tools like GNU
1734 <CODE>automake</CODE>, GNU <CODE>autoconf</CODE>, GNU <CODE>m4</CODE> installed in his
1735 PATH, but also that he needs to perform a package specific pre-build
1736 step before being able to "./configure; make".
1737 </OL>
1738
1739 <P>
1740 For the first and second approach, all files modified or brought in
1741 by the occasional <CODE>gettextize</CODE> invocation and update should be
1742 committed into the repository.
1743
1744 </P>
1745 <P>
1746 For the third approach, the maintainer can omit from the repository
1747 all the files that <CODE>gettextize</CODE> mentions as "copy".  Instead, he
1748 adds to the <TT>&lsquo;configure.ac&rsquo;</TT> or <TT>&lsquo;configure.in&rsquo;</TT> a line of the
1749 form
1750
1751 </P>
1752
1753 <PRE>
1754 AM_GNU_GETTEXT_VERSION(0.19.7)
1755 </PRE>
1756
1757 <P>
1758 and adds to the package's pre-build script an invocation of
1759 <SAMP>&lsquo;autopoint&rsquo;</SAMP>.  For everyone who checks out the source, this
1760 <CODE>autopoint</CODE> invocation will copy into the right place the
1761 <CODE>gettext</CODE> infrastructure files that have been omitted from the repository.
1762
1763 </P>
1764 <P>
1765 The version number used as argument to <CODE>AM_GNU_GETTEXT_VERSION</CODE> is
1766 the version of the <CODE>gettext</CODE> infrastructure that the package wants
1767 to use.  It is also the minimum version number of the <SAMP>&lsquo;autopoint&rsquo;</SAMP>
1768 program.  So, if you write <CODE>AM_GNU_GETTEXT_VERSION(0.11.5)</CODE> then the
1769 developers can have any version &#62;= 0.11.5 installed; the package will work
1770 with the 0.11.5 infrastructure in all developers' builds.  When the
1771 maintainer then runs gettextize from, say, version 0.12.1 on the package,
1772 the occurrence of <CODE>AM_GNU_GETTEXT_VERSION(0.11.5)</CODE> will be changed
1773 into <CODE>AM_GNU_GETTEXT_VERSION(0.12.1)</CODE>, and all other developers that
1774 use the CVS will henceforth need to have GNU <CODE>gettext</CODE> 0.12.1 or newer
1775 installed.
1776
1777 </P>
1778
1779
1780 <H3><A NAME="SEC242" HREF="gettext_toc.html#TOC242">13.6.3  Put PO Files under Version Control</A></H3>
1781
1782 <P>
1783 Since translations are valuable assets as well as the source code, it
1784 would make sense to put them under version control.  The GNU gettext
1785 infrastructure supports two ways to deal with translations in the
1786 context of a version controlled repository.
1787
1788 </P>
1789
1790 <OL>
1791 <LI>
1792
1793 Both POT file and PO files are committed into the repository.
1794
1795 <LI>
1796
1797 Only PO files are committed into the repository.
1798
1799 </OL>
1800
1801 <P>
1802 If a POT file is absent when building, it will be generated by
1803 scanning the source files with <CODE>xgettext</CODE>, and then the PO files
1804 are regenerated as a dependency.  On the other hand, some maintainers
1805 want to keep the POT file unchanged during the development phase.  So,
1806 even if a POT file is present and older than the source code, it won't
1807 be updated automatically.  You can manually update it with <CODE>make
1808 $(DOMAIN).pot-update</CODE>, and commit it at certain point.
1809
1810 </P>
1811 <P>
1812 Special advices for particular version control systems:
1813
1814 </P>
1815
1816 <UL>
1817 <LI>
1818
1819 Recent version control systems, Git for instance, ignore file's
1820 timestamp.  In that case, PO files can be accidentally updated even if
1821 a POT file is not updated.  To prevent this, you can set
1822 <SAMP>&lsquo;PO_DEPENDS_ON_POT&rsquo;</SAMP> variable to <CODE>no</CODE> in the <TT>&lsquo;Makevars&rsquo;</TT>
1823 file and do <CODE>make update-po</CODE> manually.
1824
1825 <LI>
1826
1827 Location comments such as <CODE>#: lib/error.c:116</CODE> are sometimes
1828 annoying, since these comments are volatile and may introduce unwanted
1829 change to the working copy when building.  To mitigate this, you can
1830 decide to omit those comments from the PO files in the repository.
1831
1832 This is possible with the <CODE>--no-location</CODE> option of the
1833 <CODE>msgmerge</CODE> command <A NAME="DOCF6" HREF="gettext_foot.html#FOOT6">(6)</A>.  The drawback is
1834 that, if the location information is needed, translators have to
1835 recover the location comments by running <CODE>msgmerge</CODE> again.
1836
1837 </UL>
1838
1839
1840
1841 <H3><A NAME="SEC243" HREF="gettext_toc.html#TOC243">13.6.4  Invoking the <CODE>autopoint</CODE> Program</A></H3>
1842
1843 <P>
1844 <A NAME="IDX1202"></A>
1845 <A NAME="IDX1203"></A>
1846
1847 <PRE>
1848 autopoint [<VAR>option</VAR>]...
1849 </PRE>
1850
1851 <P>
1852 The <CODE>autopoint</CODE> program copies standard gettext infrastructure files
1853 into a source package.  It extracts from a macro call of the form
1854 <CODE>AM_GNU_GETTEXT_VERSION(<VAR>version</VAR>)</CODE>, found in the package's
1855 <TT>&lsquo;configure.in&rsquo;</TT> or <TT>&lsquo;configure.ac&rsquo;</TT> file, the gettext version
1856 used by the package, and copies the infrastructure files belonging to
1857 this version into the package.
1858
1859 </P>
1860 <P>
1861 To extract the latest available infrastructure which satisfies a version
1862 requirement, then you can use the form
1863 <CODE>AM_GNU_GETTEXT_REQUIRE_VERSION(<VAR>version</VAR>)</CODE> instead.  For
1864 example, if gettext 0.19.7 is installed on your system
1865 and <CODE>0.19.1</CODE> is requested, then the infrastructure files of version
1866 0.19.7 will be copied into a source package.
1867
1868 </P>
1869
1870
1871 <H4><A NAME="SEC244" HREF="gettext_toc.html#TOC244">13.6.4.1  Options</A></H4>
1872
1873 <DL COMPACT>
1874
1875 <DT><SAMP>&lsquo;-f&rsquo;</SAMP>
1876 <DD>
1877 <DT><SAMP>&lsquo;--force&rsquo;</SAMP>
1878 <DD>
1879 <A NAME="IDX1204"></A>
1880 <A NAME="IDX1205"></A>
1881 Force overwriting of files that already exist.
1882
1883 <DT><SAMP>&lsquo;-n&rsquo;</SAMP>
1884 <DD>
1885 <DT><SAMP>&lsquo;--dry-run&rsquo;</SAMP>
1886 <DD>
1887 <A NAME="IDX1206"></A>
1888 <A NAME="IDX1207"></A>
1889 Print modifications but don't perform them.  All file copying actions that
1890 <CODE>autopoint</CODE> would normally execute are inhibited and instead only
1891 listed on standard output.
1892
1893 </DL>
1894
1895
1896
1897 <H4><A NAME="SEC245" HREF="gettext_toc.html#TOC245">13.6.4.2  Informative output</A></H4>
1898
1899 <DL COMPACT>
1900
1901 <DT><SAMP>&lsquo;--help&rsquo;</SAMP>
1902 <DD>
1903 <A NAME="IDX1208"></A>
1904 Display this help and exit.
1905
1906 <DT><SAMP>&lsquo;--version&rsquo;</SAMP>
1907 <DD>
1908 <A NAME="IDX1209"></A>
1909 Output version information and exit.
1910
1911 </DL>
1912
1913 <P>
1914 <CODE>autopoint</CODE> supports the GNU <CODE>gettext</CODE> versions from 0.10.35
1915 to the current one, 0.19.7.  In order to apply
1916 <CODE>autopoint</CODE> to a package using a <CODE>gettext</CODE> version newer than
1917 0.19.7, you need to install this same version of GNU
1918 <CODE>gettext</CODE> at least.
1919
1920 </P>
1921 <P>
1922 In packages using GNU <CODE>automake</CODE>, an invocation of <CODE>autopoint</CODE>
1923 should be followed by invocations of <CODE>aclocal</CODE> and then <CODE>autoconf</CODE>
1924 and <CODE>autoheader</CODE>.  The reason is that <CODE>autopoint</CODE> installs some
1925 autoconf macro files, which are used by <CODE>aclocal</CODE> to create
1926 <TT>&lsquo;aclocal.m4&rsquo;</TT>, and the latter is used by <CODE>autoconf</CODE> to create the
1927 package's <TT>&lsquo;configure&rsquo;</TT> script and by <CODE>autoheader</CODE> to create the
1928 package's <TT>&lsquo;config.h.in&rsquo;</TT> include file template.
1929
1930 </P>
1931 <P>
1932 The name <SAMP>&lsquo;autopoint&rsquo;</SAMP> is an abbreviation of <SAMP>&lsquo;auto-po-intl-m4&rsquo;</SAMP>;
1933 the tool copies or updates mostly files in the <TT>&lsquo;po&rsquo;</TT>, <TT>&lsquo;intl&rsquo;</TT>,
1934 <TT>&lsquo;m4&rsquo;</TT> directories.
1935
1936 </P>
1937
1938
1939 <H2><A NAME="SEC246" HREF="gettext_toc.html#TOC246">13.7  Creating a Distribution Tarball</A></H2>
1940
1941 <P>
1942 <A NAME="IDX1210"></A>
1943 <A NAME="IDX1211"></A>
1944 In projects that use GNU <CODE>automake</CODE>, the usual commands for creating
1945 a distribution tarball, <SAMP>&lsquo;make dist&rsquo;</SAMP> or <SAMP>&lsquo;make distcheck&rsquo;</SAMP>,
1946 automatically update the PO files as needed.
1947
1948 </P>
1949 <P>
1950 If GNU <CODE>automake</CODE> is not used, the maintainer needs to perform this
1951 update before making a release:
1952
1953 </P>
1954
1955 <PRE>
1956 $ ./configure
1957 $ (cd po; make update-po)
1958 $ make distclean
1959 </PRE>
1960
1961 <P><HR><P>
1962 Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_12.html">previous</A>, <A HREF="gettext_14.html">next</A>, <A HREF="gettext_25.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>.
1963 </BODY>
1964 </HTML>