######################################### ##### Defaults & Paths ##### AUTOMAKE_OPTIONS = foreign SUFFIXES = .po .pot .msg if MSGFMT XGETTEXT=xgettext MSGMERGE=msgmerge MSGFMT=msgfmt else XGETTEXT=echo fake:xgettext MSGMERGE=echo fake:msgmerge MSGFMT=echo fake:msgfmt endif ######################################### ##### Files, Binaries, & Libs ##### TCLFILES = \ AppMain.tcl \ apple_events.tcl \ dialog_array.tcl \ dialog_audio.tcl \ dialog_canvas.tcl \ dialog_data.tcl \ dialog_find.tcl \ dialog_font.tcl \ dialog_gatom.tcl \ dialog_iemgui.tcl \ dialog_message.tcl \ dialog_midi.tcl \ dialog_path.tcl \ dialog_preferences.tcl \ dialog_startup.tcl \ helpbrowser.tcl \ opt_parser.tcl \ pd-gui.tcl \ pd_bindings.tcl \ pd_connect.tcl \ pd_deken.tcl \ pd_docsdir.tcl \ pd_guiprefs.tcl \ pd_i18n.tcl \ pd_menucommands.tcl \ pd_menus.tcl \ pdtcl_compat.tcl \ pdtk_canvas.tcl \ pdtk_text.tcl \ pdtk_textwindow.tcl \ pdwindow.tcl \ pkgIndex.tcl \ pkg_mkIndex.tcl \ preferencewindow.tcl \ scrollbox.tcl \ scrollboxwindow.tcl \ wheredoesthisgo.tcl \ $(empty) LOCAL_TCLFILES = \ iemgui_dynamic_strings.tcl \ pd_dynamic_strings.tcl # note: adding $(top_srcdir) prefix for out of tree builds # where $(top_srcdir) and $(top_builddir) are not the same # # updating template.pot & the .po files are not considered per-build artifacts # but part of the source, the per build files are the generated .msg files FILES = $(addprefix $(top_srcdir)/tcl/, $(TCLFILES)) \ $(addprefix $(top_srcdir)/po/, $(LOCAL_TCLFILES)) EXCLUDE_FILE = $(addprefix $(top_srcdir)/po/, _exclude.txt) # these are the supported languages ALL_LINGUAS = \ az \ bg \ de \ el en en_ca eo es eu \ fr \ gu \ he hi hu \ id it \ ja \ ko \ nl \ pa pl pt_br pt_pt \ ru \ sq sv \ uk \ vi \ zh_tw \ $(empty) POFILES = $(addprefix $(top_srcdir)/po/, $(ALL_LINGUAS:=.po)) MSGFILES = $(ALL_LINGUAS:=.msg) TEMPLATE = $(top_srcdir)/po/template.pot libpdpodir = $(pkglibdir)/po libpdpo_DATA = $(MSGFILES) dist_libpdpo_DATA = # files that are included but not built EXTRA_DIST = \ $(POFILES) $(TEMPLATE) README.txt \ _exclude.txt \ $(LOCAL_TCLFILES) \ $(empty) ######################################### ##### Targets ##### .PHONY: locations all-local: template po msg clean-local: rm -f $(MSGFILES) # refresh template.pot from the source code template: $(TEMPLATE) # remove string file locations and header "POT-Creation-Date" to suppress # unnecessary changes, we really only want to update the .po files when a # translation string changes in a tcl file $(TEMPLATE): $(FILES) $(EXCLUDE_FILE) touch $(TEMPLATE) $(XGETTEXT) \ --from-code=UTF-8 --language=Tcl --keyword=_ \ --sort-by-file --output=$(TEMPLATE).new \ --package-name="Pure Data" --package-version=$(VERSION) \ --copyright-holder='This file is put in the public domain' \ --foreign-user \ --no-location \ --exclude-file=$(EXCLUDE_FILE) \ --msgid-bugs-address=pd-dev@iem.at \ $(FILES) sed -E -e '/^"POT-Creation-Date/d' -e '/^"Project-Id-Version/d' $(TEMPLATE).new > $(TEMPLATE).new.nodate sed -E -e '/^"POT-Creation-Date/d' -e '/^"Project-Id-Version/d' $(TEMPLATE) > $(TEMPLATE).nodate cmp $(TEMPLATE).new.nodate $(TEMPLATE).nodate || cat $(TEMPLATE).new > $(TEMPLATE) rm -f $(TEMPLATE).new $(TEMPLATE).new.nodate $(TEMPLATE).nodate # print the locations for translation strings in the .tcl source files locations: $(XGETTEXT) \ --from-code=UTF-8 --language=Tcl --keyword=_ \ --sort-by-file --foreign-user --omit-header --output=- \ $(FILES) # refresh .po files from the template po: $(POFILES) # the .po files depend on template.pot, suppress line location changes to # avoid unnecessary updates $(POFILES): %.po: $(TEMPLATE) $(MSGMERGE) --no-location --quiet --update $@ $(TEMPLATE) touch $@ rm -f $@~ # generate .msg files from the .po files, # these are installed and loaded by the GUI at runtime msg: $(MSGFILES) # each .msg file depends on updates to the corresponding .po file $(MSGFILES): %.msg: %.po $(MSGFMT) --check --tcl --locale=$* -d . $< etags: TAGS etags --append --language=none --regex="/proc[ \t]+\([^ \t]+\)/\1/" *.tcl