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