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