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
+}