git-clean: handle errors if removing files fails
[gitweb.git] / gitk-git / Makefile
index 9bc1e24082f80b09b08839c63cf67202833277c3..ae2b80b1083c18c6b0a15959fee304b6c43b3792 100644 (file)
@@ -3,6 +3,11 @@ all::
 
 prefix ?= $(HOME)
 bindir ?= $(prefix)/bin
+sharedir ?= $(prefix)/share
+gitk_libdir   ?= $(sharedir)/gitk/lib
+msgsdir    ?= $(gitk_libdir)/msgs
+msgsdir_SQ  = $(subst ','\'',$(msgsdir))
+
 TCLTK_PATH ?= wish
 INSTALL ?= install
 RM ?= rm -f
@@ -11,19 +16,48 @@ DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
 bindir_SQ = $(subst ','\'',$(bindir))
 TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
 
+## po-file creation rules
+XGETTEXT   ?= xgettext
+ifdef NO_MSGFMT
+       MSGFMT ?= $(TCL_PATH) po/po2msg.sh
+else
+       MSGFMT ?= msgfmt
+endif
+
+PO_TEMPLATE = po/gitk.pot
+ALL_POFILES = $(wildcard po/*.po)
+ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES))
+
 ifndef V
        QUIET          = @
        QUIET_GEN      = $(QUIET)echo '   ' GEN $@ &&
 endif
 
-all:: gitk-wish
+all:: gitk-wish $(ALL_MSGFILES)
+
 install:: all
        $(INSTALL) gitk-wish '$(DESTDIR_SQ)$(bindir_SQ)'/gitk
+       $(INSTALL) -d '$(DESTDIR_SQ)$(msgsdir_SQ)'
+       $(foreach p,$(ALL_MSGFILES), $(INSTALL) $p '$(DESTDIR_SQ)$(msgsdir_SQ)' &&) true
+
+uninstall::
+       $(foreach p,$(ALL_MSGFILES), $(RM) '$(DESTDIR_SQ)$(msgsdir_SQ)'/$(notdir $p) &&) true
+       $(RM) '$(DESTDIR_SQ)$(bindir_SQ)'/gitk
+
 clean::
-       $(RM) gitk-wish
+       $(RM) gitk-wish po/*.msg
 
 gitk-wish: gitk
        $(QUIET_GEN)$(RM) $@ $@+ && \
        sed -e '1,3s|^exec .* "$$0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$0"|' <gitk >$@+ && \
        chmod +x $@+ && \
        mv -f $@+ $@
+
+$(PO_TEMPLATE): gitk
+       $(XGETTEXT) -kmc -LTcl -o $@ gitk
+update-po:: $(PO_TEMPLATE)
+       $(foreach p, $(ALL_POFILES), echo Updating $p ; msgmerge -U $p $(PO_TEMPLATE) ; )
+$(ALL_MSGFILES): %.msg : %.po
+       @echo Generating catalog $@
+       $(MSGFMT) --statistics --tcl $< -l $(basename $(notdir $<)) -d $(dir $@)
+