1 # Makefile for program source directory in GNU NLS utilities package.
2 # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
4 # This file file be copied and used freely without restrictions. It can
5 # be used in projects which are not available under the GNU Public License
6 # but which still want to provide support for the GNU gettext functionality.
7 # Please note that the actual code is *not* freely available.
9 # - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
10 # instead of PACKAGE and to look for po2tbl in ./ not in intl/
12 # - Modified by jacob berkman <jacob@ximian.com> to install
13 # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
15 # - Modified by jwz to not suck wet farts from dead pigeons.
16 # This is truly one of the worst-written Makefiles I've ever seen.
17 # Problems I (tried to) fix:
19 # - MKINSTALLDIRS was $(top_srcdir)/@MKINSTALLDIRS@, but the
20 # configure script already put $(top_srcdir) into @MKINSTALLDIRS@,
21 # so the result was an absolute path that didn't work at all.
23 # - GMSGFMT and XGETTEXT set $PATH to some random value before
24 # running the program. That's completely stupid, and anyway,
25 # the hardcoded $PATH value they were using (../src) do not
26 # apply to xscreensaver.
28 # - the .po.gmo, .po.cat, .po.pox, .pot, install-data-yes, update-po, and
29 # uninstall rules didn't actually print the commands they were
30 # executing: they just dumped a bunch of sh code at you, and expected
31 # you to figure it out yourself. This is typical behavior of Makefile
32 # rules written by morons.
34 # - intltool-update prints a lot of useless crap to both stderr and
35 # stdout and has no command-line argument meaning "be quiet, and only
36 # print errors", so I just redirected the whole thing to /dev/null.
38 # - Demonstrating a total misunderstanding of build-directories and
39 # VPATH, the .po.gmo rule was writing output to $(srcdir). When
40 # the current directory is not $(srcdir), one *never* writes to
41 # $(srcdir) -- it is to be considered read-only.
43 # - Likewise, install-data-yes was looking for .gmo files in both the
44 # current directory, and in $(srcdir). In the case where those are
45 # not the same directory, there must be no .gmo files in $(srcdir).
47 # - The update-po rule was explicitly writing to $(srcdir). I changed
48 # it to just work in the current directory. As I understand it, it
49 # only makes sense to run this rule while in the srcdir, e.g., from
50 # distdepend -- so it should be allowed to error out when run in an
51 # inappropriate directory.
53 # - install-data-yes went through great code-duplication-contortions
54 # to cope with the file mentioned by MKINSTALLDIRS not actually
55 # existing! Instead of assuming that MKINSTALLDIRS will be set to
56 # an actual, correct value, it had a hardcoded check to look for it
57 # in $(top_srcdir) as well! WTF!
59 # - It turns out that "msgfmt" silently fails to write a .gmo file
60 # if the source .po file is empty (or otherwise not yet written.)
61 # The install-data-yes rule made no provision for this, and would
62 # just error out when the .gmo files were not there.
64 # - $(DESTDIR) was being used where $(install_prefix) should have been.
66 # - For xscreensaver, $(prefix) is generally /usr/X11R6/, but some files
67 # need to go under /usr/ instead of under /usr/X11R6/ -- for those, we
68 # use @PO_DATADIR@ instead of @prefix@. So I changed $(datadir) and
69 # $(gnulocaledir) appropriately.
71 # - WTF is $(gettextsrcdir) doing in here?
73 # - added "*.gmo *.pot" to "distclean".
75 # - I added a rule to po/POTFILES.in so that I wouldn't have to maintain
76 # that list of files in two places.
78 # - I removed the rule to auto-regenerate Makefile from Makefile.in.in
79 # because it made my top-level "make distdepend" rule fail: things
80 # were executing in the wrong order.
82 # - the .po.cat rule has a hardcoded "../intl/po2msg.sed" in it.
83 # Guess what, I don't have any such directory. And that should be
84 # refering to $(srcdir) anyway. So I just commented (my half-fixed
85 # version of) this rule out.
88 # config.status complains if "po/Makefile.in.in was not created by intltoolize".
91 GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
99 top_srcdir = @top_srcdir@
104 exec_prefix = @exec_prefix@
105 #datadir = $(prefix)/@DATADIRNAME@ -- not for xscreensaver
106 datadir = @PO_DATADIR@
107 datarootdir = @datarootdir@
108 localedir = $(datadir)/locale
109 #localedir = $(prefix)/share/locale
110 #gnulocaledir = $(prefix)/share/locale -- not for xscreensaver
111 gnulocaledir = $(localedir)
112 #gettextsrcdir = $(prefix)/share/glib-2.0/gettext/po
114 DESTDIR = $(install_prefix)
117 INSTALL_DATA = @INSTALL_DATA@
119 # #### NO. This gets me "..//usr/bin/install: No such file or directory".
120 # The @MKINSTALLDIRS@ variable must have the absolute (or unqualified)
121 # path of the install program. --jwz.
122 # MKINSTALLDIRS = $(top_builddir)/@MKINSTALLDIRS@
124 MKINSTALLDIRS = @MKINSTALLDIRS@
130 XGETTEXT = @XGETTEXT@
131 INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
132 INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
133 MSGMERGE = $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
134 GENPOT = $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
138 CPPFLAGS = @CPPFLAGS@
140 INCLUDES = -I.. -I$(top_srcdir)/intl
142 COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
146 GMOFILES = @GMOFILES@
147 DISTFILES_1 = ChangeLog Makefile.in.in POTFILES.in update.sh
148 DISTFILES = $(DISTFILES_1) $(GETTEXT_PACKAGE).pot \
149 $(POFILES) $(GMOFILES) $(SOURCES)
151 TARFILES = $(DISTFILES_1) $(POFILES) $(SOURCES)
154 # This comment gets stripped out
156 CATALOGS = @CATALOGS@
157 CATOBJEXT = @CATOBJEXT@
158 INSTOBJEXT = @INSTOBJEXT@
161 .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
167 $(MAKE) $(GETTEXT_PACKAGE).pot
168 INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
169 export INTLTOOL_EXTRACT ; \
170 echo $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox ; \
171 $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox
176 # jwz: the "-" means "ignore any errors here, because I don't give a shit."
178 @-file=`echo $* | sed 's,.*/,,'`.gmo ; \
180 echo $(GMSGFMT) -o "$$file" $< ; \
181 $(GMSGFMT) -o "$$file" $<
184 # @echo "sed -f ../intl/po2msg.sed < $< > $*.msg" ; \
185 # sed -f ../intl/po2msg.sed < $< > $*.msg && \
187 # echo $(GENCAT) "$@" "$*.msg" ; \
188 # $(GENCAT) "$@" "$*.msg"
197 $(GETTEXT_PACKAGE).pot: $(POTFILES)
198 @INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
199 export INTLTOOL_EXTRACT ; \
200 echo top_srcdir=$(top_srcdir) $(GENPOT) ; \
201 top_srcdir=$(top_srcdir) $(GENPOT)
203 install-strip: install
205 install: install-exec install-data
211 install-data: install-data-@USE_NLS@
213 install-data-yes: all
215 catalogs='$(CATALOGS)'; \
217 for cat in $$catalogs; do \
218 cat=`basename $$cat`; \
220 *.gmo) destdir=$(gnulocaledir);; \
221 *) destdir=$(localedir);; \
223 lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
224 dir=$(install_prefix)$$destdir/$$lang/LC_MESSAGES; \
225 dest=$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
226 if test -r $$cat -o -r $$cat.m; then \
227 echo $(MKINSTALLDIRS) $$dir; \
228 $(MKINSTALLDIRS) $$dir; \
230 losers="$$losers $$lang"; \
232 if test -r $$cat; then \
233 echo $(INSTALL_DATA) $$cat $$dest; \
234 $(INSTALL_DATA) $$cat $$dest; \
236 if test -r $$cat.m; then \
237 echo $(INSTALL_DATA) $$cat.m $$dest.m; \
238 $(INSTALL_DATA) $$cat.m $$dest.m; \
241 if [ "$$losers" != '' ]; then \
242 echo "Warning: these catalogs were not installed:" >&2 ; \
243 echo " $$losers" >&2; \
246 # Define this as empty until I found a useful application.
250 @catalogs='$(CATALOGS)'; \
251 for cat in $$catalogs; do \
252 cat=`basename $$cat`; \
253 lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
254 suffix="$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
255 for f in $(install_prefix)$(localedir)/$$suffix \
256 $(install_prefix)$(localedir)/$$suffix.m \
257 $(install_prefix)$(gnulocaledir)/$$suffix \
258 $(install_prefix)$(gnulocaledir)/$$suffix.m; do \
259 if [ -f $$f ]; then \
271 dvi info tags TAGS ID:
274 rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp
280 rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m *.gmo *.pot
283 maintainer-clean: distclean
284 @echo "This command is intended for maintainers to use;"
285 @echo "it deletes files that may require special tools to rebuild."
289 distdepend: generate_potfiles_in update-po $(DISTFILES)
292 # jwz: Generates po/POTFILES.in by examining the source tree:
293 # that way we don't have to keep this list up to date as files are added.
295 generate_potfiles_in:
298 echo "sleeping 3 seconds..." ;\
300 ( cd $(top_srcdir); \
301 echo "# Auto-generated: `LANG=C date`" ; \
302 ( grep -l '_("' driver/*.[ch] ; \
303 ls driver/*.glade2.in \
304 driver/*.desktop.in \
305 hacks/config/*.xml ) | sort \
308 echo "created `pwd`/$$file"
313 distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir)
314 dist distdir: update-po $(DISTFILES)
315 dists="$(DISTFILES)"; \
316 for file in $$dists; do \
317 ln $(srcdir)/$$file $(distdir) 2> /dev/null \
318 || cp -p $(srcdir)/$$file $(distdir); \
322 $(MAKE) $(GETTEXT_PACKAGE).pot
323 @catalogs='$(CATALOGS)'; \
324 INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
325 export INTLTOOL_EXTRACT ; \
326 for cat in $$catalogs; do \
327 cat=`basename $$cat`; \
328 lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
329 if [ ! -f $$lang.po ] ; then \
330 cp $(srcdir)/$$lang.po . ; \
332 cp $$lang.po $$lang.old.po; \
333 echo $(MSGMERGE) $$lang; \
334 if $(MSGMERGE) $$lang >/dev/null 2>&1; then \
335 rm -f $$lang.old.po; \
337 echo "msgmerge for $$cat failed!"; \
339 mv $$lang.old.po $$lang.po; \
344 $(MAKE) $(PACKAGE).pot;
345 INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
346 export INTLTOOL_EXTRACT ; \
347 echo; printf "$*: "; \
348 if $(MSGMERGE) $*; then \
351 echo "msgmerge for * failed!"; \
352 mv $*.old.po $*.po; \
354 msgfmt --statistics $*.po; echo;
357 # POTFILES is created from POTFILES.in by stripping comments, empty lines
358 # and Intltool tags (enclosed in square brackets), and appending a full
359 # relative path to them
360 POTFILES: POTFILES.in
361 ( if test 'x$(srcdir)' != 'x.'; then \
362 posrcprefix='$(top_srcdir)/'; \
370 -e "s@.*@ $$posrcprefix& \\\\@" < $@.in \
371 | sed -e '$$s/\\$$//') > $@-t \
375 # jwz: depending on stamp-it breaks distclean.
377 @if test ! -f $@; then \
382 stamp-it: Makefile.in.in ../config.status POTFILES
384 && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= \
385 $(SHELL) ./config.status
387 # Tell versions [3.59,3.63) of GNU make not to export all variables.
388 # Otherwise a system limit (for SysV at least) may be exceeded.