@matheusbsbs / matheus-bagliano / commits / 66e15a6b83
Fork 0

gitk: Fix the Makefile to cope with systems lacking msgfmt

The po2msg.sh script and the .gitignore in the po directory have been shamelessly copied from the current git-gui. This enables the top level "make NO_MSGFMT" to work consistently for git across the git-gui and gitk sub-projects. This is the same effective patch that has previously been posted as a git.git patch which more succinctly described the copying of po/.gitignore and po/po2msg.sh from git-gui. Signed-off-by: Charles Bailey <charles@hashpling.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Charles Bailey committed Jan 9, 2008 at 14:31 UTC 66e15a6b83a0b79232377137cc1710343a81aea4
3 files changed +140 -1
Makefile
+6 -1
@@ -18,7 +18,12 @@ TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH))
18
19 ## po-file creation rules
20 XGETTEXT ?= xgettext
21 -MSGFMT ?= msgfmt
21 +ifdef NO_MSGFMT
22 + MSGFMT ?= $(TCL_PATH) po/po2msg.sh
23 +else
24 + MSGFMT ?= msgfmt
25 +endif
26 +
27 PO_TEMPLATE = po/gitk.pot
28 ALL_POFILES = $(wildcard po/*.po)
29 ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES))
po/.gitignore new
+1
@@ -0,0 +1 @@
1 +*.msg
po/po2msg.sh new
+133
@@ -0,0 +1,133 @@
1 +#!/bin/sh
2 +# Tcl ignores the next line -*- tcl -*- \
3 +exec tclsh "$0" -- "$@"
4 +
5 +# This is a really stupid program, which serves as an alternative to
6 +# msgfmt. It _only_ translates to Tcl mode, does _not_ validate the
7 +# input, and does _not_ output any statistics.
8 +
9 +proc u2a {s} {
10 + set res ""
11 + foreach i [split $s ""] {
12 + scan $i %c c
13 + if {$c<128} {
14 + # escape '[', '\' and ']'
15 + if {$c == 0x5b || $c == 0x5d} {
16 + append res "\\"
17 + }
18 + append res $i
19 + } else {
20 + append res \\u[format %04.4x $c]
21 + }
22 + }
23 + return $res
24 +}
25 +
26 +set output_directory "."
27 +set lang "dummy"
28 +set files [list]
29 +set show_statistics 0
30 +
31 +# parse options
32 +for {set i 0} {$i < $argc} {incr i} {
33 + set arg [lindex $argv $i]
34 + if {$arg == "--statistics"} {
35 + incr show_statistics
36 + continue
37 + }
38 + if {$arg == "--tcl"} {
39 + # we know
40 + continue
41 + }
42 + if {$arg == "-l"} {
43 + incr i
44 + set lang [lindex $argv $i]
45 + continue
46 + }
47 + if {$arg == "-d"} {
48 + incr i
49 + set tmp [lindex $argv $i]
50 + regsub "\[^/\]$" $tmp "&/" output_directory
51 + continue
52 + }
53 + lappend files $arg
54 +}
55 +
56 +proc flush_msg {} {
57 + global msgid msgstr mode lang out fuzzy
58 + global translated_count fuzzy_count not_translated_count
59 +
60 + if {![info exists msgid] || $mode == ""} {
61 + return
62 + }
63 + set mode ""
64 + if {$fuzzy == 1} {
65 + incr fuzzy_count
66 + set fuzzy 0
67 + return
68 + }
69 +
70 + if {$msgid == ""} {
71 + set prefix "set ::msgcat::header"
72 + } else {
73 + if {$msgstr == ""} {
74 + incr not_translated_count
75 + return
76 + }
77 + set prefix "::msgcat::mcset $lang \"[u2a $msgid]\""
78 + incr translated_count
79 + }
80 +
81 + puts $out "$prefix \"[u2a $msgstr]\""
82 +}
83 +
84 +set fuzzy 0
85 +set translated_count 0
86 +set fuzzy_count 0
87 +set not_translated_count 0
88 +foreach file $files {
89 + regsub "^.*/\(\[^/\]*\)\.po$" $file "$output_directory\\1.msg" outfile
90 + set in [open $file "r"]
91 + fconfigure $in -encoding utf-8
92 + set out [open $outfile "w"]
93 +
94 + set mode ""
95 + while {[gets $in line] >= 0} {
96 + if {[regexp "^#" $line]} {
97 + if {[regexp ", fuzzy" $line]} {
98 + set fuzzy 1
99 + } else {
100 + flush_msg
101 + }
102 + continue
103 + } elseif {[regexp "^msgid \"(.*)\"$" $line dummy match]} {
104 + flush_msg
105 + set msgid $match
106 + set mode "msgid"
107 + } elseif {[regexp "^msgstr \"(.*)\"$" $line dummy match]} {
108 + set msgstr $match
109 + set mode "msgstr"
110 + } elseif {$line == ""} {
111 + flush_msg
112 + } elseif {[regexp "^\"(.*)\"$" $line dummy match]} {
113 + if {$mode == "msgid"} {
114 + append msgid $match
115 + } elseif {$mode == "msgstr"} {
116 + append msgstr $match
117 + } else {
118 + puts stderr "I do not know what to do: $match"
119 + }
120 + } else {
121 + puts stderr "Cannot handle $line"
122 + }
123 + }
124 + flush_msg
125 + close $in
126 + close $out
127 +}
128 +
129 +if {$show_statistics} {
130 + puts [concat "$translated_count translated messages, " \
131 + "$fuzzy_count fuzzy ones, " \
132 + "$not_translated_count untranslated ones."]
133 +}