blob: 853894227882c83b3bf14db2ca07e7d9302a3c3e [file] [log] [blame]
@c This file is part of the GNU gettext manual.
@c Copyright (C) 1995-2019 Free Software Foundation, Inc.
@c See the file gettext.texi for copying conditions.
The @code{gettextize} program is an interactive tool that helps the
maintainer of a package internationalized through GNU @code{gettext}.
It is used for two purposes:
@itemize @bullet
@item
As a wizard, when a package is modified to use GNU @code{gettext} for
the first time.
@item
As a migration tool, for upgrading the GNU @code{gettext} support in
a package from a previous to a newer version of GNU @code{gettext}.
@end itemize
This program performs the following tasks:
@itemize @bullet
@item
It copies into the package some files that are consistently and
identically needed in every package internationalized through
GNU @code{gettext}.
@item It performs as many of the tasks mentioned in the next section
@ref{Adjusting Files} as can be performed automatically.
@item It removes obsolete files and idioms used for previous GNU
@code{gettext} versions to the form recommended for the current GNU
@code{gettext} version.
@item It prints a summary of the tasks that ought to be done manually
and could not be done automatically by @code{gettextize}.
@end itemize
It can be invoked as follows:
@pindex gettextize
@cindex @code{gettextize} program, usage
@example
gettextize [ @var{option}@dots{} ] [ @var{directory} ]
@end example
@noindent
and accepts the following options:
@table @samp
@item -f
@itemx --force
@opindex -f@r{, @code{gettextize} option}
@opindex --force@r{, @code{gettextize} option}
Force replacement of files which already exist.
@item --po-dir=@var{dir}
@opindex --po-dir@r{, @code{gettextize} option}
Specify a directory containing PO files. Such a directory contains the
translations into various languages of a particular POT file. This
option can be specified multiple times, once for each translation domain.
If it is not specified, the directory named @file{po/} is updated.
@item --no-changelog
@opindex --no-changelog@r{, @code{gettextize} option}
Don't update or create ChangeLog files. By default, @code{gettextize}
logs all changes (file additions, modifications and removals) in a
file called @samp{ChangeLog} in each affected directory.
@item --symlink
@opindex --symlink@r{, @code{gettextize} option}
Make symbolic links instead of copying the needed files. This can be
useful to save a few kilobytes of disk space, but it requires extra
effort to create self-contained tarballs, it may disturb some mechanism
the maintainer applies to the sources, and it is likely to introduce
bugs when a newer version of @code{gettext} is installed on the system.
@item -n
@itemx --dry-run
@opindex -d@r{, @code{gettextize} option}
@opindex --dry-run@r{, @code{gettextize} option}
Print modifications but don't perform them. All actions that
@code{gettextize} would normally execute are inhibited and instead only
listed on standard output.
@item --help
@opindex --help@r{, @code{gettextize} option}
Display this help and exit.
@item --version
@opindex --version@r{, @code{gettextize} option}
Output version information and exit.
@end table
If @var{directory} is given, this is the top level directory of a
package to prepare for using GNU @code{gettext}. If not given, it
is assumed that the current directory is the top level directory of
such a package.
The program @code{gettextize} provides the following files. However,
no existing file will be replaced unless the option @code{--force}
(@code{-f}) is specified.
@enumerate
@item
The @file{ABOUT-NLS} file is copied in the main directory of your package,
the one being at the top level. This file contains a reference to the
GNU gettext documentation. It also avoids an error from Automake in
packages that use the Automake option @samp{gnu} or @samp{gnits}:
``error: required file './ABOUT-NLS' not found''.
@item
A @file{po/} directory is created for eventually holding
all translation files, but initially only containing the file
@file{po/Makefile.in.in} from the GNU @code{gettext} distribution
(beware the double @samp{.in} in the file name) and a few auxiliary
files. If the @file{po/} directory already exists, it will be preserved
along with the files it contains, and only @file{Makefile.in.in} and
the auxiliary files will be overwritten.
If @samp{--po-dir} has been specified, this holds for every directory
specified through @samp{--po-dir}, instead of @file{po/}.
@item
The file @file{config.rpath} is copied into the directory containing
configuration support files. It is needed by the @code{AM_GNU_GETTEXT}
autoconf macro.
@item
Only if the project is using GNU @code{automake}:
A set of @code{autoconf} macro files is copied into the package's
@code{autoconf} macro repository, usually in a directory called @file{m4/}.
@end enumerate
If your site support symbolic links, @code{gettextize} will not
actually copy the files into your package, but establish symbolic
links instead. This avoids duplicating the disk space needed in
all packages. Merely using the @samp{-h} option while creating the
@code{tar} archive of your distribution will resolve each link by an
actual copy in the distribution archive. So, to insist, you really
should use @samp{-h} option with @code{tar} within your @code{dist}
goal of your main @file{Makefile.in}.
Furthermore, @code{gettextize} will update all @file{Makefile.am} files
in each affected directory, as well as the top level @file{configure.ac}
or @file{configure.in} file.
It is interesting to understand that most new files for supporting
GNU @code{gettext} facilities in one package go in @file{po/} and
@file{m4/} subdirectories. Still, these directories will mostly
contain package dependent files.
The @code{gettextize} program makes backup files for all files it
replaces or changes, and also write ChangeLog entries about these
changes. This way, the careful maintainer can check after running
@code{gettextize} whether its changes are acceptable to him, and
possibly adjust them. An exception to this rule is the @file{intl/}
directory, which is removed as a whole if it still existed.
It is important to understand that @code{gettextize} can not do the
entire job of adapting a package for using GNU @code{gettext}. The
amount of remaining work depends on whether the package uses GNU
@code{automake} or not. But in any case, the maintainer should still
read the section @ref{Adjusting Files} after invoking @code{gettextize}.
In particular, if after using @samp{gettexize}, you get an error
@samp{AC_COMPILE_IFELSE was called before AC_GNU_SOURCE} or
@samp{AC_RUN_IFELSE was called before AC_GNU_SOURCE}, you can fix it
by modifying @file{configure.ac}, as described in @ref{configure.ac}.
It is also important to understand that @code{gettextize} is not part
of the GNU build system, in the sense that it should not be invoked
automatically, and not be invoked by someone who doesn't assume the
responsibilities of a package maintainer. For the latter purpose, a
separate tool is provided, see @ref{autopoint Invocation}.