2011-11-15 04:02:44 +01:00
|
|
|
#!/usr/bin/env python
|
|
|
|
import optparse
|
|
|
|
import os
|
2011-12-18 23:53:07 +01:00
|
|
|
import pprint
|
2012-03-02 02:14:27 +01:00
|
|
|
import re
|
2012-09-15 03:06:25 +02:00
|
|
|
import shlex
|
2011-11-15 17:17:05 +01:00
|
|
|
import subprocess
|
2011-11-15 04:02:44 +01:00
|
|
|
import sys
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
import shutil
|
|
|
|
import string
|
2010-10-26 03:17:19 +02:00
|
|
|
|
2015-03-19 22:57:11 +01:00
|
|
|
# gcc and g++ as defaults matches what GYP's Makefile generator does,
|
|
|
|
# except on OS X.
|
|
|
|
CC = os.environ.get('CC', 'cc' if sys.platform == 'darwin' else 'gcc')
|
|
|
|
CXX = os.environ.get('CXX', 'c++' if sys.platform == 'darwin' else 'g++')
|
2012-03-05 16:55:24 +01:00
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
root_dir = os.path.dirname(__file__)
|
2013-05-21 18:26:42 +02:00
|
|
|
sys.path.insert(0, os.path.join(root_dir, 'tools', 'gyp', 'pylib'))
|
|
|
|
from gyp.common import GetFlavor
|
2010-11-02 00:03:32 +01:00
|
|
|
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
# imports in tools/configure.d
|
|
|
|
sys.path.insert(0, os.path.join(root_dir, 'tools', 'configure.d'))
|
|
|
|
import nodedownload
|
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
# parse our options
|
|
|
|
parser = optparse.OptionParser()
|
2010-11-02 00:03:32 +01:00
|
|
|
|
2015-04-03 06:33:34 +02:00
|
|
|
valid_os = ('win', 'mac', 'solaris', 'freebsd', 'openbsd', 'linux', 'android')
|
|
|
|
valid_arch = ('arm', 'arm64', 'ia32', 'mips', 'mipsel', 'x32', 'x64')
|
|
|
|
valid_arm_float_abi = ('soft', 'softfp', 'hard')
|
|
|
|
valid_mips_arch = ('loongson', 'r1', 'r2', 'r6', 'rx')
|
|
|
|
valid_mips_fpu = ('fp32', 'fp64', 'fpxx')
|
|
|
|
valid_mips_float_abi = ('soft', 'hard')
|
2015-04-27 06:45:55 +02:00
|
|
|
valid_intl_modes = ('none', 'small-icu', 'full-icu', 'system-icu')
|
|
|
|
|
|
|
|
# create option groups
|
|
|
|
shared_optgroup = optparse.OptionGroup(parser, "Shared libraries",
|
|
|
|
"Flags that allows you to control whether you want to build against "
|
|
|
|
"built-in dependencies or its shared representations. If necessary, "
|
|
|
|
"provide multiple libraries with comma.")
|
|
|
|
intl_optgroup = optparse.OptionGroup(parser, "Internationalization",
|
|
|
|
"Flags that lets you enable i18n features in io.js as well as which "
|
|
|
|
"library you want to build against.")
|
2015-04-03 06:33:34 +02:00
|
|
|
|
2013-08-10 13:34:57 +02:00
|
|
|
# Options should be in alphabetical order but keep --prefix at the top,
|
|
|
|
# that's arguably the one people will be looking for most.
|
|
|
|
parser.add_option('--prefix',
|
|
|
|
action='store',
|
|
|
|
dest='prefix',
|
2015-04-03 06:33:34 +02:00
|
|
|
default='/usr/local',
|
|
|
|
help='select the install prefix [default: %default]')
|
2013-08-10 13:34:57 +02:00
|
|
|
|
|
|
|
parser.add_option('--debug',
|
|
|
|
action='store_true',
|
|
|
|
dest='debug',
|
|
|
|
help='also build debug build')
|
|
|
|
|
|
|
|
parser.add_option('--dest-cpu',
|
|
|
|
action='store',
|
|
|
|
dest='dest_cpu',
|
2015-04-03 06:33:34 +02:00
|
|
|
choices=valid_arch,
|
|
|
|
help='CPU architecture to build for ({0})'.format(', '.join(valid_arch)))
|
2013-08-10 13:34:57 +02:00
|
|
|
|
|
|
|
parser.add_option('--dest-os',
|
|
|
|
action='store',
|
|
|
|
dest='dest_os',
|
2015-04-03 06:33:34 +02:00
|
|
|
choices=valid_os,
|
|
|
|
help='operating system to build for ({0})'.format(', '.join(valid_os)))
|
2013-08-10 13:34:57 +02:00
|
|
|
|
|
|
|
parser.add_option('--gdb',
|
|
|
|
action='store_true',
|
|
|
|
dest='gdb',
|
|
|
|
help='add gdb support')
|
|
|
|
|
|
|
|
parser.add_option('--no-ifaddrs',
|
|
|
|
action='store_true',
|
|
|
|
dest='no_ifaddrs',
|
|
|
|
help='use on deprecated SunOS systems that do not support ifaddrs.h')
|
|
|
|
|
2014-08-23 23:01:06 +02:00
|
|
|
parser.add_option("--fully-static",
|
|
|
|
action="store_true",
|
|
|
|
dest="fully_static",
|
|
|
|
help="Generate an executable without external dynamic libraries. This "
|
|
|
|
"will not work on OSX when using default compilation environment")
|
|
|
|
|
2014-09-02 13:53:36 +02:00
|
|
|
parser.add_option("--openssl-no-asm",
|
|
|
|
action="store_true",
|
|
|
|
dest="openssl_no_asm",
|
|
|
|
help="Do not build optimized assembly for OpenSSL")
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-http-parser',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store_true',
|
|
|
|
dest='shared_http_parser',
|
|
|
|
help='link to a shared http_parser DLL instead of static linking')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-http-parser-includes',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_http_parser_includes',
|
|
|
|
help='directory containing http_parser header files')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-http-parser-libname',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_http_parser_libname',
|
2015-04-03 06:33:34 +02:00
|
|
|
default='http_parser',
|
|
|
|
help='alternative lib name to link to [default: %default]')
|
2013-08-10 13:34:57 +02:00
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-http-parser-libpath',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_http_parser_libpath',
|
|
|
|
help='a directory to search for the shared http_parser DLL')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-libuv',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store_true',
|
|
|
|
dest='shared_libuv',
|
|
|
|
help='link to a shared libuv DLL instead of static linking')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-libuv-includes',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_libuv_includes',
|
|
|
|
help='directory containing libuv header files')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-libuv-libname',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_libuv_libname',
|
2015-04-03 06:33:34 +02:00
|
|
|
default='uv',
|
|
|
|
help='alternative lib name to link to [default: %default]')
|
2013-08-10 13:34:57 +02:00
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-libuv-libpath',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_libuv_libpath',
|
|
|
|
help='a directory to search for the shared libuv DLL')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-openssl',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store_true',
|
|
|
|
dest='shared_openssl',
|
|
|
|
help='link to a shared OpenSSl DLL instead of static linking')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-openssl-includes',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_openssl_includes',
|
|
|
|
help='directory containing OpenSSL header files')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-openssl-libname',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_openssl_libname',
|
2015-04-03 06:33:34 +02:00
|
|
|
default='crypto,ssl',
|
|
|
|
help='alternative lib name to link to [default: %default]')
|
2013-08-10 13:34:57 +02:00
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-openssl-libpath',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_openssl_libpath',
|
|
|
|
help='a directory to search for the shared OpenSSL DLLs')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-zlib',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store_true',
|
|
|
|
dest='shared_zlib',
|
|
|
|
help='link to a shared zlib DLL instead of static linking')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-zlib-includes',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_zlib_includes',
|
|
|
|
help='directory containing zlib header files')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-zlib-libname',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_zlib_libname',
|
2015-04-03 06:33:34 +02:00
|
|
|
default='z',
|
|
|
|
help='alternative lib name to link to [default: %default]')
|
2013-08-10 13:34:57 +02:00
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
shared_optgroup.add_option('--shared-zlib-libpath',
|
2013-08-10 13:34:57 +02:00
|
|
|
action='store',
|
|
|
|
dest='shared_zlib_libpath',
|
|
|
|
help='a directory to search for the shared zlib DLL')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
parser.add_option_group(shared_optgroup)
|
|
|
|
|
2012-11-01 01:36:41 +01:00
|
|
|
# TODO document when we've decided on what the tracing API and its options will
|
|
|
|
# look like
|
2013-08-10 13:34:57 +02:00
|
|
|
parser.add_option('--systemtap-includes',
|
|
|
|
action='store',
|
|
|
|
dest='systemtap_includes',
|
2012-11-01 01:36:41 +01:00
|
|
|
help=optparse.SUPPRESS_HELP)
|
|
|
|
|
2013-08-10 13:34:57 +02:00
|
|
|
parser.add_option('--tag',
|
|
|
|
action='store',
|
|
|
|
dest='tag',
|
|
|
|
help='custom build tag')
|
|
|
|
|
2014-03-26 21:30:49 +01:00
|
|
|
parser.add_option('--v8-options',
|
|
|
|
action='store',
|
|
|
|
dest='v8_options',
|
2014-03-31 14:22:49 +02:00
|
|
|
help='v8 options to pass, see `node --v8-options` for examples.')
|
2014-03-26 21:30:49 +01:00
|
|
|
|
2013-08-10 13:34:57 +02:00
|
|
|
parser.add_option('--with-arm-float-abi',
|
|
|
|
action='store',
|
|
|
|
dest='arm_float_abi',
|
2015-04-03 06:33:34 +02:00
|
|
|
choices=valid_arm_float_abi,
|
|
|
|
help='specifies which floating-point ABI to use ({0}).'.format(
|
|
|
|
', '.join(valid_arm_float_abi)))
|
2013-08-10 13:34:57 +02:00
|
|
|
|
2015-03-03 21:55:59 +01:00
|
|
|
parser.add_option('--with-mips-arch-variant',
|
|
|
|
action='store',
|
|
|
|
dest='mips_arch_variant',
|
|
|
|
default='r2',
|
2015-04-03 06:33:34 +02:00
|
|
|
choices=valid_mips_arch,
|
|
|
|
help='MIPS arch variant ({0}) [default: %default]'.format(
|
|
|
|
', '.join(valid_mips_arch)))
|
2015-03-03 21:55:59 +01:00
|
|
|
|
|
|
|
parser.add_option('--with-mips-fpu-mode',
|
|
|
|
action='store',
|
|
|
|
dest='mips_fpu_mode',
|
|
|
|
default='fp32',
|
2015-04-03 06:33:34 +02:00
|
|
|
choices=valid_mips_fpu,
|
|
|
|
help='MIPS FPU mode ({0}) [default: %default]'.format(
|
|
|
|
', '.join(valid_mips_fpu)))
|
2015-03-03 21:55:59 +01:00
|
|
|
|
|
|
|
parser.add_option('--with-mips-float-abi',
|
|
|
|
action='store',
|
|
|
|
dest='mips_float_abi',
|
|
|
|
default='hard',
|
2015-04-03 06:33:34 +02:00
|
|
|
choices=valid_mips_float_abi,
|
|
|
|
help='MIPS floating-point ABI ({0}) [default: %default]'.format(
|
|
|
|
', '.join(valid_mips_float_abi)))
|
2015-03-03 21:55:59 +01:00
|
|
|
|
2013-08-10 13:34:57 +02:00
|
|
|
parser.add_option('--with-dtrace',
|
|
|
|
action='store_true',
|
|
|
|
dest='with_dtrace',
|
|
|
|
help='build with DTrace (default is true on sunos)')
|
|
|
|
|
2015-01-22 13:35:16 +01:00
|
|
|
parser.add_option('--with-lttng',
|
|
|
|
action='store_true',
|
|
|
|
dest='with_lttng',
|
|
|
|
help='build with Lttng (Only available to Linux)')
|
|
|
|
|
2013-08-10 13:34:57 +02:00
|
|
|
parser.add_option('--with-etw',
|
|
|
|
action='store_true',
|
|
|
|
dest='with_etw',
|
|
|
|
help='build with ETW (default is true on Windows)')
|
|
|
|
|
2015-05-12 05:42:54 +02:00
|
|
|
intl_optgroup.add_option('--with-intl',
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
action='store',
|
2015-04-27 06:45:55 +02:00
|
|
|
dest='with_intl',
|
|
|
|
default='none',
|
|
|
|
choices=valid_intl_modes,
|
|
|
|
help='Intl mode (valid choices: {0}) [default: %default]'.format(
|
|
|
|
', '.join(valid_intl_modes)))
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
intl_optgroup.add_option('--with-icu-path',
|
2013-11-21 17:13:58 +01:00
|
|
|
action='store',
|
|
|
|
dest='with_icu_path',
|
|
|
|
help='Path to icu.gyp (ICU i18n, Chromium version only.)')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
intl_optgroup.add_option('--with-icu-locales',
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
action='store',
|
|
|
|
dest='with_icu_locales',
|
2015-04-03 06:33:34 +02:00
|
|
|
default='root,en',
|
|
|
|
help='Comma-separated list of locales for "small-icu". "root" is assumed. '
|
|
|
|
'[default: %default]')
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
intl_optgroup.add_option('--with-icu-source',
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
action='store',
|
|
|
|
dest='with_icu_source',
|
|
|
|
help='Intl mode: optional local path to icu/ dir, or path/URL of icu source archive.')
|
|
|
|
|
2015-04-27 06:45:55 +02:00
|
|
|
intl_optgroup.add_option('--download',
|
|
|
|
action='store',
|
|
|
|
dest='download_list',
|
|
|
|
help=nodedownload.help())
|
|
|
|
|
|
|
|
parser.add_option_group(intl_optgroup)
|
|
|
|
|
2013-08-10 13:34:57 +02:00
|
|
|
parser.add_option('--with-perfctr',
|
|
|
|
action='store_true',
|
|
|
|
dest='with_perfctr',
|
|
|
|
help='build with performance counters (default is true on Windows)')
|
|
|
|
|
|
|
|
parser.add_option('--without-dtrace',
|
|
|
|
action='store_true',
|
|
|
|
dest='without_dtrace',
|
|
|
|
help='build without DTrace')
|
|
|
|
|
|
|
|
parser.add_option('--without-etw',
|
|
|
|
action='store_true',
|
|
|
|
dest='without_etw',
|
|
|
|
help='build without ETW')
|
|
|
|
|
|
|
|
parser.add_option('--without-npm',
|
|
|
|
action='store_true',
|
|
|
|
dest='without_npm',
|
|
|
|
help='don\'t install the bundled npm package manager')
|
|
|
|
|
|
|
|
parser.add_option('--without-perfctr',
|
|
|
|
action='store_true',
|
|
|
|
dest='without_perfctr',
|
|
|
|
help='build without performance counters')
|
|
|
|
|
2015-05-08 20:56:13 +02:00
|
|
|
# Dummy option for backwards compatibility
|
2015-01-24 01:06:07 +01:00
|
|
|
parser.add_option('--with-snapshot',
|
|
|
|
action='store_true',
|
2015-05-08 20:56:13 +02:00
|
|
|
dest='unused_with_snapshot',
|
2015-01-24 01:06:07 +01:00
|
|
|
help=optparse.SUPPRESS_HELP)
|
|
|
|
|
2013-08-10 13:34:57 +02:00
|
|
|
parser.add_option('--without-snapshot',
|
|
|
|
action='store_true',
|
2015-05-08 20:56:13 +02:00
|
|
|
dest='without_snapshot',
|
2015-01-24 01:06:07 +01:00
|
|
|
help=optparse.SUPPRESS_HELP)
|
2013-08-10 13:34:57 +02:00
|
|
|
|
|
|
|
parser.add_option('--without-ssl',
|
|
|
|
action='store_true',
|
|
|
|
dest='without_ssl',
|
|
|
|
help='build without SSL')
|
|
|
|
|
|
|
|
parser.add_option('--xcode',
|
|
|
|
action='store_true',
|
|
|
|
dest='use_xcode',
|
|
|
|
help='generate build files for use with xcode')
|
2012-12-21 02:56:47 +01:00
|
|
|
|
2015-04-04 16:04:49 +02:00
|
|
|
parser.add_option('--enable-static',
|
|
|
|
action='store_true',
|
|
|
|
dest='enable_static',
|
|
|
|
help='build as static library')
|
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
(options, args) = parser.parse_args()
|
|
|
|
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
# set up auto-download list
|
|
|
|
auto_downloads = nodedownload.parse(options.download_list)
|
2011-11-15 04:02:44 +01:00
|
|
|
|
2015-01-24 01:06:07 +01:00
|
|
|
|
|
|
|
def warn(msg):
|
2015-01-28 17:46:19 +01:00
|
|
|
warn.warned = True
|
|
|
|
prefix = '\033[1m\033[93mWARNING\033[0m' if os.isatty(1) else 'WARNING'
|
2015-01-24 01:06:07 +01:00
|
|
|
print('%s: %s' % (prefix, msg))
|
|
|
|
|
2015-01-28 17:46:19 +01:00
|
|
|
# track if warnings occured
|
|
|
|
warn.warned = False
|
2015-01-24 01:06:07 +01:00
|
|
|
|
2011-11-29 16:27:52 +01:00
|
|
|
def b(value):
|
|
|
|
"""Returns the string 'true' if value is truthy, 'false' otherwise."""
|
|
|
|
if value:
|
|
|
|
return 'true'
|
|
|
|
else:
|
|
|
|
return 'false'
|
|
|
|
|
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
def pkg_config(pkg):
|
|
|
|
cmd = os.popen('pkg-config --libs %s' % pkg, 'r')
|
|
|
|
libs = cmd.readline().strip()
|
|
|
|
ret = cmd.close()
|
|
|
|
if (ret): return None
|
|
|
|
|
|
|
|
cmd = os.popen('pkg-config --cflags %s' % pkg, 'r')
|
|
|
|
cflags = cmd.readline().strip()
|
|
|
|
ret = cmd.close()
|
|
|
|
if (ret): return None
|
|
|
|
|
|
|
|
return (libs, cflags)
|
|
|
|
|
|
|
|
|
2015-01-15 22:36:38 +01:00
|
|
|
def try_check_compiler(cc, lang):
|
|
|
|
try:
|
|
|
|
proc = subprocess.Popen(shlex.split(cc) + ['-E', '-P', '-x', lang, '-'],
|
|
|
|
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
|
|
except OSError:
|
|
|
|
return (False, False, '', '')
|
|
|
|
|
|
|
|
proc.stdin.write('__clang__ __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__ '
|
|
|
|
'__clang_major__ __clang_minor__ __clang_patchlevel__')
|
|
|
|
|
|
|
|
values = (proc.communicate()[0].split() + ['0'] * 7)[0:7]
|
|
|
|
is_clang = values[0] == '1'
|
|
|
|
gcc_version = '%s.%s.%s' % tuple(values[1:1+3])
|
|
|
|
clang_version = '%s.%s.%s' % tuple(values[4:4+3])
|
|
|
|
|
|
|
|
return (True, is_clang, clang_version, gcc_version)
|
|
|
|
|
|
|
|
|
2015-03-31 07:16:10 +02:00
|
|
|
#
|
|
|
|
# The version of asm compiler is needed for building openssl asm files.
|
|
|
|
# See deps/openssl/openssl.gypi for detail.
|
|
|
|
# Commands and reglar expressions to obtain its version number is taken from
|
|
|
|
# https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/sha/asm/sha512-x86_64.pl#L112-L129
|
|
|
|
#
|
|
|
|
def get_llvm_version(cc):
|
|
|
|
try:
|
|
|
|
proc = subprocess.Popen(shlex.split(cc) + ['-v'], stdin=subprocess.PIPE,
|
|
|
|
stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
|
|
except OSError:
|
2015-04-13 03:19:05 +02:00
|
|
|
print '''io.js configure error: No acceptable C compiler found!
|
2015-03-31 07:16:10 +02:00
|
|
|
|
|
|
|
Please make sure you have a C compiler installed on your system and/or
|
|
|
|
consider adjusting the CC environment variable if you installed
|
|
|
|
it in a non-standard prefix.
|
|
|
|
'''
|
|
|
|
sys.exit()
|
|
|
|
|
|
|
|
match = re.search(r"(^clang version|based on LLVM) ([3-9]\.[0-9]+)",
|
|
|
|
proc.communicate()[1])
|
|
|
|
|
|
|
|
if match:
|
|
|
|
return match.group(2)
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
def get_gas_version(cc):
|
|
|
|
try:
|
|
|
|
proc = subprocess.Popen(shlex.split(cc) + ['-Wa,-v', '-c', '-o',
|
|
|
|
'/dev/null', '-x',
|
|
|
|
'assembler', '/dev/null'],
|
|
|
|
stdin=subprocess.PIPE, stderr=subprocess.PIPE,
|
|
|
|
stdout=subprocess.PIPE)
|
|
|
|
except OSError:
|
2015-04-13 03:19:05 +02:00
|
|
|
print '''io.js configure error: No acceptable C compiler found!
|
2015-03-31 07:16:10 +02:00
|
|
|
|
|
|
|
Please make sure you have a C compiler installed on your system and/or
|
|
|
|
consider adjusting the CC environment variable if you installed
|
|
|
|
it in a non-standard prefix.
|
|
|
|
'''
|
|
|
|
sys.exit()
|
|
|
|
|
|
|
|
match = re.match(r"GNU assembler version ([2-9]\.[0-9]+)",
|
|
|
|
proc.communicate()[1])
|
|
|
|
|
|
|
|
if match:
|
|
|
|
return match.group(1)
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
2015-01-15 22:36:38 +01:00
|
|
|
# Note: Apple clang self-reports as clang 4.2.0 and gcc 4.2.1. It passes
|
|
|
|
# the version check more by accident than anything else but a more rigorous
|
|
|
|
# check involves checking the build number against a whitelist. I'm not
|
|
|
|
# quite prepared to go that far yet.
|
2015-03-31 07:16:10 +02:00
|
|
|
def check_compiler(o):
|
2015-01-15 22:36:38 +01:00
|
|
|
if sys.platform == 'win32':
|
|
|
|
return
|
|
|
|
|
|
|
|
ok, is_clang, clang_version, gcc_version = try_check_compiler(CXX, 'c++')
|
|
|
|
if not ok:
|
|
|
|
warn('failed to autodetect C++ compiler version (CXX=%s)' % CXX)
|
|
|
|
elif clang_version < '3.4.0' if is_clang else gcc_version < '4.8.0':
|
|
|
|
warn('C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=%s)' % CXX)
|
|
|
|
|
|
|
|
ok, is_clang, clang_version, gcc_version = try_check_compiler(CC, 'c')
|
|
|
|
if not ok:
|
|
|
|
warn('failed to autodetect C compiler version (CC=%s)' % CC)
|
|
|
|
elif not is_clang and gcc_version < '4.2.0':
|
|
|
|
# clang 3.2 is a little white lie because any clang version will probably
|
|
|
|
# do for the C bits. However, we might as well encourage people to upgrade
|
|
|
|
# to a version that is not completely ancient.
|
|
|
|
warn('C compiler too old, need gcc 4.2 or clang 3.2 (CC=%s)' % CC)
|
|
|
|
|
2015-03-31 07:16:10 +02:00
|
|
|
# Need llvm_version or gas_version when openssl asm files are compiled
|
|
|
|
if options.without_ssl or options.openssl_no_asm or options.shared_openssl:
|
|
|
|
return
|
|
|
|
|
|
|
|
if is_clang:
|
|
|
|
o['variables']['llvm_version'] = get_llvm_version(CC)
|
|
|
|
else:
|
|
|
|
o['variables']['gas_version'] = get_gas_version(CC)
|
|
|
|
|
2015-01-15 22:36:38 +01:00
|
|
|
|
2013-06-25 12:47:24 +02:00
|
|
|
def cc_macros():
|
|
|
|
"""Checks predefined macros using the CC command."""
|
2012-02-20 21:27:07 +01:00
|
|
|
|
2012-05-05 00:06:24 +02:00
|
|
|
try:
|
2013-06-25 12:47:24 +02:00
|
|
|
p = subprocess.Popen(shlex.split(CC) + ['-dM', '-E', '-'],
|
2012-05-05 00:06:24 +02:00
|
|
|
stdin=subprocess.PIPE,
|
|
|
|
stdout=subprocess.PIPE,
|
|
|
|
stderr=subprocess.PIPE)
|
|
|
|
except OSError:
|
2015-04-13 03:19:05 +02:00
|
|
|
print '''io.js configure error: No acceptable C compiler found!
|
2012-05-05 00:06:24 +02:00
|
|
|
|
|
|
|
Please make sure you have a C compiler installed on your system and/or
|
|
|
|
consider adjusting the CC environment variable if you installed
|
|
|
|
it in a non-standard prefix.
|
|
|
|
'''
|
|
|
|
sys.exit()
|
|
|
|
|
2012-02-20 21:27:07 +01:00
|
|
|
p.stdin.write('\n')
|
|
|
|
out = p.communicate()[0]
|
|
|
|
|
|
|
|
out = str(out).split('\n')
|
|
|
|
|
|
|
|
k = {}
|
|
|
|
for line in out:
|
|
|
|
lst = shlex.split(line)
|
|
|
|
if len(lst) > 2:
|
|
|
|
key = lst[1]
|
|
|
|
val = lst[2]
|
|
|
|
k[key] = val
|
2012-06-23 03:39:10 +02:00
|
|
|
return k
|
|
|
|
|
|
|
|
|
|
|
|
def is_arch_armv7():
|
|
|
|
"""Check for ARMv7 instructions"""
|
|
|
|
cc_macros_cache = cc_macros()
|
|
|
|
return ('__ARM_ARCH_7__' in cc_macros_cache or
|
|
|
|
'__ARM_ARCH_7A__' in cc_macros_cache or
|
|
|
|
'__ARM_ARCH_7R__' in cc_macros_cache or
|
2015-03-09 04:19:21 +01:00
|
|
|
'__ARM_ARCH_7M__' in cc_macros_cache or
|
|
|
|
'__ARM_ARCH_7S__' in cc_macros_cache)
|
2012-06-23 03:39:10 +02:00
|
|
|
|
|
|
|
|
2014-07-23 15:24:07 +02:00
|
|
|
def is_arch_armv6():
|
|
|
|
"""Check for ARMv6 instructions"""
|
|
|
|
cc_macros_cache = cc_macros()
|
|
|
|
return ('__ARM_ARCH_6__' in cc_macros_cache or
|
|
|
|
'__ARM_ARCH_6M__' in cc_macros_cache)
|
|
|
|
|
|
|
|
|
2013-04-19 14:54:21 +02:00
|
|
|
def is_arm_hard_float_abi():
|
2012-06-23 03:39:10 +02:00
|
|
|
"""Check for hardfloat or softfloat eabi on ARM"""
|
|
|
|
# GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
|
|
|
|
# the Floating Point ABI used (PCS stands for Procedure Call Standard).
|
|
|
|
# We use these as well as a couple of other defines to statically determine
|
|
|
|
# what FP ABI used.
|
|
|
|
|
2014-12-20 15:39:10 +01:00
|
|
|
return '__ARM_PCS_VFP' in cc_macros()
|
2012-06-23 03:39:10 +02:00
|
|
|
|
|
|
|
|
|
|
|
def host_arch_cc():
|
|
|
|
"""Host architecture check using the CC command."""
|
|
|
|
|
2013-06-25 12:47:24 +02:00
|
|
|
k = cc_macros()
|
2012-02-20 21:27:07 +01:00
|
|
|
|
|
|
|
matchup = {
|
2015-03-02 21:35:29 +01:00
|
|
|
'__aarch64__' : 'arm64',
|
2012-02-20 21:27:07 +01:00
|
|
|
'__arm__' : 'arm',
|
2015-03-02 21:35:29 +01:00
|
|
|
'__i386__' : 'ia32',
|
2013-06-12 17:47:10 +02:00
|
|
|
'__mips__' : 'mips',
|
2015-03-02 21:35:29 +01:00
|
|
|
'__x86_64__' : 'x64',
|
2012-02-13 14:28:43 +01:00
|
|
|
}
|
|
|
|
|
2012-02-20 21:27:07 +01:00
|
|
|
rtn = 'ia32' # default
|
|
|
|
|
|
|
|
for i in matchup:
|
|
|
|
if i in k and k[i] != '0':
|
|
|
|
rtn = matchup[i]
|
|
|
|
break
|
2012-02-13 14:28:43 +01:00
|
|
|
|
2012-02-20 21:27:07 +01:00
|
|
|
return rtn
|
2011-11-15 04:02:44 +01:00
|
|
|
|
|
|
|
|
2012-03-15 23:17:25 +01:00
|
|
|
def host_arch_win():
|
|
|
|
"""Host architecture check using environ vars (better way to do this?)"""
|
|
|
|
|
2014-07-01 09:48:28 +02:00
|
|
|
observed_arch = os.environ.get('PROCESSOR_ARCHITECTURE', 'x86')
|
|
|
|
arch = os.environ.get('PROCESSOR_ARCHITEW6432', observed_arch)
|
2012-03-15 23:17:25 +01:00
|
|
|
|
|
|
|
matchup = {
|
|
|
|
'AMD64' : 'x64',
|
|
|
|
'x86' : 'ia32',
|
|
|
|
'arm' : 'arm',
|
2013-06-12 17:47:10 +02:00
|
|
|
'mips' : 'mips',
|
2012-03-15 23:17:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return matchup.get(arch, 'ia32')
|
|
|
|
|
|
|
|
|
2012-09-19 14:37:08 +02:00
|
|
|
def configure_arm(o):
|
|
|
|
if options.arm_float_abi:
|
2013-04-19 14:54:21 +02:00
|
|
|
arm_float_abi = options.arm_float_abi
|
2013-12-07 20:49:49 +01:00
|
|
|
elif is_arm_hard_float_abi():
|
|
|
|
arm_float_abi = 'hard'
|
2012-09-19 14:37:08 +02:00
|
|
|
else:
|
2014-01-08 22:08:29 +01:00
|
|
|
arm_float_abi = 'default'
|
2014-07-23 15:24:07 +02:00
|
|
|
|
|
|
|
if is_arch_armv7():
|
2015-01-22 21:51:38 +01:00
|
|
|
o['variables']['arm_fpu'] = 'vfpv3'
|
2014-07-23 15:24:07 +02:00
|
|
|
o['variables']['arm_version'] = '7'
|
|
|
|
else:
|
2015-01-22 21:51:38 +01:00
|
|
|
o['variables']['arm_fpu'] = 'vfpv2'
|
|
|
|
o['variables']['arm_version'] = '6' if is_arch_armv6() else 'default'
|
2014-07-23 15:24:07 +02:00
|
|
|
|
2013-04-19 14:54:21 +02:00
|
|
|
o['variables']['arm_thumb'] = 0 # -marm
|
|
|
|
o['variables']['arm_float_abi'] = arm_float_abi
|
2012-09-19 14:37:08 +02:00
|
|
|
|
2015-03-09 04:19:21 +01:00
|
|
|
if options.dest_os == 'android':
|
|
|
|
o['variables']['arm_fpu'] = 'vfpv3'
|
|
|
|
o['variables']['arm_version'] = '7'
|
|
|
|
|
2012-09-19 14:37:08 +02:00
|
|
|
|
2015-03-03 21:55:59 +01:00
|
|
|
def configure_mips(o):
|
|
|
|
can_use_fpu_instructions = (options.mips_float_abi != 'soft')
|
|
|
|
o['variables']['v8_can_use_fpu_instructions'] = b(can_use_fpu_instructions)
|
|
|
|
o['variables']['v8_use_mips_abi_hardfloat'] = b(can_use_fpu_instructions)
|
|
|
|
o['variables']['mips_arch_variant'] = options.mips_arch_variant
|
|
|
|
o['variables']['mips_fpu_mode'] = options.mips_fpu_mode
|
|
|
|
|
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
def configure_node(o):
|
2013-05-08 14:10:07 +02:00
|
|
|
if options.dest_os == 'android':
|
2013-08-02 11:50:45 +02:00
|
|
|
o['variables']['OS'] = 'android'
|
2012-06-26 16:34:07 +02:00
|
|
|
o['variables']['node_prefix'] = os.path.expanduser(options.prefix or '')
|
2011-12-17 09:09:14 +01:00
|
|
|
o['variables']['node_install_npm'] = b(not options.without_npm)
|
2012-01-18 10:37:02 +01:00
|
|
|
o['default_configuration'] = 'Debug' if options.debug else 'Release'
|
2011-11-15 04:02:44 +01:00
|
|
|
|
2012-07-12 16:29:43 +02:00
|
|
|
host_arch = host_arch_win() if os.name == 'nt' else host_arch_cc()
|
|
|
|
target_arch = options.dest_cpu or host_arch
|
|
|
|
o['variables']['host_arch'] = host_arch
|
|
|
|
o['variables']['target_arch'] = target_arch
|
|
|
|
|
2015-05-08 20:56:13 +02:00
|
|
|
cross_compiling = target_arch != host_arch
|
|
|
|
want_snapshots = not options.without_snapshot
|
|
|
|
o['variables']['want_separate_host_toolset'] = int(
|
|
|
|
cross_compiling and want_snapshots)
|
2014-05-16 01:11:51 +02:00
|
|
|
|
2012-07-12 16:29:43 +02:00
|
|
|
if target_arch == 'arm':
|
2012-09-19 14:37:08 +02:00
|
|
|
configure_arm(o)
|
2015-03-03 21:55:59 +01:00
|
|
|
elif target_arch in ('mips', 'mipsel'):
|
|
|
|
configure_mips(o)
|
2012-06-26 02:54:11 +02:00
|
|
|
|
2014-03-02 20:54:19 +01:00
|
|
|
if flavor in ('solaris', 'mac', 'linux', 'freebsd'):
|
2013-10-28 20:18:59 +01:00
|
|
|
use_dtrace = not options.without_dtrace
|
2014-03-02 20:54:19 +01:00
|
|
|
# Don't enable by default on linux and freebsd
|
|
|
|
if flavor in ('linux', 'freebsd'):
|
|
|
|
use_dtrace = options.with_dtrace
|
|
|
|
|
2013-10-28 20:18:59 +01:00
|
|
|
if flavor == 'linux':
|
|
|
|
if options.systemtap_includes:
|
|
|
|
o['include_dirs'] += [options.systemtap_includes]
|
|
|
|
o['variables']['node_use_dtrace'] = b(use_dtrace)
|
|
|
|
o['variables']['uv_use_dtrace'] = b(use_dtrace)
|
2013-04-17 01:18:07 +02:00
|
|
|
o['variables']['uv_parent_path'] = '/deps/uv/'
|
2012-11-21 00:27:22 +01:00
|
|
|
elif options.with_dtrace:
|
2012-10-10 00:09:07 +02:00
|
|
|
raise Exception(
|
2013-05-21 18:26:42 +02:00
|
|
|
'DTrace is currently only supported on SunOS, MacOS or Linux systems.')
|
2012-03-28 19:26:10 +02:00
|
|
|
else:
|
|
|
|
o['variables']['node_use_dtrace'] = 'false'
|
|
|
|
|
2015-01-22 13:35:16 +01:00
|
|
|
# Enable Lttng if --with-lttng was defined. Use logic similar to
|
|
|
|
# ETW for windows. Lttng is only available on the Linux platform.
|
|
|
|
if flavor == 'linux':
|
|
|
|
o['variables']['node_use_lttng'] = b(options.with_lttng)
|
|
|
|
elif options.with_lttng:
|
|
|
|
raise Exception('lttng is only supported on Linux.')
|
|
|
|
else:
|
|
|
|
o['variables']['node_use_lttng'] = 'false'
|
|
|
|
|
2012-06-30 04:27:29 +02:00
|
|
|
if options.no_ifaddrs:
|
|
|
|
o['defines'] += ['SUNOS_NO_IFADDRS']
|
2011-11-15 04:02:44 +01:00
|
|
|
|
2012-06-12 01:23:17 +02:00
|
|
|
# By default, enable ETW on Windows.
|
2013-05-21 18:26:42 +02:00
|
|
|
if flavor == 'win':
|
2013-08-02 11:50:45 +02:00
|
|
|
o['variables']['node_use_etw'] = b(not options.without_etw)
|
2012-11-21 00:27:22 +01:00
|
|
|
elif options.with_etw:
|
2012-06-12 01:23:17 +02:00
|
|
|
raise Exception('ETW is only supported on Windows.')
|
|
|
|
else:
|
|
|
|
o['variables']['node_use_etw'] = 'false'
|
|
|
|
|
2012-11-21 00:27:22 +01:00
|
|
|
# By default, enable Performance counters on Windows.
|
2013-05-21 18:26:42 +02:00
|
|
|
if flavor == 'win':
|
2013-08-02 11:50:45 +02:00
|
|
|
o['variables']['node_use_perfctr'] = b(not options.without_perfctr)
|
2012-11-21 00:27:22 +01:00
|
|
|
elif options.with_perfctr:
|
|
|
|
raise Exception('Performance counter is only supported on Windows.')
|
|
|
|
else:
|
|
|
|
o['variables']['node_use_perfctr'] = 'false'
|
|
|
|
|
2012-12-27 05:35:00 +01:00
|
|
|
if options.tag:
|
|
|
|
o['variables']['node_tag'] = '-' + options.tag
|
|
|
|
else:
|
|
|
|
o['variables']['node_tag'] = ''
|
2012-12-21 02:56:47 +01:00
|
|
|
|
2014-03-26 21:30:49 +01:00
|
|
|
if options.v8_options:
|
2014-03-31 14:22:49 +02:00
|
|
|
o['variables']['node_v8_options'] = options.v8_options.replace('"', '\\"')
|
2014-03-26 21:30:49 +01:00
|
|
|
|
2015-04-04 16:04:49 +02:00
|
|
|
if options.enable_static:
|
|
|
|
o['variables']['node_target_type'] = 'static_library'
|
|
|
|
|
2012-06-12 01:23:17 +02:00
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
def configure_libz(o):
|
2012-02-27 00:02:21 +01:00
|
|
|
o['variables']['node_shared_zlib'] = b(options.shared_zlib)
|
|
|
|
|
2015-04-17 21:04:46 +02:00
|
|
|
if options.shared_zlib:
|
2015-04-03 06:33:34 +02:00
|
|
|
o['libraries'] += ['-l%s' % options.shared_zlib_libname]
|
2012-02-27 00:02:21 +01:00
|
|
|
if options.shared_zlib_libpath:
|
|
|
|
o['libraries'] += ['-L%s' % options.shared_zlib_libpath]
|
|
|
|
if options.shared_zlib_includes:
|
|
|
|
o['include_dirs'] += [options.shared_zlib_includes]
|
2011-11-15 04:02:44 +01:00
|
|
|
|
|
|
|
|
2012-10-23 15:01:26 +02:00
|
|
|
def configure_http_parser(o):
|
|
|
|
o['variables']['node_shared_http_parser'] = b(options.shared_http_parser)
|
2015-04-17 21:04:46 +02:00
|
|
|
|
|
|
|
if options.shared_http_parser:
|
2015-04-03 06:33:34 +02:00
|
|
|
o['libraries'] += ['-l%s' % options.shared_http_parser_libname]
|
2012-10-23 15:01:26 +02:00
|
|
|
if options.shared_http_parser_libpath:
|
|
|
|
o['libraries'] += ['-L%s' % options.shared_http_parser_libpath]
|
|
|
|
if options.shared_http_parser_includes:
|
|
|
|
o['include_dirs'] += [options.shared_http_parser_includes]
|
|
|
|
|
|
|
|
|
2012-10-24 01:54:22 +02:00
|
|
|
def configure_libuv(o):
|
|
|
|
o['variables']['node_shared_libuv'] = b(options.shared_libuv)
|
|
|
|
|
2015-04-17 21:04:46 +02:00
|
|
|
if options.shared_libuv:
|
2015-04-03 06:33:34 +02:00
|
|
|
o['libraries'] += ['-l%s' % options.shared_libuv_libname]
|
2012-10-24 01:54:22 +02:00
|
|
|
if options.shared_libuv_libpath:
|
|
|
|
o['libraries'] += ['-L%s' % options.shared_libuv_libpath]
|
2014-02-27 00:24:03 +01:00
|
|
|
else:
|
|
|
|
o['variables']['uv_library'] = 'static_library'
|
|
|
|
|
2012-10-24 01:54:22 +02:00
|
|
|
if options.shared_libuv_includes:
|
|
|
|
o['include_dirs'] += [options.shared_libuv_includes]
|
|
|
|
|
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
def configure_v8(o):
|
2013-11-10 02:02:27 +01:00
|
|
|
o['variables']['v8_enable_gdbjit'] = 1 if options.gdb else 0
|
|
|
|
o['variables']['v8_no_strict_aliasing'] = 1 # Work around compiler bugs.
|
|
|
|
o['variables']['v8_optimized_debug'] = 0 # Compile with -O0 in debug builds.
|
|
|
|
o['variables']['v8_random_seed'] = 0 # Use a random seed for hash tables.
|
2015-05-08 20:56:13 +02:00
|
|
|
o['variables']['v8_use_snapshot'] = 0 if options.without_snapshot else 1
|
2011-11-15 04:02:44 +01:00
|
|
|
|
|
|
|
def configure_openssl(o):
|
2011-11-29 16:27:52 +01:00
|
|
|
o['variables']['node_use_openssl'] = b(not options.without_ssl)
|
2012-06-30 04:27:29 +02:00
|
|
|
o['variables']['node_shared_openssl'] = b(options.shared_openssl)
|
2014-09-02 13:53:36 +02:00
|
|
|
o['variables']['openssl_no_asm'] = (
|
|
|
|
1 if options.openssl_no_asm else 0)
|
2011-11-15 04:02:44 +01:00
|
|
|
|
|
|
|
if options.without_ssl:
|
|
|
|
return
|
|
|
|
|
2012-06-30 04:27:29 +02:00
|
|
|
if options.shared_openssl:
|
|
|
|
(libs, cflags) = pkg_config('openssl') or ('-lssl -lcrypto', '')
|
2011-11-15 04:02:44 +01:00
|
|
|
|
2015-04-03 06:33:34 +02:00
|
|
|
libnames = options.shared_openssl_libname.split(',')
|
|
|
|
o['libraries'] += ['-l%s' % s for s in libnames]
|
|
|
|
|
2012-06-30 04:27:29 +02:00
|
|
|
if options.shared_openssl_libpath:
|
|
|
|
o['libraries'] += ['-L%s' % options.shared_openssl_libpath]
|
|
|
|
|
|
|
|
if options.shared_openssl_includes:
|
|
|
|
o['include_dirs'] += [options.shared_openssl_includes]
|
2011-12-17 00:00:23 +01:00
|
|
|
else:
|
|
|
|
o['cflags'] += cflags.split()
|
2011-11-15 04:02:44 +01:00
|
|
|
|
|
|
|
|
2014-08-23 23:01:06 +02:00
|
|
|
def configure_fullystatic(o):
|
|
|
|
if options.fully_static:
|
|
|
|
o['libraries'] += ['-static']
|
|
|
|
if flavor == 'mac':
|
|
|
|
print("Generation of static executable will not work on OSX "
|
|
|
|
"when using default compilation environment")
|
|
|
|
|
|
|
|
|
2012-12-21 09:06:21 +01:00
|
|
|
def configure_winsdk(o):
|
2013-05-21 18:26:42 +02:00
|
|
|
if flavor != 'win':
|
2012-12-21 09:06:21 +01:00
|
|
|
return
|
|
|
|
|
2013-08-02 11:50:45 +02:00
|
|
|
winsdk_dir = os.environ.get('WindowsSdkDir')
|
2013-01-03 23:36:04 +01:00
|
|
|
|
|
|
|
if winsdk_dir and os.path.isfile(winsdk_dir + '\\bin\\ctrpp.exe'):
|
2013-08-02 11:50:45 +02:00
|
|
|
print('Found ctrpp in WinSDK--will build generated files '
|
|
|
|
'into tools/msvs/genfiles.')
|
2013-01-03 23:36:04 +01:00
|
|
|
o['variables']['node_has_winsdk'] = 'true'
|
2012-12-21 09:06:21 +01:00
|
|
|
return
|
|
|
|
|
2013-08-02 11:50:45 +02:00
|
|
|
print('ctrpp not found in WinSDK path--using pre-gen files '
|
|
|
|
'from tools/msvs/genfiles.')
|
2012-12-21 09:06:21 +01:00
|
|
|
|
2014-10-04 02:42:37 +02:00
|
|
|
def write(filename, data):
|
|
|
|
filename = os.path.join(root_dir, filename)
|
|
|
|
print 'creating ', filename
|
|
|
|
f = open(filename, 'w+')
|
|
|
|
f.write(data)
|
|
|
|
|
|
|
|
do_not_edit = '# Do not edit. Generated by the configure script.\n'
|
|
|
|
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
def glob_to_var(dir_base, dir_sub):
|
|
|
|
list = []
|
|
|
|
dir_all = os.path.join(dir_base, dir_sub)
|
|
|
|
files = os.walk(dir_all)
|
|
|
|
for ent in files:
|
|
|
|
(path, dirs, files) = ent
|
|
|
|
for file in files:
|
|
|
|
if file.endswith('.cpp') or file.endswith('.c') or file.endswith('.h'):
|
|
|
|
list.append('%s/%s' % (dir_sub, file))
|
|
|
|
break
|
|
|
|
return list
|
|
|
|
|
|
|
|
def configure_intl(o):
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
icus = [
|
|
|
|
{
|
|
|
|
'url': 'http://download.icu-project.org/files/icu4c/54.1/icu4c-54_1-src.zip',
|
|
|
|
# from https://ssl.icu-project.org/files/icu4c/54.1/icu4c-src-54_1.md5:
|
|
|
|
'md5': '6b89d60e2f0e140898ae4d7f72323bca',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
def icu_download(path):
|
|
|
|
# download ICU, if needed
|
|
|
|
for icu in icus:
|
|
|
|
url = icu['url']
|
|
|
|
md5 = icu['md5']
|
|
|
|
local = url.split('/')[-1]
|
|
|
|
targetfile = os.path.join(root_dir, 'deps', local)
|
|
|
|
if not os.path.isfile(targetfile):
|
|
|
|
if nodedownload.candownload(auto_downloads, "icu"):
|
|
|
|
nodedownload.retrievefile(url, targetfile)
|
|
|
|
else:
|
|
|
|
print ' Re-using existing %s' % targetfile
|
|
|
|
if os.path.isfile(targetfile):
|
|
|
|
sys.stdout.write(' Checking file integrity with MD5:\r')
|
|
|
|
gotmd5 = nodedownload.md5sum(targetfile)
|
|
|
|
print ' MD5: %s %s' % (gotmd5, targetfile)
|
|
|
|
if (md5 == gotmd5):
|
|
|
|
return targetfile
|
|
|
|
else:
|
|
|
|
print ' Expected: %s *MISMATCH*' % md5
|
|
|
|
print '\n ** Corrupted ZIP? Delete %s to retry download.\n' % targetfile
|
|
|
|
return None
|
2014-10-04 02:42:37 +02:00
|
|
|
icu_config = {
|
|
|
|
'variables': {}
|
|
|
|
}
|
|
|
|
icu_config_name = 'icu_config.gypi'
|
|
|
|
def write_config(data, name):
|
|
|
|
return
|
|
|
|
|
|
|
|
# write an empty file to start with
|
|
|
|
write(icu_config_name, do_not_edit +
|
|
|
|
pprint.pformat(icu_config, indent=2) + '\n')
|
|
|
|
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
# always set icu_small, node.gyp depends on it being defined.
|
|
|
|
o['variables']['icu_small'] = b(False)
|
|
|
|
|
|
|
|
with_intl = options.with_intl
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
with_icu_source = options.with_icu_source
|
2013-11-21 17:13:58 +01:00
|
|
|
have_icu_path = bool(options.with_icu_path)
|
2015-04-27 06:45:55 +02:00
|
|
|
if have_icu_path and with_intl != 'none':
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
print 'Error: Cannot specify both --with-icu-path and --with-intl'
|
|
|
|
sys.exit(1)
|
|
|
|
elif have_icu_path:
|
|
|
|
# Chromium .gyp mode: --with-icu-path
|
|
|
|
o['variables']['v8_enable_i18n_support'] = 1
|
|
|
|
# use the .gyp given
|
2013-11-21 17:13:58 +01:00
|
|
|
o['variables']['icu_gyp_path'] = options.with_icu_path
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
return
|
|
|
|
# --with-intl=<with_intl>
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
# set the default
|
2015-04-03 06:33:34 +02:00
|
|
|
if with_intl in (None, 'none'):
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
o['variables']['v8_enable_i18n_support'] = 0
|
|
|
|
return # no Intl
|
|
|
|
elif with_intl == 'small-icu':
|
|
|
|
# small ICU (English only)
|
|
|
|
o['variables']['v8_enable_i18n_support'] = 1
|
|
|
|
o['variables']['icu_small'] = b(True)
|
2015-04-03 06:33:34 +02:00
|
|
|
locs = set(options.with_icu_locales.split(','))
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
locs.add('root') # must have root
|
|
|
|
o['variables']['icu_locales'] = string.join(locs,',')
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
elif with_intl == 'full-icu':
|
|
|
|
# full ICU
|
|
|
|
o['variables']['v8_enable_i18n_support'] = 1
|
|
|
|
elif with_intl == 'system-icu':
|
|
|
|
# ICU from pkg-config.
|
|
|
|
o['variables']['v8_enable_i18n_support'] = 1
|
|
|
|
pkgicu = pkg_config('icu-i18n')
|
|
|
|
if not pkgicu:
|
|
|
|
print 'Error: could not load pkg-config data for "icu-i18n".'
|
|
|
|
print 'See above errors or the README.md.'
|
|
|
|
sys.exit(1)
|
|
|
|
(libs, cflags) = pkgicu
|
|
|
|
o['libraries'] += libs.split()
|
|
|
|
o['cflags'] += cflags.split()
|
|
|
|
# use the "system" .gyp
|
|
|
|
o['variables']['icu_gyp_path'] = 'tools/icu/icu-system.gyp'
|
|
|
|
return
|
|
|
|
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
# this is just the 'deps' dir. Used for unpacking.
|
|
|
|
icu_parent_path = os.path.join(root_dir, 'deps')
|
|
|
|
|
|
|
|
# The full path to the ICU source directory.
|
|
|
|
icu_full_path = os.path.join(icu_parent_path, 'icu')
|
|
|
|
|
|
|
|
# icu-tmp is used to download and unpack the ICU tarball.
|
|
|
|
icu_tmp_path = os.path.join(icu_parent_path, 'icu-tmp')
|
|
|
|
|
|
|
|
# --with-icu-source processing
|
|
|
|
# first, check that they didn't pass --with-icu-source=deps/icu
|
|
|
|
if with_icu_source and os.path.abspath(icu_full_path) == os.path.abspath(with_icu_source):
|
|
|
|
print 'Ignoring redundant --with-icu-source=%s' % (with_icu_source)
|
|
|
|
with_icu_source = None
|
|
|
|
# if with_icu_source is still set, try to use it.
|
|
|
|
if with_icu_source:
|
|
|
|
if os.path.isdir(icu_full_path):
|
|
|
|
print 'Deleting old ICU source: %s' % (icu_full_path)
|
|
|
|
shutil.rmtree(icu_full_path)
|
|
|
|
# now, what path was given?
|
|
|
|
if os.path.isdir(with_icu_source):
|
|
|
|
# it's a path. Copy it.
|
|
|
|
print '%s -> %s' % (with_icu_source, icu_full_path)
|
|
|
|
shutil.copytree(with_icu_source, icu_full_path)
|
|
|
|
else:
|
|
|
|
# could be file or URL.
|
|
|
|
# Set up temporary area
|
|
|
|
if os.path.isdir(icu_tmp_path):
|
|
|
|
shutil.rmtree(icu_tmp_path)
|
|
|
|
os.mkdir(icu_tmp_path)
|
|
|
|
icu_tarball = None
|
|
|
|
if os.path.isfile(with_icu_source):
|
|
|
|
# it's a file. Try to unpack it.
|
|
|
|
icu_tarball = with_icu_source
|
|
|
|
else:
|
|
|
|
# Can we download it?
|
|
|
|
local = os.path.join(icu_tmp_path, with_icu_source.split('/')[-1]) # local part
|
|
|
|
icu_tarball = nodedownload.retrievefile(with_icu_source, local)
|
|
|
|
# continue with "icu_tarball"
|
|
|
|
nodedownload.unpack(icu_tarball, icu_tmp_path)
|
|
|
|
# Did it unpack correctly? Should contain 'icu'
|
|
|
|
tmp_icu = os.path.join(icu_tmp_path, 'icu')
|
|
|
|
if os.path.isdir(tmp_icu):
|
|
|
|
os.rename(tmp_icu, icu_full_path)
|
|
|
|
shutil.rmtree(icu_tmp_path)
|
|
|
|
else:
|
|
|
|
print ' Error: --with-icu-source=%s did not result in an "icu" dir.' % with_icu_source
|
|
|
|
shutil.rmtree(icu_tmp_path)
|
|
|
|
sys.exit(1)
|
|
|
|
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
# ICU mode. (icu-generic.gyp)
|
|
|
|
o['variables']['icu_gyp_path'] = 'tools/icu/icu-generic.gyp'
|
|
|
|
# ICU source dir relative to root
|
|
|
|
o['variables']['icu_path'] = icu_full_path
|
|
|
|
if not os.path.isdir(icu_full_path):
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
print '* ECMA-402 (Intl) support didn\'t find ICU in %s..' % (icu_full_path)
|
|
|
|
# can we download (or find) a zipfile?
|
|
|
|
localzip = icu_download(icu_full_path)
|
|
|
|
if localzip:
|
|
|
|
nodedownload.unpack(localzip, icu_parent_path)
|
|
|
|
if not os.path.isdir(icu_full_path):
|
|
|
|
print ' Cannot build Intl without ICU in %s.' % (icu_full_path)
|
|
|
|
print ' (Fix, or disable with "--with-intl=none" )'
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
sys.exit(1)
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
else:
|
|
|
|
print '* Using ICU in %s' % (icu_full_path)
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
# Now, what version of ICU is it? We just need the "major", such as 54.
|
|
|
|
# uvernum.h contains it as a #define.
|
|
|
|
uvernum_h = os.path.join(icu_full_path, 'source/common/unicode/uvernum.h')
|
|
|
|
if not os.path.isfile(uvernum_h):
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
print ' Error: could not load %s - is ICU installed?' % uvernum_h
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
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:
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
print ' Could not read U_ICU_VERSION_SHORT version from %s' % uvernum_h
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
sys.exit(1)
|
|
|
|
icu_endianness = sys.byteorder[0]; # TODO(srl295): EBCDIC should be 'e'
|
|
|
|
o['variables']['icu_ver_major'] = icu_ver_major
|
|
|
|
o['variables']['icu_endianness'] = icu_endianness
|
|
|
|
icu_data_file_l = 'icudt%s%s.dat' % (icu_ver_major, 'l')
|
|
|
|
icu_data_file = 'icudt%s%s.dat' % (icu_ver_major, icu_endianness)
|
|
|
|
# relative to configure
|
|
|
|
icu_data_path = os.path.join(icu_full_path,
|
|
|
|
'source/data/in',
|
|
|
|
icu_data_file_l)
|
|
|
|
# relative to dep..
|
|
|
|
icu_data_in = os.path.join('../../deps/icu/source/data/in', icu_data_file_l)
|
|
|
|
if not os.path.isfile(icu_data_path) and icu_endianness != 'l':
|
|
|
|
# use host endianness
|
|
|
|
icu_data_path = os.path.join(icu_full_path,
|
|
|
|
'source/data/in',
|
|
|
|
icu_data_file)
|
|
|
|
# relative to dep..
|
|
|
|
icu_data_in = os.path.join('icu/source/data/in',
|
|
|
|
icu_data_file)
|
|
|
|
# this is the input '.dat' file to use .. icudt*.dat
|
|
|
|
# may be little-endian if from a icu-project.org tarball
|
|
|
|
o['variables']['icu_data_in'] = icu_data_in
|
|
|
|
# this is the icudt*.dat file which node will be using (platform endianness)
|
|
|
|
o['variables']['icu_data_file'] = icu_data_file
|
|
|
|
if not os.path.isfile(icu_data_path):
|
build: i18n: add icu config options
Make "--with-intl=none" the default and add "intl-none" option to
vcbuild.bat.
If icu data is missing print a warning unless either --download=all or
--download=icu is set. If set then automatically download, verify (MD5)
and unpack the ICU data if not already available.
There's a "list" of URLs being used, but right now only the first is
picked up. The logic works something like this:
* If there is no directory deps/icu,
* If no zip file (currently icu4c-54_1-src.zip),
* Download zip file (icu-project.org -> sf.net)
* Verify the MD5 sum of the zipfile
* If bad, print error and exit
* Unpack the zipfile into deps/icu
* If deps/icu now exists, use it, else fail with help text
Add the configuration option "--with-icu-source=..."
Usage:
* --with-icu-source=/path/to/my/other/icu
* --with-icu-source=/path/to/icu54.zip
* --with-icu-source=/path/to/icu54.tgz
* --with-icu-source=http://example.com/icu54.tar.bz2
Add the configuration option "--with-icu-locals=...". Allows choosing
which locales are used in the "small-icu" case.
Example:
configure --with-intl=small-icu --with-icu-locales=tlh,grc,nl
(Also note that as of this writing, neither Klingon nor Ancient Greek
are in upstream CLDR data. Serving suggestion only.)
Don't use hard coded ../../out paths on windows. This was suggested by
@misterdjules as it causes test failures. With this fix, "out" is no
longer created on windows and the following can run properly:
python tools/test.py simple
Reduce space by about 1MB with ICU 54 (over without this patch). Also
trims a few other source files, but only conditional on the exact ICU
version used. This is to future-proof - a file that is unneeded now may
be needed in future ICUs.
Also:
* Update distclean to remove icu related files
* Refactor some code into tools/configure.d/nodedownload.py
* Update docs
* Add test
PR-URL: https://github.com/joyent/node/pull/8719
Fixes: https://github.com/joyent/node/issues/7676#issuecomment-64704230
[trev.norris@gmail.com small change to test's whitespace and logic]
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-11-13 02:13:14 +01:00
|
|
|
print ' Error: ICU prebuilt data file %s does not exist.' % icu_data_path
|
|
|
|
print ' See the README.md.'
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
# .. and we're not about to build it from .gyp!
|
|
|
|
sys.exit(1)
|
|
|
|
# map from variable name to subdirs
|
|
|
|
icu_src = {
|
|
|
|
'stubdata': 'stubdata',
|
|
|
|
'common': 'common',
|
|
|
|
'i18n': 'i18n',
|
|
|
|
'io': 'io',
|
|
|
|
'tools': 'tools/toolutil',
|
|
|
|
'genccode': 'tools/genccode',
|
|
|
|
'genrb': 'tools/genrb',
|
|
|
|
'icupkg': 'tools/icupkg',
|
|
|
|
}
|
|
|
|
# this creates a variable icu_src_XXX for each of the subdirs
|
|
|
|
# with a list of the src files to use
|
|
|
|
for i in icu_src:
|
|
|
|
var = 'icu_src_%s' % i
|
|
|
|
path = '../../deps/icu/source/%s' % icu_src[i]
|
2014-10-04 02:42:37 +02:00
|
|
|
icu_config['variables'][var] = glob_to_var('tools/icu', path)
|
|
|
|
# write updated icu_config.gypi with a bunch of paths
|
|
|
|
write(icu_config_name, do_not_edit +
|
|
|
|
pprint.pformat(icu_config, indent=2) + '\n')
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
return # end of configure_intl
|
2013-11-21 17:13:58 +01:00
|
|
|
|
2015-03-31 07:16:10 +02:00
|
|
|
output = {
|
|
|
|
'variables': { 'python': sys.executable },
|
|
|
|
'include_dirs': [],
|
|
|
|
'libraries': [],
|
|
|
|
'defines': [],
|
|
|
|
'cflags': [],
|
|
|
|
}
|
|
|
|
|
2015-01-15 22:36:38 +01:00
|
|
|
# Print a warning when the compiler is too old.
|
2015-03-31 07:16:10 +02:00
|
|
|
check_compiler(output)
|
2015-01-15 22:36:38 +01:00
|
|
|
|
2013-05-21 18:26:42 +02:00
|
|
|
# determine the "flavor" (operating system) we're building for,
|
|
|
|
# leveraging gyp's GetFlavor function
|
2013-08-02 11:50:45 +02:00
|
|
|
flavor_params = {}
|
2013-05-21 18:26:42 +02:00
|
|
|
if (options.dest_os):
|
2013-08-02 11:50:45 +02:00
|
|
|
flavor_params['flavor'] = options.dest_os
|
|
|
|
flavor = GetFlavor(flavor_params)
|
2013-05-21 18:26:42 +02:00
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
configure_node(output)
|
|
|
|
configure_libz(output)
|
2012-10-23 15:01:26 +02:00
|
|
|
configure_http_parser(output)
|
2012-10-24 01:54:22 +02:00
|
|
|
configure_libuv(output)
|
2011-11-15 04:02:44 +01:00
|
|
|
configure_v8(output)
|
|
|
|
configure_openssl(output)
|
2012-12-21 09:06:21 +01:00
|
|
|
configure_winsdk(output)
|
build, i18n: improve Intl build, add "--with-intl"
The two main goals of this change are:
- To make it easier to build the Intl option using ICU (particularly,
using a newer ICU than v8/Chromium's version)
- To enable a much smaller ICU build with only English support The goal
here is to get node.js binaries built this way by default so that the
Intl API can be used. Additional data can be added at execution time
(see Readme and wiki)
More details are at https://github.com/joyent/node/pull/7719
In particular, this change adds the "--with-intl=" configure option to
provide more ways of building "Intl":
- "full-icu" picks up an ICU from deps/icu
- "small-icu" is similar, but builds only English
- "system-icu" uses pkg-config to find an installed ICU
- "none" does nothing (no Intl)
For Windows builds, the "full-icu" or "small-icu" options are added to
vcbuild.bat.
Note that the existing "--with-icu-path" option is not removed from
configure, but may not be used alongside the new option.
Wiki changes have already been made on
https://github.com/joyent/node/wiki/Installation
and a new page created at
https://github.com/joyent/node/wiki/Intl
(marked as provisional until this change lands.)
Summary of changes:
* README.md : doc updates
* .gitignore : added "deps/icu" as this is the location where ICU is
unpacked to.
* Makefile : added the tools/icu/* files to cpplint, but excluded a
problematic file.
* configure : added the "--with-intl" option mentioned above.
Calculate at config time the list of ICU source files to use and data
packaging options.
* node.gyp : add the new files src/node_i18n.cc/.h as well as ICU
linkage.
* src/node.cc : add call into
node::i18n::InitializeICUDirectory(icu_data_dir) as well as new
--icu-data-dir option and NODE_ICU_DATA env variable to configure ICU
data loading. This loading is only relevant in the "small"
configuration.
* src/node_i18n.cc : new source file for the above Initialize..
function, to setup ICU as needed.
* tools/icu : new directory with some tools needed for this build.
* tools/icu/icu-generic.gyp : new .gyp file that builds ICU in some new
ways, both on unix/mac and windows.
* tools/icu/icu-system.gyp : new .gyp file to build node against a
pkg-config detected ICU.
* tools/icu/icu_small.json : new config file for the "English-only" small
build.
* tools/icu/icutrim.py : new tool for trimming down ICU data. Reads the
above .json file.
* tools/icu/iculslocs.cc : new tool for repairing ICU data manifests
after trim operation.
* tools/icu/no-op.cc : dummy file to force .gyp into using a C++ linker.
* vcbuild.bat : added small-icu and full-icu options, to call into
configure.
* Fixed toolset dependencies, see
https://github.com/joyent/node/pull/7719#issuecomment-54641687
Note that because of a bug in gyp {CC,CXX}_host must also be set.
Otherwise gcc/g++ will be used by default for part of the build.
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
2014-09-05 07:03:24 +02:00
|
|
|
configure_intl(output)
|
2014-08-23 23:01:06 +02:00
|
|
|
configure_fullystatic(output)
|
2013-05-08 14:10:07 +02:00
|
|
|
|
2011-11-15 04:02:44 +01:00
|
|
|
# variables should be a root level element,
|
|
|
|
# move everything else to target_defaults
|
|
|
|
variables = output['variables']
|
|
|
|
del output['variables']
|
|
|
|
output = {
|
|
|
|
'variables': variables,
|
|
|
|
'target_defaults': output
|
|
|
|
}
|
2015-01-28 17:46:19 +01:00
|
|
|
pprint.pprint(output, indent=2)
|
2011-11-15 04:02:44 +01:00
|
|
|
|
2014-10-04 02:42:37 +02:00
|
|
|
write('config.gypi', do_not_edit +
|
2013-08-02 11:50:45 +02:00
|
|
|
pprint.pformat(output, indent=2) + '\n')
|
2012-01-17 23:02:15 +01:00
|
|
|
|
2012-09-04 16:03:01 +02:00
|
|
|
config = {
|
|
|
|
'BUILDTYPE': 'Debug' if options.debug else 'Release',
|
2012-09-14 20:16:43 +02:00
|
|
|
'USE_XCODE': str(int(options.use_xcode or 0)),
|
2012-11-20 17:28:28 +01:00
|
|
|
'PYTHON': sys.executable,
|
2012-09-04 16:03:01 +02:00
|
|
|
}
|
2013-04-24 19:15:36 +02:00
|
|
|
|
|
|
|
if options.prefix:
|
|
|
|
config['PREFIX'] = options.prefix
|
|
|
|
|
2012-09-04 16:03:01 +02:00
|
|
|
config = '\n'.join(map('='.join, config.iteritems())) + '\n'
|
|
|
|
|
|
|
|
write('config.mk',
|
|
|
|
'# Do not edit. Generated by the configure script.\n' + config)
|
2010-11-02 00:03:32 +01:00
|
|
|
|
2013-12-07 06:00:32 +01:00
|
|
|
gyp_args = [sys.executable, 'tools/gyp_node.py', '--no-parallel']
|
2013-12-07 05:58:00 +01:00
|
|
|
|
2015-01-16 12:56:30 +01:00
|
|
|
if options.use_xcode:
|
2013-12-07 05:58:00 +01:00
|
|
|
gyp_args += ['-f', 'xcode']
|
2014-08-31 00:59:05 +02:00
|
|
|
elif flavor == 'win' and sys.platform != 'msys':
|
2013-12-07 05:58:00 +01:00
|
|
|
gyp_args += ['-f', 'msvs', '-G', 'msvs_version=auto']
|
2012-03-15 23:17:25 +01:00
|
|
|
else:
|
2013-12-07 05:58:00 +01:00
|
|
|
gyp_args += ['-f', 'make-' + flavor]
|
|
|
|
|
|
|
|
gyp_args += args
|
2012-06-28 01:07:42 +02:00
|
|
|
|
2015-01-28 17:46:19 +01:00
|
|
|
if warn.warned:
|
|
|
|
warn('warnings were emitted in the configure phase')
|
|
|
|
|
2014-12-10 18:04:33 +01:00
|
|
|
sys.exit(subprocess.call(gyp_args))
|