Some of the modifications made in the main Makefile.in will also be needed in the Makefile.in from your package sources, which we assume here to be in the src/ subdirectory. Here are all the modifications needed in src/Makefile.in:
PACKAGE = @PACKAGE@
VERSION = @VERSION@
top_srcdir
gets defined. This will serve for cpp include files. Just add
the line:
top_srcdir = @top_srcdir@
subdir as ‘src’, later
allowing for almost uniform ‘dist:’ goals in all your
Makefile.in. At list, the ‘dist:’ goal below assume that
you used:
subdir = src
main function of your program will normally call
bindtextdomain (see see Triggering), like this:
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
To make LOCALEDIR known to the program, add the following lines to Makefile.in if you are using Autoconf version 2.60 or newer:
datadir = @datadir@
datarootdir= @datarootdir@
localedir = @localedir@
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
or these lines if your version of Autoconf is older than 2.60:
datadir = @datadir@
localedir = $(datadir)/locale
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
Note that @datadir@ defaults to ‘$(prefix)/share’, thus
$(localedir) defaults to ‘$(prefix)/share/locale’.
@LIBINTL@ or
@LTLIBINTL@ as a library. @LIBINTL@ is for use without
libtool, @LTLIBINTL@ is for use with libtool. An
easy way to achieve this is to manage that it gets into LIBS, like
this:
LIBS = @LIBINTL@ @LIBS@
In most packages internationalized with GNU gettext, one will
find a directory lib/ in which a library containing some helper
functions will be build. (You need at least the few functions which the
GNU gettext Library itself needs.) However some of the functions
in the lib/ also give messages to the user which of course should be
translated, too. Taking care of this, the support library (say
libsupport.a) should be placed before @LIBINTL@ and
@LIBS@ in the above example. So one has to write this:
LIBS = ../lib/libsupport.a @LIBINTL@ @LIBS@
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
dist: Makefile $(DISTFILES)
for file in $(DISTFILES); do \
ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir) || exit 1; \
done
Note that if you are using GNU automake, Makefile.in is
automatically generated from Makefile.am, and the first three
changes and the last change are not necessary. The remaining needed
Makefile.am modifications are the following:
<module>_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
for each specific module or compilation unit, or
AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
for all modules and compilation units together. Furthermore, if you are using an Autoconf version older then 2.60, add this line to define ‘localedir’:
localedir = $(datadir)/locale
@LIBINTL@ or
@LTLIBINTL@ as a library, add the following to
Makefile.am:
<program>_LDADD = @LIBINTL@
for each specific program, or
LDADD = @LIBINTL@
for all programs together. Remember that when you use libtool
to link a program, you need to use @LTLIBINTL@ instead of @LIBINTL@
for that program.
gettextize, then to ensure that it will be searched for
C preprocessor include files in all circumstances, add something like
this to Makefile.am:
AM_CPPFLAGS = -I../intl -I$(top_srcdir)/intl