@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}.
