File: gettext.info, Node: src/Makefile, Next: lib/gettext.h, Prev: Makefile, Up: Adjusting Files 14.4.12 ‘Makefile.in’ in ‘src/’ ------------------------------- 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’: 1. In view of the ‘dist:’ goal, you should have these lines near the beginning of ‘src/Makefile.in’: PACKAGE = @PACKAGE@ VERSION = @VERSION@ 2. If not done already, you should guarantee that ‘top_srcdir’ gets defined. This will serve for ‘cpp’ include files. Just add the line: top_srcdir = @top_srcdir@ 3. You might also want to define ‘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 4. The ‘main’ function of your program will normally call ‘bindtextdomain’ (see *note Triggering::), like this: bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); On native Windows platforms, the ‘main’ function may call ‘wbindtextdomain’ instead of ‘bindtextdomain’. To make LOCALEDIR known to the program, add the following lines to ‘Makefile.in’: datadir = @datadir@ datarootdir= @datarootdir@ localedir = @localedir@ DEFS = -DLOCALEDIR=$(localedir_c_make) @DEFS@ ‘$(localedir_c_make)’ expands to the value of ‘localedir’, in C syntax, escaped for use in a ‘Makefile’. Note that ‘@datadir@’ defaults to ‘$(prefix)/share’, and ‘$(localedir)’ defaults to ‘$(prefix)/share/locale’. 5. You should ensure that the final linking will use ‘@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@ 6. Your ‘dist:’ goal has to conform with others. Here is a reasonable definition for it: 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: 1. To make LOCALEDIR known to the program, add the following to ‘Makefile.am’:_CPPFLAGS = -DLOCALEDIR=$(localedir_c_make) for each specific module or compilation unit, or AM_CPPFLAGS = -DLOCALEDIR=$(localedir_c_make) for all modules and compilation units together. 2. To ensure that the final linking will use ‘@LIBINTL@’ or ‘@LTLIBINTL@’ as a library, add the following to ‘Makefile.am’: _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.
