summaryrefslogblamecommitdiffstats
path: root/po/Makefile.in.in
blob: 3d4b02480bc25f6a952564189edf66eba1e870a2 (plain) (tree)




































































































































































































































































































































































































                                                                                
# Makefile for program source directory in GNU NLS utilities package.
# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
#
# This file file be copied and used freely without restrictions.  It can
# be used in projects which are not available under the GNU Public License
# but which still want to provide support for the GNU gettext functionality.
# Please note that the actual code is *not* freely available.
#
# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
#   instead of PACKAGE and to look for po2tbl in ./ not in intl/
#
# - Modified by jacob berkman <jacob@ximian.com> to install
#   Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
#
# - Modified by jwz to not suck wet farts from dead pigeons.
#   This is truly one of the worst-written Makefiles I've ever seen.
#   Problems I (tried to) fix:
#
#     - MKINSTALLDIRS was $(top_srcdir)/@MKINSTALLDIRS@, but the
#       configure script already put $(top_srcdir) into @MKINSTALLDIRS@,
#       so the result was an absolute path that didn't work at all.
#
#     - GMSGFMT and XGETTEXT set $PATH to some random value before
#       running the program.  That's completely stupid, and anyway,
#       the hardcoded $PATH value they were using (../src) do not
#       apply to xscreensaver.
#
#     - the .po.gmo, .po.cat, .po.pox, .pot, install-data-yes, update-po, and
#	uninstall rules didn't actually print the commands they were
#	executing: they just dumped a bunch of sh code at you, and expected
#	you to figure it out yourself.  This is typical behavior of Makefile
#	rules written by morons.
#
#     - intltool-update prints a lot of useless crap to both stderr and
#	stdout and has no command-line argument meaning "be quiet, and only
#	print errors", so I just redirected the whole thing to /dev/null.
#
#     - Demonstrating a total misunderstanding of build-directories and
#       VPATH, the .po.gmo rule was writing output to $(srcdir).  When
#       the current directory is not $(srcdir), one *never* writes to
#       $(srcdir) -- it is to be considered read-only.
#
#     - Likewise, install-data-yes was looking for .gmo files in both the
#       current directory, and in $(srcdir).  In the case where those are
#       not the same directory, there must be no .gmo files in $(srcdir).
#
#     - The update-po rule was explicitly writing to $(srcdir).  I changed
#       it to just work in the current directory.  As I understand it, it
#       only makes sense to run this rule while in the srcdir, e.g., from
#       distdepend -- so it should be allowed to error out when run in an
#       inappropriate directory.
#
#     - install-data-yes went through great code-duplication-contortions
#       to cope with the file mentioned by MKINSTALLDIRS not actually
#       existing!  Instead of assuming that MKINSTALLDIRS will be set to
#       an actual, correct value, it had a hardcoded check to look for it
#       in $(top_srcdir) as well!  WTF!
#
#     - It turns out that "msgfmt" silently fails to write a .gmo file
#       if the source .po file is empty (or otherwise not yet written.)
#       The install-data-yes rule made no provision for this, and would
#       just error out when the .gmo files were not there.
#
#     - $(DESTDIR) was being used where $(install_prefix) should have been.
#
#     - For xscreensaver, $(prefix) is generally /usr/X11R6/, but some files
#	need to go under /usr/ instead of under /usr/X11R6/ -- for those, we
#	use @PO_DATADIR@ instead of @prefix@.  So I changed $(datadir) and
#	$(gnulocaledir) appropriately.
#
#     - WTF is $(gettextsrcdir) doing in here?
#
#     - added  "*.gmo *.pot" to "distclean".
#
#     - I added a rule to po/POTFILES.in so that I wouldn't have to maintain
#       that list of files in two places.
#   
#     - I removed the rule to auto-regenerate Makefile from Makefile.in.in
#       because it made my top-level "make distdepend" rule fail: things
#       were executing in the wrong order.
#
#     - the .po.cat rule has a hardcoded "../intl/po2msg.sed" in it.
#       Guess what, I don't have any such directory.  And that should be
#       refering to $(srcdir) anyway.  So I just commented (my half-fixed
#       version of) this rule out.
#

# config.status complains if "po/Makefile.in.in was not created by intltoolize".
# INTLTOOL_MAKEFILE

GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
PACKAGE = @PACKAGE@
VERSION = @VERSION@

SHELL = /bin/sh
@SET_MAKE@

srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = ..
VPATH = @srcdir@

prefix = @prefix@
exec_prefix = @exec_prefix@
#datadir = $(prefix)/@DATADIRNAME@      -- not for xscreensaver
datadir = @PO_DATADIR@
datarootdir = @datarootdir@
localedir = $(datadir)/locale
#localedir = $(prefix)/share/locale
#gnulocaledir = $(prefix)/share/locale  -- not for xscreensaver
gnulocaledir = $(localedir)
#gettextsrcdir = $(prefix)/share/glib-2.0/gettext/po
subdir = po
DESTDIR = $(install_prefix)

INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@

# #### NO.  This gets me "..//usr/bin/install: No such file or directory".
# The @MKINSTALLDIRS@ variable must have the absolute (or unqualified)
# path of the install program.  --jwz.
# MKINSTALLDIRS = $(top_builddir)/@MKINSTALLDIRS@

MKINSTALLDIRS = @MKINSTALLDIRS@

CC = @CC@
#GENCAT = @GENCAT@
GMSGFMT = @GMSGFMT@
MSGFMT = @MSGFMT@
XGETTEXT = @XGETTEXT@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
MSGMERGE = $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
GENPOT   = $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot

DEFS = @DEFS@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@

INCLUDES = -I.. -I$(top_srcdir)/intl

COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)

SOURCES = 
POFILES = @POFILES@
GMOFILES = @GMOFILES@
DISTFILES_1 = ChangeLog Makefile.in.in POTFILES.in update.sh
DISTFILES = $(DISTFILES_1) $(GETTEXT_PACKAGE).pot \
	    $(POFILES) $(GMOFILES) $(SOURCES)

TARFILES = $(DISTFILES_1) $(POFILES) $(SOURCES)

POTFILES = \
# This comment gets stripped out

CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
INSTOBJEXT = @INSTOBJEXT@

.SUFFIXES:
.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat

.c.o:
	$(COMPILE) $<

.po.pox:
	$(MAKE) $(GETTEXT_PACKAGE).pot
	INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
	export INTLTOOL_EXTRACT ; \
	echo $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox ; \
	     $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox

.po.mo:
	$(MSGFMT) -o $@ $<

# jwz: the "-" means "ignore any errors here, because I don't give a shit."
.po.gmo:
	@-file=`echo $* | sed 's,.*/,,'`.gmo ; \
	 rm -f "$$file" ; \
	 echo $(GMSGFMT) -o "$$file" $< ; \
	      $(GMSGFMT) -o "$$file" $<

#.po.cat:
#	@echo "sed -f ../intl/po2msg.sed < $< > $*.msg" ; \
#	       sed -f ../intl/po2msg.sed < $< > $*.msg && \
#	 rm -f $@ && \
#	 echo $(GENCAT) "$@" "$*.msg" ; \
#	      $(GENCAT) "$@" "$*.msg"


all: all-@USE_NLS@
default: all

all-yes: $(CATALOGS)
all-no:

$(GETTEXT_PACKAGE).pot: $(POTFILES)
	@INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
	export INTLTOOL_EXTRACT ; \
	echo top_srcdir=$(top_srcdir) $(GENPOT) ; \
	     top_srcdir=$(top_srcdir) $(GENPOT)

install-strip: install

install: install-exec install-data
install-exec:
install-program:
install-man:
install-strip:
tags:
install-data: install-data-@USE_NLS@
install-data-no: all
install-data-yes: all
	@set -e; \
	catalogs='$(CATALOGS)'; \
	losers=""; \
	for cat in $$catalogs; do \
	  cat=`basename $$cat`; \
	  case "$$cat" in \
	    *.gmo) destdir=$(gnulocaledir);; \
	    *)     destdir=$(localedir);; \
	  esac; \
	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
	  dir=$(install_prefix)$$destdir/$$lang/LC_MESSAGES; \
	  dest=$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \
	  if test -r $$cat -o -r $$cat.m; then \
	    echo $(MKINSTALLDIRS) $$dir; \
	         $(MKINSTALLDIRS) $$dir; \
	  else \
	    losers="$$losers $$lang"; \
	  fi ; \
	  if test -r $$cat; then \
	    echo $(INSTALL_DATA) $$cat $$dest; \
		 $(INSTALL_DATA) $$cat $$dest; \
	  fi; \
	  if test -r $$cat.m; then \
	    echo $(INSTALL_DATA) $$cat.m $$dest.m; \
		 $(INSTALL_DATA) $$cat.m $$dest.m; \
	  fi; \
	done; \
	if [ "$$losers" != '' ]; then \
	  echo "Warning: these catalogs were not installed:" >&2 ; \
	  echo "	$$losers" >&2; \
	fi

# Define this as empty until I found a useful application.
installcheck:

uninstall:
	@catalogs='$(CATALOGS)'; \
	for cat in $$catalogs; do \
	  cat=`basename $$cat`; \
	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
	  suffix="$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \
	  for f in $(install_prefix)$(localedir)/$$suffix \
		   $(install_prefix)$(localedir)/$$suffix.m \
		   $(install_prefix)$(gnulocaledir)/$$suffix \
		   $(install_prefix)$(gnulocaledir)/$$suffix.m; do \
	    if [ -f $$f ]; then \
	      echo rm -f $$f; \
	           rm -f $$f; \
	    fi; \
	  done; \
	done

uninstall-program:
uninstall-man:

check: all

dvi info tags TAGS ID:

mostlyclean:
	rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp
	rm -fr *.o

clean: mostlyclean

distclean: clean
	rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m *.gmo *.pot
	rm -f stamp-it

maintainer-clean: distclean
	@echo "This command is intended for maintainers to use;"
	@echo "it deletes files that may require special tools to rebuild."
	rm -f $(GMOFILES)

depend:
distdepend: generate_potfiles_in update-po $(DISTFILES)


# jwz: Generates po/POTFILES.in by examining the source tree:
# that way we don't have to keep this list up to date as files are added.
#
generate_potfiles_in:
	@tmp=po.$$$$ ;				\
	 file=POTFILES.in ;			\
	 echo "sleeping 3 seconds..." ;\
	 sleep 3; \
	 ( cd $(top_srcdir);			\
	   echo "# Auto-generated: `LANG=C date`" ;	\
	   ( grep -l '_("' driver/*.[ch] ;	\
	     ls driver/*.glade2.in			\
		driver/*.desktop.in		\
		hacks/config/*.xml ) | sort	\
	  ) > $$tmp &&				\
	 mv $$tmp $$file &&			\
	 echo "created `pwd`/$$file"

echo_tarfiles:
	@echo $(TARFILES)

distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir)
dist distdir: update-po $(DISTFILES)
	dists="$(DISTFILES)"; \
	for file in $$dists; do \
	  ln $(srcdir)/$$file $(distdir) 2> /dev/null \
	    || cp -p $(srcdir)/$$file $(distdir); \
	done

update-po: Makefile
	$(MAKE) $(GETTEXT_PACKAGE).pot
	@catalogs='$(CATALOGS)'; \
	INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
	export INTLTOOL_EXTRACT ; \
	for cat in $$catalogs; do \
	  cat=`basename $$cat`; \
	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
          if [ ! -f $$lang.po ] ; then \
             cp $(srcdir)/$$lang.po . ; \
          fi ; \
	  cp $$lang.po $$lang.old.po; \
	  echo $(MSGMERGE) $$lang; \
	  if   $(MSGMERGE) $$lang >/dev/null 2>&1; then \
	    rm -f $$lang.old.po; \
	  else \
	    echo "msgmerge for $$cat failed!"; \
	    rm -f $$lang.po; \
	    mv $$lang.old.po $$lang.po; \
	  fi; \
	done

.po: Makefile
	$(MAKE)  $(PACKAGE).pot;
	INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) ; \
	export INTLTOOL_EXTRACT ; \
	echo; printf "$*: "; \
	if $(MSGMERGE) $*; then \
	  rm -f $*.old.po; \
	  else \
	    echo "msgmerge for * failed!"; \
	    mv $*.old.po $*.po; \
	fi; \
	msgfmt --statistics $*.po; echo;


# POTFILES is created from POTFILES.in by stripping comments, empty lines
# and Intltool tags (enclosed in square brackets), and appending a full
# relative path to them
POTFILES: POTFILES.in
	( if test 'x$(srcdir)' != 'x.'; then \
	    posrcprefix='$(top_srcdir)/'; \
	  else \
	    posrcprefix="../"; \
	  fi; \
	  rm -f $@-t $@ \
	    && (sed -e '/^#/d' 						\
		    -e "s/^\[.*\] +//" 					\
		    -e '/^[ 	]*$$/d' 				\
		    -e "s@.*@	$$posrcprefix& \\\\@" < $@.in		\
		| sed -e '$$s/\\$$//') > $@-t \
	    && chmod a-w $@-t \
	    && mv $@-t $@ )

# jwz: depending on stamp-it breaks distclean.
Makefile:
	@if test ! -f $@; then \
		rm -f stamp-it; \
		$(MAKE) stamp-it; \
	fi

stamp-it: Makefile.in.in ../config.status POTFILES
	cd .. \
	  && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= \
	       $(SHELL) ./config.status

# Tell versions [3.59,3.63) of GNU make not to export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: