summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--common.mk14
-rwxr-xr-xenc/unicode/case-folding.rb17
3 files changed, 37 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 3e7223e756..530bc6739c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Fri Jun 24 09:17:15 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (lib/unicode_normalize/tables.rb): should not depend
+ on Unicode data files unless ALWAYS_UPDATE_UNICODE=yes, to get
+ rid of downloading Unicode data unnecessary. [ruby-dev:49681]
+
+ * common.mk (enc/unicode/casefold.h): update Unicode files in a
+ sub-make, not to let the header depend on the files always.
+
+ * enc/unicode/case-folding.rb: if gperf is not usable, assume the
+ existing file is OK.
+
Tue Jun 21 19:44:54 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
* test/ruby/enc/test_regex_casefold.rb: Add Windows-1251, KOI8-R, and
diff --git a/common.mk b/common.mk
index b9ced6753e..4009e5d88c 100644
--- a/common.mk
+++ b/common.mk
@@ -807,6 +807,7 @@ all-incs: incs {$(VPATH)}encdb.h {$(VPATH)}transdb.h
incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}known_errors.inc \
{$(VPATH)}vm_call_iseq_optimized.inc $(srcdir)/revision.h \
$(REVISION_H) enc/unicode/name2ctype.h enc/jis/props.h \
+ $(srcdir)/enc/unicode/casefold.h \
{$(VPATH)}id.h {$(VPATH)}probes.dmyh
insns: $(INSNS)
@@ -1051,9 +1052,11 @@ $(UNICODE_FILES):
$(srcdir)/$(HAVE_BASERUBY:yes=lib/unicode_normalize/tables.rb): \
$(srcdir)/.unicode-tables.time
+$(srcdir)/$(ALWAYS_UPDATE_UNICODE:yes=.unicode-tables.time): $(UNICODE_FILES)
+
$(srcdir)/.unicode-tables.time: $(srcdir)/tool/generic_erb.rb \
- $(UNICODE_FILES) \
$(srcdir)/template/unicode_norm_gen.tmpl
+ $(Q) $(ALWAYS_UPDATE_UNICODE:yes=exit &&) $(MAKE) $(MFLAGS) Q=$(Q) update-unicode
$(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb \
-c -t$@ -o $(srcdir)/lib/unicode_normalize/tables.rb \
-I $(srcdir) \
@@ -1063,12 +1066,17 @@ $(srcdir)/.unicode-tables.time: $(srcdir)/tool/generic_erb.rb \
# the next non-comment line was:
# $(srcdir)/enc/unicode/casefold.h: $(srcdir)/enc/unicode/case-folding.rb \
# but was changed to make sure CI works on systems that don't have gperf
-unicode-up: $(srcdir)/enc/unicode/case-folding.rb \
+unicode-up: $(srcdir)/enc/unicode/casefold.h
+
+$(srcdir)/$(ALWAYS_UPDATE_UNICODE:yes=enc/unicode/casefold.h): \
$(UNICODE_SRC_DATA_DIR)/UnicodeData.txt \
$(UNICODE_SRC_DATA_DIR)/SpecialCasing.txt \
$(UNICODE_SRC_DATA_DIR)/CaseFolding.txt
+
+$(srcdir)/enc/unicode/casefold.h: $(srcdir)/enc/unicode/case-folding.rb
+ $(Q) $(ALWAYS_UPDATE_UNICODE:yes=exit &&) $(MAKE) $(MFLAGS) Q=$(Q) update-unicode
$(Q) $(BASERUBY) $(srcdir)/enc/unicode/case-folding.rb \
- --output-file=$(srcdir)/enc/unicode/casefold.h \
+ --output-file=$@ \
--mapping-data-directory=$(UNICODE_SRC_DATA_DIR)
download-extlibs:
diff --git a/enc/unicode/case-folding.rb b/enc/unicode/case-folding.rb
index 433ce74dfe..f6aff0b321 100755
--- a/enc/unicode/case-folding.rb
+++ b/enc/unicode/case-folding.rb
@@ -1,4 +1,5 @@
#!/usr/bin/ruby
+require 'stringio'
# Usage (for case folding only):
# $ wget http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
@@ -96,7 +97,7 @@ class CaseFolding
hash = "onigenc_unicode_#{key}_hash"
lookup = "onigenc_unicode_#{key}_lookup"
arity = Array(data[0][0]).size
- gperf = %W"gperf -7 -k#{[*1..(arity*3)].join(",")} -F,-1 -c -j1 -i1 -t -T -E -C -H #{hash} -N #{lookup} -n"
+ gperf = %W"gperf -7 -k#{[*1..(arity*3)].join(',')} -F,-1 -c -j1 -i1 -t -T -E -C -H #{hash} -N #{lookup} -n"
argname = arity > 1 ? "codes" : "code"
argdecl = "const OnigCodePoint #{arity > 1 ? "*": ""}#{argname}"
n = 7
@@ -363,11 +364,21 @@ if $0 == __FILE__
data.debug!
mapping_data.debug!
end
+ f = StringIO.new
+ begin
+ data.display(f, mapping_data)
+ rescue Errno::ENOENT => e
+ raise unless /gperf/ =~ e.message
+ warn e.message
+ exit dest && File.file?(dest) # assume existing file is OK
+ else
+ s = f.string
+ end
if dest
open(dest, "wb") do |f|
- data.display(f, mapping_data)
+ f.print(s)
end
else
- data.display(STDOUT, mapping_data)
+ STDOUT.print(s)
end
end