mirror of https://github.com/lukechilds/node.git
Browse Source
* Change configure default to "small-icu" (Intl on, English only) * add "--without-intl" and "vcbuild without-intl" options, equivalent to --with-intl=none * update BUILDING.md with above changes * Checks in tools that generate the deps/icu-small source directory from ICU source * Tools and process for updating ICU documented in tools/icu/README.md Fixes: https://github.com/nodejs/node/issues/3476 PR-URL: https://github.com/nodejs/node/pull/6088 Reviewed-By: James M Snell <jasnell@gmail.com>process-exit-stdio-flushing
Steven R. Loomis
9 years ago
6 changed files with 388 additions and 110 deletions
@ -0,0 +1,126 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
import optparse |
||||
|
import os |
||||
|
import pprint |
||||
|
import re |
||||
|
import shlex |
||||
|
import subprocess |
||||
|
import sys |
||||
|
import shutil |
||||
|
import string |
||||
|
|
||||
|
parser = optparse.OptionParser() |
||||
|
|
||||
|
parser.add_option('--icu-small', |
||||
|
action='store', |
||||
|
dest='icusmall', |
||||
|
default='deps/icu-small', |
||||
|
help='path to target ICU directory to shrink. Will be deleted.') |
||||
|
|
||||
|
parser.add_option('--icu-src', |
||||
|
action='store', |
||||
|
dest='icusrc', |
||||
|
default='deps/icu', |
||||
|
help='path to source ICU directory.') |
||||
|
|
||||
|
parser.add_option('--icutmp', |
||||
|
action='store', |
||||
|
dest='icutmp', |
||||
|
default='out/Release/gen/icutmp', |
||||
|
help='path to icutmp dir.') |
||||
|
|
||||
|
|
||||
|
(options, args) = parser.parse_args() |
||||
|
|
||||
|
if os.path.isdir(options.icusmall): |
||||
|
print 'Deleting existing icusmall %s' % (options.icusmall) |
||||
|
shutil.rmtree(options.icusmall) |
||||
|
|
||||
|
if not os.path.isdir(options.icusrc): |
||||
|
print 'Missing source ICU dir --icusrc=%' % (options.icusrc) |
||||
|
sys.exit(1) |
||||
|
|
||||
|
|
||||
|
|
||||
|
ignore_regex = re.compile('^.*\.(vcxproj|filters|nrm|icu|dat|xml|txt|ac|guess|m4|in|sub|py|mak)$') |
||||
|
|
||||
|
def icu_ignore(dir, files): |
||||
|
subdir = dir[len(options.icusrc)+1::] |
||||
|
ign = [] |
||||
|
if len(subdir) == 0: |
||||
|
# remove all files at root level |
||||
|
ign = ign + files |
||||
|
# except... |
||||
|
ign.remove('source') |
||||
|
ign.remove('license.html') |
||||
|
ign.remove('LICENSE') |
||||
|
elif subdir == 'source': |
||||
|
ign = ign + ['layout','samples','test','extra','config','layoutex','allinone'] |
||||
|
ign = ign + ['runConfigureICU','install-sh','mkinstalldirs','configure'] |
||||
|
elif subdir == 'source/tools': |
||||
|
ign = ign + ['tzcode','ctestfw','gensprep','gennorm2','gendict','icuswap', |
||||
|
'genbrk','gencfu','gencolusb','genren','memcheck','makeconv','gencnval','icuinfo','gentest'] |
||||
|
elif subdir == 'source/data': |
||||
|
ign = ign + ['unidata','curr','zone','unit','lang','region','misc','sprep'] |
||||
|
# else: |
||||
|
# print '!%s! [%s]' % (subdir, files) |
||||
|
ign = ign + ['.DS_Store', 'Makefile', 'Makefile.in'] |
||||
|
|
||||
|
for file in files: |
||||
|
if ignore_regex.match(file): |
||||
|
ign = ign + [file] |
||||
|
|
||||
|
# print '>%s< [%s]' % (subdir, ign) |
||||
|
return ign |
||||
|
|
||||
|
# copied from configure |
||||
|
def icu_info(icu_full_path): |
||||
|
uvernum_h = os.path.join(icu_full_path, 'source/common/unicode/uvernum.h') |
||||
|
if not os.path.isfile(uvernum_h): |
||||
|
print ' Error: could not load %s - is ICU installed?' % uvernum_h |
||||
|
sys.exit(1) |
||||
|
icu_ver_major = None |
||||
|
matchVerExp = r'^\s*#define\s+U_ICU_VERSION_SHORT\s+"([^"]*)".*' |
||||
|
match_version = re.compile(matchVerExp) |
||||
|
for line in open(uvernum_h).readlines(): |
||||
|
m = match_version.match(line) |
||||
|
if m: |
||||
|
icu_ver_major = m.group(1) |
||||
|
if not icu_ver_major: |
||||
|
print ' Could not read U_ICU_VERSION_SHORT version from %s' % uvernum_h |
||||
|
sys.exit(1) |
||||
|
icu_endianness = sys.byteorder[0]; # TODO(srl295): EBCDIC should be 'e' |
||||
|
return (icu_ver_major, icu_endianness) |
||||
|
|
||||
|
(icu_ver_major, icu_endianness) = icu_info(options.icusrc) |
||||
|
print "icudt%s%s" % (icu_ver_major, icu_endianness) |
||||
|
|
||||
|
src_datafile = os.path.join(options.icutmp, "icusmdt%s.dat" % (icu_ver_major)) |
||||
|
dst_datafile = os.path.join(options.icusmall, "source","data","in", "icudt%s%s.dat" % (icu_ver_major, icu_endianness)) |
||||
|
|
||||
|
if not os.path.isfile(src_datafile): |
||||
|
print "Could not find source datafile %s - did you build small-icu node?" % src_datafile |
||||
|
sys.exit(1) |
||||
|
else: |
||||
|
print "will use small datafile %s" % (src_datafile) |
||||
|
print '%s --> %s' % (options.icusrc, options.icusmall) |
||||
|
shutil.copytree(options.icusrc, options.icusmall, ignore=icu_ignore) |
||||
|
print '%s --> %s' % (src_datafile, dst_datafile) |
||||
|
|
||||
|
# OK, now copy the data file |
||||
|
shutil.copy(src_datafile, dst_datafile) |
||||
|
|
||||
|
# Now, print a short notice |
||||
|
readme_name = os.path.join(options.icusmall, "README-SMALL-ICU.txt" ) |
||||
|
|
||||
|
fi = open(readme_name, 'wb') |
||||
|
print >>fi, "Small ICU sources - auto generated by shrink-icu-src.py" |
||||
|
print >>fi, "" |
||||
|
print >>fi, "This directory contains the ICU subset used by --with-intl=small-icu (the default)" |
||||
|
print >>fi, "It is a strict subset of ICU %s source files with the following exception(s):" % (icu_ver_major) |
||||
|
print >>fi, "* %s : Reduced-size data file" % (dst_datafile) |
||||
|
print >>fi, "" |
||||
|
print >>fi, "" |
||||
|
print >>fi, "To rebuild this directory, see ../../tools/icu/README.md" |
||||
|
print >>fi, "" |
||||
|
fi.close() |
Loading…
Reference in new issue