mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
ce852b9d5f
I changed the %.gmo rule in po/Makefile to use $@ instead of a shell variable, and made various tweaks in it to better support strange file names, e.g. spaces in $(srcdir). I suppose other makefiles in ELinks and other rules in po/Makefile do not support those, but one must start somewhere. I don't think it will ever be feasible to support backslashes and quotes without horrible contortions, but spaces and dashes should be doable. I also quoted the ~ in --check-accelerators=~ in case some shell might want to expand it as the home directory. Bash 3.00.16(1) doesn't because the word contains dashes.
108 lines
3.4 KiB
Makefile
108 lines
3.4 KiB
Makefile
top_builddir=..
|
|
include $(top_builddir)/Makefile.config
|
|
|
|
# Where to install the catalog files.
|
|
localedir = $(datadir)/locale
|
|
|
|
# These are for some reason not added magically to the Makefile.
|
|
MSGMERGE = msgmerge
|
|
|
|
# Name of the file containing the list of files to translate (used by
|
|
# xgettext)
|
|
POTFILES_ABS_LIST = potfiles.list
|
|
|
|
|
|
# Distributed elinks-*.tar.gz packages include po/*.gmo files, so that
|
|
# users can install ELinks even if they don't have a msgfmt program.
|
|
# However, if srcdir != builddir, then this Makefile ignores the *.gmo
|
|
# files in the srcdir and builds new ones in the builddir.
|
|
%.gmo: $(srcdir)/%.po
|
|
@rm -f -- "$@" && printf "%s: " "$*" \
|
|
&& $(GMSGFMT) --statistics -o "$@" -- "$<"
|
|
|
|
|
|
### The default rule
|
|
#
|
|
# Note: Target `all-local' must not depend on target '$(srcdir)/$(PACKAGE).pot',
|
|
# otherwise packages like GCC can not be built if only parts of the source have
|
|
# been downloaded.
|
|
#
|
|
# Note 2: We aren't gcc, we are ELinks. And I want that dependency ;-). --pasky
|
|
#
|
|
# Note 3: I changed my mind, it is really annoying if you just insert one line
|
|
# and suddenly you have tons of changes in all the .po files updating the line
|
|
# informations. --pasky
|
|
#
|
|
# $(CATALOGS) is empty if --disable-nls. Beats using *-(yes|no) targets.
|
|
|
|
all-local: $(CATALOGS)
|
|
|
|
|
|
### Creating the template po template file
|
|
#
|
|
# This pulls in _all_ .c and .h files in the src directory. Even files that has
|
|
# not been added to the git repo. Beware of junk entries!
|
|
|
|
$(srcdir)/$(POTFILES_ABS_LIST):
|
|
@( cd $(top_srcdir); \
|
|
find src/ -type f -name '*.[ch]' -o -name options.inc -o -name 'actions-*.inc' | sort ) \
|
|
> $(srcdir)/$(POTFILES_ABS_LIST)
|
|
|
|
$(srcdir)/$(PACKAGE).pot: $(srcdir)/$(POTFILES_ABS_LIST)
|
|
$(XGETTEXT) --default-domain=$(PACKAGE) \
|
|
--directory=$(top_srcdir) \
|
|
--add-comments --language=C \
|
|
--keyword=_ --keyword=N_ --keyword=n_:1,2 --keyword=N__ -f $(srcdir)/$(POTFILES_ABS_LIST) \
|
|
&& test -f $(PACKAGE).po \
|
|
&& mv -f $(PACKAGE).po $(srcdir)/$(PACKAGE).pot
|
|
|
|
|
|
### Updating po and gmo files
|
|
#
|
|
# Update by merging all .po files with the .po template master file.
|
|
#
|
|
# It is possible to update only a single .po file by setting the PO variable to
|
|
# either <lang> or <lang>.po when calling make. Example: make update-po PO=is
|
|
|
|
update-po: Makefile $(srcdir)/$(PACKAGE).pot
|
|
@cd $(srcdir)
|
|
@$(foreach lang,$(basename $(if $(strip $(PO)),$(PO),$(GMOFILES))), \
|
|
echo -n "$(lang): "; \
|
|
if $(MSGMERGE) $(srcdir)/$(lang).po $(srcdir)/$(PACKAGE).pot -o $(lang).new.po; then \
|
|
mv -f $(lang).new.po $(srcdir)/$(lang).po; \
|
|
else \
|
|
echo "msgmerge failed!"; \
|
|
rm -f $(lang).new.po; \
|
|
fi; \
|
|
)
|
|
$(MAKE) update-gmo
|
|
|
|
update-gmo: Makefile $(GMOFILES)
|
|
@:
|
|
|
|
|
|
### Check single or all po files
|
|
#
|
|
|
|
check-po:
|
|
@$(foreach lang,$(basename $(if $(strip $(PO)),$(PO),$(GMOFILES))), \
|
|
echo -n "$(lang): "; \
|
|
$(GMSGFMT) --check --check-accelerators="~" --verbose --statistics -o /dev/null $(srcdir)/$(lang).po; \
|
|
)
|
|
|
|
### Installation and distribution
|
|
#
|
|
# Use *-local targets to place and remove .gmo files.
|
|
|
|
install-local: all-local
|
|
$(MKINSTALLDIRS) $(DESTDIR)$(localedir)
|
|
@$(foreach lang,$(basename $(if $(strip $(PO)),$(PO),$(CATALOGS))), \
|
|
$(MKINSTALLDIRS) $(DESTDIR)$(localedir)/$(lang)/LC_MESSAGES; \
|
|
$(call ncmd,installdata,$(lang).gmo,$(DESTDIR)$(localedir)/$(lang)/LC_MESSAGES/$(PACKAGE).mo); \
|
|
)
|
|
|
|
clean-local:
|
|
rm -f $(PACKAGE).po *.new.po $(srcdir)/$(POTFILES_ABS_LIST)
|
|
|
|
include $(top_srcdir)/Makefile.lib
|