2017-11-13 16:59:11 +01:00
|
|
|
@if not defined DEBUG_HELPER @ECHO OFF
|
2011-08-24 08:14:56 +02:00
|
|
|
|
2018-12-14 01:43:45 +01:00
|
|
|
:: Other scripts rely on the environment variables set in this script, so we
|
|
|
|
:: explicitly allow them to persist in the calling shell.
|
|
|
|
endlocal
|
|
|
|
|
2011-08-24 08:14:56 +02:00
|
|
|
if /i "%1"=="help" goto help
|
|
|
|
if /i "%1"=="--help" goto help
|
|
|
|
if /i "%1"=="-help" goto help
|
|
|
|
if /i "%1"=="/help" goto help
|
|
|
|
if /i "%1"=="?" goto help
|
|
|
|
if /i "%1"=="-?" goto help
|
|
|
|
if /i "%1"=="--?" goto help
|
|
|
|
if /i "%1"=="/?" goto help
|
|
|
|
|
2018-03-12 04:09:14 +01:00
|
|
|
cd %~dp0
|
|
|
|
|
2019-11-29 02:45:52 +01:00
|
|
|
@rem CI_* variables should be kept synchronized with the ones in Makefile
|
2020-05-01 13:07:15 +02:00
|
|
|
set CI_NATIVE_SUITES=addons js-native-api node-api
|
2019-11-29 02:45:52 +01:00
|
|
|
set CI_JS_SUITES=default
|
|
|
|
set CI_DOC=doctool
|
|
|
|
@rem Same as the test-ci target in Makefile
|
2020-05-01 13:07:15 +02:00
|
|
|
set "common_test_suites=%CI_JS_SUITES% %CI_NATIVE_SUITES% %CI_DOC%&set build_addons=1&set build_js_native_api_tests=1&set build_node_api_tests=1"
|
2019-11-29 02:45:52 +01:00
|
|
|
|
2011-08-24 08:14:56 +02:00
|
|
|
@rem Process arguments.
|
2012-02-23 13:25:20 +01:00
|
|
|
set config=Release
|
2011-08-24 08:14:56 +02:00
|
|
|
set target=Build
|
2017-02-28 12:41:03 +01:00
|
|
|
set target_arch=x64
|
2018-06-06 18:22:50 +02:00
|
|
|
set ltcg=
|
2017-06-25 19:42:05 +02:00
|
|
|
set target_env=
|
2011-08-24 08:14:56 +02:00
|
|
|
set noprojgen=
|
2018-06-07 18:26:02 +02:00
|
|
|
set projgen=
|
2011-08-27 00:04:47 +02:00
|
|
|
set nobuild=
|
2016-12-06 21:52:59 +01:00
|
|
|
set sign=
|
2015-05-08 20:56:13 +02:00
|
|
|
set nosnapshot=
|
2016-08-10 11:47:46 +02:00
|
|
|
set cctest_args=
|
2011-08-27 00:04:47 +02:00
|
|
|
set test_args=
|
2018-09-21 18:30:08 +02:00
|
|
|
set stage_package=
|
2016-03-24 18:53:42 +01:00
|
|
|
set package=
|
2011-09-14 23:51:49 +02:00
|
|
|
set msi=
|
2015-06-10 09:05:26 +02:00
|
|
|
set upload=
|
2012-04-04 18:06:00 +02:00
|
|
|
set licensertf=
|
2017-09-08 13:44:58 +02:00
|
|
|
set lint_js=
|
|
|
|
set lint_cpp=
|
2018-03-28 21:16:47 +02:00
|
|
|
set lint_md=
|
|
|
|
set lint_md_build=
|
2012-06-12 01:23:17 +02:00
|
|
|
set noetw=
|
|
|
|
set noetw_msi_arg=
|
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
|
|
|
set i18n_arg=
|
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 download_arg=
|
2015-08-31 12:24:38 +02:00
|
|
|
set build_release=
|
2015-10-16 13:32:06 +02:00
|
|
|
set configure_flags=
|
2016-03-24 08:52:27 +01:00
|
|
|
set build_addons=
|
2016-06-29 22:03:18 +02:00
|
|
|
set dll=
|
2017-04-30 19:07:37 +02:00
|
|
|
set enable_static=
|
2018-11-17 21:34:54 +01:00
|
|
|
set build_js_native_api_tests=
|
|
|
|
set build_node_api_tests=
|
2016-12-11 23:37:25 +01:00
|
|
|
set test_node_inspect=
|
2017-04-17 06:01:00 +02:00
|
|
|
set test_check_deopts=
|
2017-06-29 00:24:52 +02:00
|
|
|
set v8_test_options=
|
|
|
|
set v8_build_options=
|
http2: introducing HTTP/2
At long last: The initial *experimental* implementation of HTTP/2.
This is an accumulation of the work that has been done in the nodejs/http2
repository, squashed down to a couple of commits. The original commit
history has been preserved in the nodejs/http2 repository.
This PR introduces the nghttp2 C library as a new dependency. This library
provides the majority of the HTTP/2 protocol implementation, with the rest
of the code here providing the mapping of the library into a usable JS API.
Within src, a handful of new node_http2_*.c and node_http2_*.h files are
introduced. These provide the internal mechanisms that interface with nghttp
and define the `process.binding('http2')` interface.
The JS API is defined within `internal/http2/*.js`.
There are two APIs provided: Core and Compat.
The Core API is HTTP/2 specific and is designed to be as minimal and as
efficient as possible.
The Compat API is intended to be as close to the existing HTTP/1 API as
possible, with some exceptions.
Tests, documentation and initial benchmarks are included.
The `http2` module is gated by a new `--expose-http2` command line flag.
When used, `require('http2')` will be exposed to users. Note that there
is an existing `http2` module on npm that would be impacted by the introduction
of this module, which is the main reason for gating this behind a flag.
When using `require('http2')` the first time, a process warning will be
emitted indicating that an experimental feature is being used.
To run the benchmarks, the `h2load` tool (part of the nghttp project) is
required: `./node benchmarks/http2/simple.js benchmarker=h2load`. Only
two benchmarks are currently available.
Additional configuration options to enable verbose debugging are provided:
```
$ ./configure --debug-http2 --debug-nghttp2
$ NODE_DEBUG=http2 ./node
```
The `--debug-http2` configuration option enables verbose debug statements
from the `src/node_http2_*` files. The `--debug-nghttp2` enables the nghttp
library's own verbose debug output. The `NODE_DEBUG=http2` enables JS-level
debug output.
The following illustrates as simple HTTP/2 server and client interaction:
(The HTTP/2 client and server support both plain text and TLS connections)
```jt client = http2.connect('http://localhost:80');
const req = client.request({ ':path': '/some/path' });
req.on('data', (chunk) => { /* do something with the data */ });
req.on('end', () => {
client.destroy();
});
// Plain text (non-TLS server)
const server = http2.createServer();
server.on('stream', (stream, requestHeaders) => {
stream.respond({ ':status': 200 });
stream.write('hello ');
stream.end('world');
});
server.listen(80);
```
```js
const http2 = require('http2');
const client = http2.connect('http://localhost');
```
Author: Anna Henningsen <anna@addaleax.net>
Author: Colin Ihrig <cjihrig@gmail.com>
Author: Daniel Bevenius <daniel.bevenius@gmail.com>
Author: James M Snell <jasnell@gmail.com>
Author: Jun Mukai
Author: Kelvin Jin
Author: Matteo Collina <matteo.collina@gmail.com>
Author: Robert Kowalski <rok@kowalski.gd>
Author: Santiago Gimeno <santiago.gimeno@gmail.com>
Author: Sebastiaan Deckers <sebdeckers83@gmail.com>
Author: Yosuke Furukawa <yosuke.furukawa@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/14239
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2017-07-17 19:17:16 +02:00
|
|
|
set http2_debug=
|
|
|
|
set nghttp2_debug=
|
2017-09-14 15:27:13 +02:00
|
|
|
set link_module=
|
2017-11-29 19:48:33 +01:00
|
|
|
set no_cctest=
|
2018-06-19 21:17:46 +02:00
|
|
|
set cctest=
|
2018-04-11 14:11:36 +02:00
|
|
|
set openssl_no_asm=
|
2018-03-28 21:16:47 +02:00
|
|
|
set doc=
|
2019-03-04 17:06:00 +01:00
|
|
|
set extra_msbuild_args=
|
2019-11-30 02:13:48 +01:00
|
|
|
set exit_code=0
|
2020-05-08 00:49:14 +02:00
|
|
|
set experimental_quic=
|
2011-08-24 08:14:56 +02:00
|
|
|
|
|
|
|
:next-arg
|
|
|
|
if "%1"=="" goto args-done
|
2012-02-12 21:04:03 +01:00
|
|
|
if /i "%1"=="debug" set config=Debug&goto arg-ok
|
2019-02-04 21:49:47 +01:00
|
|
|
if /i "%1"=="release" set config=Release&set ltcg=1&set cctest=1&goto arg-ok
|
2012-02-12 21:04:03 +01:00
|
|
|
if /i "%1"=="clean" set target=Clean&goto arg-ok
|
2019-08-12 12:14:43 +02:00
|
|
|
if /i "%1"=="testclean" set target=TestClean&goto arg-ok
|
2015-06-10 09:05:26 +02:00
|
|
|
if /i "%1"=="ia32" set target_arch=x86&goto arg-ok
|
|
|
|
if /i "%1"=="x86" set target_arch=x86&goto arg-ok
|
2012-02-12 21:04:03 +01:00
|
|
|
if /i "%1"=="x64" set target_arch=x64&goto arg-ok
|
2018-12-05 23:48:52 +01:00
|
|
|
if /i "%1"=="arm64" set target_arch=arm64&goto arg-ok
|
2019-07-20 18:33:09 +02:00
|
|
|
if /i "%1"=="vs2019" set target_env=vs2019&goto arg-ok
|
2012-02-12 21:04:03 +01:00
|
|
|
if /i "%1"=="noprojgen" set noprojgen=1&goto arg-ok
|
2018-06-07 18:26:02 +02:00
|
|
|
if /i "%1"=="projgen" set projgen=1&goto arg-ok
|
2012-02-12 21:04:03 +01:00
|
|
|
if /i "%1"=="nobuild" set nobuild=1&goto arg-ok
|
2017-02-03 19:35:10 +01:00
|
|
|
if /i "%1"=="nosign" set "sign="&echo Note: vcbuild no longer signs by default. "nosign" is redundant.&goto arg-ok
|
2016-12-06 21:52:59 +01:00
|
|
|
if /i "%1"=="sign" set sign=1&goto arg-ok
|
2015-05-08 20:56:13 +02:00
|
|
|
if /i "%1"=="nosnapshot" set nosnapshot=1&goto arg-ok
|
2012-06-12 01:23:17 +02:00
|
|
|
if /i "%1"=="noetw" set noetw=1&goto arg-ok
|
2018-06-06 18:22:50 +02:00
|
|
|
if /i "%1"=="ltcg" set ltcg=1&goto arg-ok
|
2012-04-04 18:06:00 +02:00
|
|
|
if /i "%1"=="licensertf" set licensertf=1&goto arg-ok
|
2018-03-28 21:16:47 +02:00
|
|
|
if /i "%1"=="test" set test_args=%test_args% -J %common_test_suites%&set lint_cpp=1&set lint_js=1&set lint_md=1&goto arg-ok
|
2019-11-29 02:45:52 +01:00
|
|
|
if /i "%1"=="test-ci-native" set test_args=%test_args% %test_ci_args% -J -p tap --logfile test.tap %CI_NATIVE_SUITES% %CI_DOC%&set build_addons=1&set build_js_native_api_tests=1&set build_node_api_tests=1&set cctest_args=%cctest_args% --gtest_output=xml:cctest.junit.xml&goto arg-ok
|
|
|
|
if /i "%1"=="test-ci-js" set test_args=%test_args% %test_ci_args% -J -p tap --logfile test.tap %CI_JS_SUITES%&set no_cctest=1&goto arg-ok
|
2018-03-27 15:55:18 +02:00
|
|
|
if /i "%1"=="build-addons" set build_addons=1&goto arg-ok
|
2018-11-17 21:34:54 +01:00
|
|
|
if /i "%1"=="build-js-native-api-tests" set build_js_native_api_tests=1&goto arg-ok
|
|
|
|
if /i "%1"=="build-node-api-tests" set build_node_api_tests=1&goto arg-ok
|
2016-03-24 08:52:27 +01:00
|
|
|
if /i "%1"=="test-addons" set test_args=%test_args% addons&set build_addons=1&goto arg-ok
|
2018-11-17 21:34:54 +01:00
|
|
|
if /i "%1"=="test-js-native-api" set test_args=%test_args% js-native-api&set build_js_native_api_tests=1&goto arg-ok
|
|
|
|
if /i "%1"=="test-node-api" set test_args=%test_args% node-api&set build_node_api_tests=1&goto arg-ok
|
2018-11-09 01:33:42 +01:00
|
|
|
if /i "%1"=="test-benchmark" set test_args=%test_args% benchmark&goto arg-ok
|
2015-02-28 02:42:49 +01:00
|
|
|
if /i "%1"=="test-simple" set test_args=%test_args% sequential parallel -J&goto arg-ok
|
|
|
|
if /i "%1"=="test-message" set test_args=%test_args% message&goto arg-ok
|
2016-11-07 22:34:54 +01:00
|
|
|
if /i "%1"=="test-tick-processor" set test_args=%test_args% tick-processor&goto arg-ok
|
2015-02-28 02:42:49 +01:00
|
|
|
if /i "%1"=="test-internet" set test_args=%test_args% internet&goto arg-ok
|
|
|
|
if /i "%1"=="test-pummel" set test_args=%test_args% pummel&goto arg-ok
|
2016-05-04 05:51:41 +02:00
|
|
|
if /i "%1"=="test-known-issues" set test_args=%test_args% known_issues&goto arg-ok
|
2017-06-10 19:27:18 +02:00
|
|
|
if /i "%1"=="test-async-hooks" set test_args=%test_args% async-hooks&goto arg-ok
|
2018-07-27 13:36:35 +02:00
|
|
|
if /i "%1"=="test-all" set test_args=%test_args% gc internet pummel %common_test_suites%&set lint_cpp=1&set lint_js=1&goto arg-ok
|
2016-12-11 23:37:25 +01:00
|
|
|
if /i "%1"=="test-node-inspect" set test_node_inspect=1&goto arg-ok
|
2017-04-17 06:01:00 +02:00
|
|
|
if /i "%1"=="test-check-deopts" set test_check_deopts=1&goto arg-ok
|
2017-02-22 23:05:19 +01:00
|
|
|
if /i "%1"=="test-npm" set test_npm=1&goto arg-ok
|
2017-06-29 00:24:52 +02:00
|
|
|
if /i "%1"=="test-v8" set test_v8=1&set custom_v8_test=1&goto arg-ok
|
|
|
|
if /i "%1"=="test-v8-intl" set test_v8_intl=1&set custom_v8_test=1&goto arg-ok
|
|
|
|
if /i "%1"=="test-v8-benchmarks" set test_v8_benchmarks=1&set custom_v8_test=1&goto arg-ok
|
|
|
|
if /i "%1"=="test-v8-all" set test_v8=1&set test_v8_intl=1&set test_v8_benchmarks=1&set custom_v8_test=1&goto arg-ok
|
2018-01-06 03:19:36 +01:00
|
|
|
if /i "%1"=="lint-cpp" set lint_cpp=1&goto arg-ok
|
2017-09-08 13:44:58 +02:00
|
|
|
if /i "%1"=="lint-js" set lint_js=1&goto arg-ok
|
|
|
|
if /i "%1"=="jslint" set lint_js=1&echo Please use lint-js instead of jslint&goto arg-ok
|
|
|
|
if /i "%1"=="lint-js-ci" set lint_js_ci=1&goto arg-ok
|
|
|
|
if /i "%1"=="jslint-ci" set lint_js_ci=1&echo Please use lint-js-ci instead of jslint-ci&goto arg-ok
|
2018-03-28 21:16:47 +02:00
|
|
|
if /i "%1"=="lint-md" set lint_md=1&goto arg-ok
|
|
|
|
if /i "%1"=="lint-md-build" set lint_md_build=1&goto arg-ok
|
|
|
|
if /i "%1"=="lint" set lint_cpp=1&set lint_js=1&set lint_md=1&goto arg-ok
|
2017-09-08 13:44:58 +02:00
|
|
|
if /i "%1"=="lint-ci" set lint_cpp=1&set lint_js_ci=1&goto arg-ok
|
2016-03-24 18:53:42 +01:00
|
|
|
if /i "%1"=="package" set package=1&goto arg-ok
|
2019-10-08 18:57:09 +02:00
|
|
|
if /i "%1"=="msi" set msi=1&set licensertf=1&set download_arg="--download=all"&set i18n_arg=full-icu&goto arg-ok
|
2016-12-06 21:52:59 +01:00
|
|
|
if /i "%1"=="build-release" set build_release=1&set sign=1&goto arg-ok
|
2015-06-10 09:05:26 +02:00
|
|
|
if /i "%1"=="upload" set upload=1&goto arg-ok
|
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
|
|
|
if /i "%1"=="small-icu" set i18n_arg=%1&goto arg-ok
|
|
|
|
if /i "%1"=="full-icu" set i18n_arg=%1&goto arg-ok
|
2018-01-22 17:55:34 +01:00
|
|
|
if /i "%1"=="intl-none" set i18n_arg=none&goto arg-ok
|
2017-12-11 18:08:20 +01:00
|
|
|
if /i "%1"=="without-intl" set i18n_arg=none&goto arg-ok
|
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
|
|
|
if /i "%1"=="download-all" set download_arg="--download=all"&goto arg-ok
|
2015-08-26 12:38:48 +02:00
|
|
|
if /i "%1"=="ignore-flaky" set test_args=%test_args% --flaky-tests=dontcare&goto arg-ok
|
2016-06-29 22:03:18 +02:00
|
|
|
if /i "%1"=="dll" set dll=1&goto arg-ok
|
2017-10-09 14:50:24 +02:00
|
|
|
if /i "%1"=="static" set enable_static=1&goto arg-ok
|
2017-02-20 15:18:43 +01:00
|
|
|
if /i "%1"=="no-NODE-OPTIONS" set no_NODE_OPTIONS=1&goto arg-ok
|
http2: introducing HTTP/2
At long last: The initial *experimental* implementation of HTTP/2.
This is an accumulation of the work that has been done in the nodejs/http2
repository, squashed down to a couple of commits. The original commit
history has been preserved in the nodejs/http2 repository.
This PR introduces the nghttp2 C library as a new dependency. This library
provides the majority of the HTTP/2 protocol implementation, with the rest
of the code here providing the mapping of the library into a usable JS API.
Within src, a handful of new node_http2_*.c and node_http2_*.h files are
introduced. These provide the internal mechanisms that interface with nghttp
and define the `process.binding('http2')` interface.
The JS API is defined within `internal/http2/*.js`.
There are two APIs provided: Core and Compat.
The Core API is HTTP/2 specific and is designed to be as minimal and as
efficient as possible.
The Compat API is intended to be as close to the existing HTTP/1 API as
possible, with some exceptions.
Tests, documentation and initial benchmarks are included.
The `http2` module is gated by a new `--expose-http2` command line flag.
When used, `require('http2')` will be exposed to users. Note that there
is an existing `http2` module on npm that would be impacted by the introduction
of this module, which is the main reason for gating this behind a flag.
When using `require('http2')` the first time, a process warning will be
emitted indicating that an experimental feature is being used.
To run the benchmarks, the `h2load` tool (part of the nghttp project) is
required: `./node benchmarks/http2/simple.js benchmarker=h2load`. Only
two benchmarks are currently available.
Additional configuration options to enable verbose debugging are provided:
```
$ ./configure --debug-http2 --debug-nghttp2
$ NODE_DEBUG=http2 ./node
```
The `--debug-http2` configuration option enables verbose debug statements
from the `src/node_http2_*` files. The `--debug-nghttp2` enables the nghttp
library's own verbose debug output. The `NODE_DEBUG=http2` enables JS-level
debug output.
The following illustrates as simple HTTP/2 server and client interaction:
(The HTTP/2 client and server support both plain text and TLS connections)
```jt client = http2.connect('http://localhost:80');
const req = client.request({ ':path': '/some/path' });
req.on('data', (chunk) => { /* do something with the data */ });
req.on('end', () => {
client.destroy();
});
// Plain text (non-TLS server)
const server = http2.createServer();
server.on('stream', (stream, requestHeaders) => {
stream.respond({ ':status': 200 });
stream.write('hello ');
stream.end('world');
});
server.listen(80);
```
```js
const http2 = require('http2');
const client = http2.connect('http://localhost');
```
Author: Anna Henningsen <anna@addaleax.net>
Author: Colin Ihrig <cjihrig@gmail.com>
Author: Daniel Bevenius <daniel.bevenius@gmail.com>
Author: James M Snell <jasnell@gmail.com>
Author: Jun Mukai
Author: Kelvin Jin
Author: Matteo Collina <matteo.collina@gmail.com>
Author: Robert Kowalski <rok@kowalski.gd>
Author: Santiago Gimeno <santiago.gimeno@gmail.com>
Author: Sebastiaan Deckers <sebdeckers83@gmail.com>
Author: Yosuke Furukawa <yosuke.furukawa@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/14239
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2017-07-17 19:17:16 +02:00
|
|
|
if /i "%1"=="debug-nghttp2" set debug_nghttp2=1&goto arg-ok
|
2017-09-14 15:27:13 +02:00
|
|
|
if /i "%1"=="link-module" set "link_module= --link-module=%2%link_module%"&goto arg-ok-2
|
2017-11-29 19:48:33 +01:00
|
|
|
if /i "%1"=="no-cctest" set no_cctest=1&goto arg-ok
|
2018-06-19 21:17:46 +02:00
|
|
|
if /i "%1"=="cctest" set cctest=1&goto arg-ok
|
2018-04-11 14:11:36 +02:00
|
|
|
if /i "%1"=="openssl-no-asm" set openssl_no_asm=1&goto arg-ok
|
2018-03-28 21:16:47 +02:00
|
|
|
if /i "%1"=="doc" set doc=1&goto arg-ok
|
2019-03-04 17:06:00 +01:00
|
|
|
if /i "%1"=="binlog" set extra_msbuild_args=/binaryLogger:%config%\node.binlog&goto arg-ok
|
2020-05-08 00:49:14 +02:00
|
|
|
if /i "%1"=="experimental-quic" set experimental_quic=1&goto arg-ok
|
2011-11-17 00:10:14 +01:00
|
|
|
|
2016-09-01 18:52:19 +02:00
|
|
|
echo Error: invalid command line option `%1`.
|
|
|
|
exit /b 1
|
2011-11-17 00:10:14 +01:00
|
|
|
|
2017-09-14 15:27:13 +02:00
|
|
|
:arg-ok-2
|
|
|
|
shift
|
2011-08-24 08:14:56 +02:00
|
|
|
:arg-ok
|
|
|
|
shift
|
|
|
|
goto next-arg
|
2015-08-31 12:24:38 +02:00
|
|
|
|
|
|
|
:args-done
|
|
|
|
|
2015-08-13 17:30:01 +02:00
|
|
|
if defined build_release (
|
|
|
|
set config=Release
|
2016-03-24 18:53:42 +01:00
|
|
|
set package=1
|
2015-08-13 17:30:01 +02:00
|
|
|
set msi=1
|
|
|
|
set licensertf=1
|
|
|
|
set download_arg="--download=all"
|
2019-10-08 18:57:09 +02:00
|
|
|
set i18n_arg=full-icu
|
2018-06-07 18:26:02 +02:00
|
|
|
set projgen=1
|
2018-06-19 21:17:46 +02:00
|
|
|
set cctest=1
|
2018-06-06 18:22:50 +02:00
|
|
|
set ltcg=1
|
2015-08-13 17:30:01 +02:00
|
|
|
)
|
|
|
|
|
2018-09-21 18:30:08 +02:00
|
|
|
if defined msi set stage_package=1
|
|
|
|
if defined package set stage_package=1
|
|
|
|
|
2016-03-24 08:52:27 +01:00
|
|
|
:: assign path to node_exe
|
|
|
|
set "node_exe=%config%\node.exe"
|
2017-06-22 05:34:28 +02:00
|
|
|
set "node_gyp_exe="%node_exe%" deps\npm\node_modules\node-gyp\bin\node-gyp"
|
2018-03-28 21:16:47 +02:00
|
|
|
set "npm_exe="%~dp0%node_exe%" %~dp0deps\npm\bin\npm-cli.js"
|
2019-07-20 18:33:09 +02:00
|
|
|
if "%target_env%"=="vs2019" set "node_gyp_exe=%node_gyp_exe% --msvs_version=2019"
|
2016-03-24 08:52:27 +01:00
|
|
|
|
2019-09-19 15:25:37 +02:00
|
|
|
:: skip building if the only argument received was lint
|
|
|
|
if "%*"=="lint" if exist "%node_exe%" goto lint-cpp
|
|
|
|
|
2017-11-25 20:17:23 +01:00
|
|
|
if "%config%"=="Debug" set configure_flags=%configure_flags% --debug
|
|
|
|
if defined nosnapshot set configure_flags=%configure_flags% --without-snapshot
|
|
|
|
if defined noetw set configure_flags=%configure_flags% --without-etw& set noetw_msi_arg=/p:NoETW=1
|
2018-06-06 18:22:50 +02:00
|
|
|
if defined ltcg set configure_flags=%configure_flags% --with-ltcg
|
2017-11-25 20:17:23 +01:00
|
|
|
if defined release_urlbase set configure_flags=%configure_flags% --release-urlbase=%release_urlbase%
|
|
|
|
if defined download_arg set configure_flags=%configure_flags% %download_arg%
|
|
|
|
if defined dll set configure_flags=%configure_flags% --shared
|
|
|
|
if defined enable_static set configure_flags=%configure_flags% --enable-static
|
|
|
|
if defined no_NODE_OPTIONS set configure_flags=%configure_flags% --without-node-options
|
|
|
|
if defined link_module set configure_flags=%configure_flags% %link_module%
|
|
|
|
if defined i18n_arg set configure_flags=%configure_flags% --with-intl=%i18n_arg%
|
|
|
|
if defined config_flags set configure_flags=%configure_flags% %config_flags%
|
|
|
|
if defined target_arch set configure_flags=%configure_flags% --dest-cpu=%target_arch%
|
2018-04-11 14:11:36 +02:00
|
|
|
if defined openssl_no_asm set configure_flags=%configure_flags% --openssl-no-asm
|
2018-09-18 20:57:05 +02:00
|
|
|
if defined DEBUG_HELPER set configure_flags=%configure_flags% --verbose
|
2020-05-08 00:49:14 +02:00
|
|
|
if defined experimental_quic set configure_flags=%configure_flags% --experimental-quic
|
2019-04-07 21:02:04 +02:00
|
|
|
if "%target_arch%"=="x86" if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set configure_flags=%configure_flags% --no-cross-compiling
|
2020-03-24 19:57:08 +01:00
|
|
|
if "%target_arch%"=="arm64" set configure_flags=%configure_flags% --cross-compiling
|
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
|
|
|
|
2015-10-08 00:40:26 +02:00
|
|
|
if not exist "%~dp0deps\icu" goto no-depsicu
|
|
|
|
if "%target%"=="Clean" echo deleting %~dp0deps\icu
|
|
|
|
if "%target%"=="Clean" rmdir /S /Q %~dp0deps\icu
|
|
|
|
:no-depsicu
|
|
|
|
|
2019-08-12 12:14:43 +02:00
|
|
|
if "%target%"=="TestClean" (
|
|
|
|
echo deleting test/.tmp*
|
|
|
|
if exist "test\.tmp*" for /f %%i in ('dir /a:d /s /b test\.tmp*') do rmdir /S /Q "%%i"
|
|
|
|
goto exit
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2018-02-07 11:23:26 +01:00
|
|
|
call tools\msvs\find_python.cmd
|
2017-11-13 16:59:11 +01:00
|
|
|
if errorlevel 1 goto :exit
|
2018-02-07 11:23:26 +01:00
|
|
|
|
2018-12-05 23:48:52 +01:00
|
|
|
REM NASM is only needed on IA32 and x86_64.
|
|
|
|
if not defined openssl_no_asm if "%target_arch%" NEQ "arm64" call tools\msvs\find_nasm.cmd
|
2018-04-11 14:11:36 +02:00
|
|
|
if errorlevel 1 echo Could not find NASM, install it or build with openssl-no-asm. See BUILDING.md.
|
2018-03-24 23:56:59 +01:00
|
|
|
|
2015-06-10 09:05:26 +02:00
|
|
|
call :getnodeversion || exit /b 1
|
2013-03-05 20:05:50 +01:00
|
|
|
|
2018-01-08 06:01:39 +01:00
|
|
|
if defined TAG set configure_flags=%configure_flags% --tag=%TAG%
|
|
|
|
|
2018-03-28 21:16:47 +02:00
|
|
|
if not "%target%"=="Clean" goto skip-clean
|
2018-11-07 22:06:33 +01:00
|
|
|
rmdir /Q /S "%~dp0%config%\%TARGET_NAME%" > nul 2> nul
|
2018-03-28 21:16:47 +02:00
|
|
|
:skip-clean
|
2016-08-11 21:18:16 +02:00
|
|
|
|
2019-04-06 20:22:45 +02:00
|
|
|
if defined noprojgen if defined nobuild goto :after-build
|
2016-09-04 23:24:31 +02:00
|
|
|
|
2015-04-23 16:26:59 +02:00
|
|
|
@rem Set environment for msbuild
|
2011-08-27 00:04:47 +02:00
|
|
|
|
2017-04-07 14:53:45 +02:00
|
|
|
set msvs_host_arch=x86
|
|
|
|
if _%PROCESSOR_ARCHITECTURE%_==_AMD64_ set msvs_host_arch=amd64
|
|
|
|
if _%PROCESSOR_ARCHITEW6432%_==_AMD64_ set msvs_host_arch=amd64
|
2017-06-16 17:49:20 +02:00
|
|
|
@rem usually vcvarsall takes an argument: host + '_' + target
|
2017-04-07 14:53:45 +02:00
|
|
|
set vcvarsall_arg=%msvs_host_arch%_%target_arch%
|
2017-06-02 14:51:48 +02:00
|
|
|
@rem unless both host and target are x64
|
2017-04-07 14:53:45 +02:00
|
|
|
if %target_arch%==x64 if %msvs_host_arch%==amd64 set vcvarsall_arg=amd64
|
2018-06-21 12:09:08 +02:00
|
|
|
@rem also if both are x86
|
|
|
|
if %target_arch%==x86 if %msvs_host_arch%==x86 set vcvarsall_arg=x86
|
2017-04-07 14:53:45 +02:00
|
|
|
|
2019-10-18 11:04:35 +02:00
|
|
|
@rem Look for Visual Studio 2019
|
|
|
|
:vs-set-2019
|
2020-06-02 11:04:17 +02:00
|
|
|
if defined target_env if "%target_env%" NEQ "vs2019" goto msbuild-not-found
|
2019-10-18 11:04:35 +02:00
|
|
|
echo Looking for Visual Studio 2019
|
2019-10-25 18:13:49 +02:00
|
|
|
@rem VCINSTALLDIR may be set if run from a VS Command Prompt and needs to be
|
|
|
|
@rem cleared first as vswhere_usability_wrapper.cmd doesn't when it fails to
|
|
|
|
@rem detect the version searched for
|
|
|
|
set "VCINSTALLDIR="
|
2019-10-18 11:04:35 +02:00
|
|
|
call tools\msvs\vswhere_usability_wrapper.cmd "[16.0,17.0)"
|
2020-06-02 11:04:17 +02:00
|
|
|
if "_%VCINSTALLDIR%_" == "__" goto msbuild-not-found
|
2019-12-11 06:51:23 +01:00
|
|
|
set "WIXSDKDIR=%WIX%\SDK\VS2017"
|
2017-11-17 18:54:06 +01:00
|
|
|
if defined msi (
|
2019-10-18 11:04:35 +02:00
|
|
|
echo Looking for WiX installation for Visual Studio 2019...
|
2019-12-11 06:51:23 +01:00
|
|
|
if not exist "%WIXSDKDIR%" (
|
2019-10-18 11:04:35 +02:00
|
|
|
echo Failed to find WiX install for Visual Studio 2019
|
|
|
|
echo VS2019 support for WiX is only present starting at version 3.11
|
2020-06-02 11:04:17 +02:00
|
|
|
goto msbuild-not-found
|
2017-11-17 18:54:06 +01:00
|
|
|
)
|
|
|
|
if not exist "%VCINSTALLDIR%\..\MSBuild\Microsoft\WiX" (
|
2019-10-18 11:04:35 +02:00
|
|
|
echo Failed to find the WiX Toolset Visual Studio 2019 Extension
|
2020-06-02 11:04:17 +02:00
|
|
|
goto msbuild-not-found
|
2017-11-17 18:54:06 +01:00
|
|
|
)
|
|
|
|
)
|
2019-10-18 11:04:35 +02:00
|
|
|
@rem check if VS2019 is already setup, and for the requested arch
|
|
|
|
if "_%VisualStudioVersion%_" == "_16.0_" if "_%VSCMD_ARG_TGT_ARCH%_"=="_%target_arch%_" goto found_vs2019
|
2017-06-25 19:42:05 +02:00
|
|
|
@rem need to clear VSINSTALLDIR for vcvarsall to work as expected
|
2017-06-05 23:45:41 +02:00
|
|
|
set "VSINSTALLDIR="
|
2017-07-16 15:12:47 +02:00
|
|
|
@rem prevent VsDevCmd.bat from changing the current working directory
|
|
|
|
set "VSCMD_START_DIR=%CD%"
|
2017-04-07 14:53:45 +02:00
|
|
|
set vcvars_call="%VCINSTALLDIR%\Auxiliary\Build\vcvarsall.bat" %vcvarsall_arg%
|
|
|
|
echo calling: %vcvars_call%
|
|
|
|
call %vcvars_call%
|
2020-06-02 11:04:17 +02:00
|
|
|
if errorlevel 1 goto msbuild-not-found
|
2019-03-04 17:06:00 +01:00
|
|
|
if defined DEBUG_HELPER @ECHO ON
|
2019-10-18 11:04:35 +02:00
|
|
|
:found_vs2019
|
2017-04-07 14:53:45 +02:00
|
|
|
echo Found MSVS version %VisualStudioVersion%
|
2019-10-18 11:04:35 +02:00
|
|
|
set GYP_MSVS_VERSION=2019
|
|
|
|
set PLATFORM_TOOLSET=v142
|
2017-04-07 14:53:45 +02:00
|
|
|
goto msbuild-found
|
|
|
|
|
2011-09-05 00:35:42 +02:00
|
|
|
:msbuild-not-found
|
2017-04-07 14:53:45 +02:00
|
|
|
echo Failed to find a suitable Visual Studio installation.
|
|
|
|
echo Try to run in a "Developer Command Prompt" or consult
|
2020-04-04 18:09:09 +02:00
|
|
|
echo https://github.com/nodejs/node/blob/master/BUILDING.md#windows
|
2015-04-23 16:26:59 +02:00
|
|
|
goto exit
|
2011-09-05 00:35:42 +02:00
|
|
|
|
|
|
|
:msbuild-found
|
2015-04-23 16:26:59 +02:00
|
|
|
|
2018-06-07 18:26:02 +02:00
|
|
|
set project_generated=
|
2015-04-23 16:26:59 +02:00
|
|
|
:project-gen
|
|
|
|
@rem Skip project generation if requested.
|
|
|
|
if defined noprojgen goto msbuild
|
2018-06-07 18:26:02 +02:00
|
|
|
if defined projgen goto run-configure
|
|
|
|
if not exist node.sln goto run-configure
|
|
|
|
if not exist .gyp_configure_stamp goto run-configure
|
|
|
|
echo %configure_flags% > .tmp_gyp_configure_stamp
|
|
|
|
where /R . /T *.gyp? >> .tmp_gyp_configure_stamp
|
|
|
|
fc .gyp_configure_stamp .tmp_gyp_configure_stamp >NUL 2>&1
|
|
|
|
if errorlevel 1 goto run-configure
|
|
|
|
|
|
|
|
:skip-configure
|
2018-08-29 15:52:24 +02:00
|
|
|
del .tmp_gyp_configure_stamp 2> NUL
|
2018-06-07 18:26:02 +02:00
|
|
|
echo Reusing solution generated with %configure_flags%
|
|
|
|
goto msbuild
|
|
|
|
|
|
|
|
:run-configure
|
2018-08-29 15:52:24 +02:00
|
|
|
del .tmp_gyp_configure_stamp 2> NUL
|
|
|
|
del .gyp_configure_stamp 2> NUL
|
2015-04-23 16:26:59 +02:00
|
|
|
@rem Generate the VS project.
|
2018-02-07 11:23:26 +01:00
|
|
|
echo configure %configure_flags%
|
2018-06-07 18:26:02 +02:00
|
|
|
echo %configure_flags%> .used_configure_flags
|
2018-02-07 11:23:26 +01:00
|
|
|
python configure %configure_flags%
|
2015-04-23 16:26:59 +02:00
|
|
|
if errorlevel 1 goto create-msvs-files-failed
|
|
|
|
if not exist node.sln goto create-msvs-files-failed
|
2018-06-07 18:26:02 +02:00
|
|
|
set project_generated=1
|
2015-04-23 16:26:59 +02:00
|
|
|
echo Project files generated.
|
2018-06-07 18:26:02 +02:00
|
|
|
echo %configure_flags% > .gyp_configure_stamp
|
|
|
|
where /R . /T *.gyp? >> .gyp_configure_stamp
|
2015-04-23 16:26:59 +02:00
|
|
|
|
|
|
|
:msbuild
|
2015-06-23 14:13:00 +02:00
|
|
|
@rem Skip build if requested.
|
2019-04-06 20:22:45 +02:00
|
|
|
if defined nobuild goto :after-build
|
2015-04-23 16:26:59 +02:00
|
|
|
|
2011-08-24 08:14:56 +02:00
|
|
|
@rem Build the sln with msbuild.
|
2017-04-04 22:01:24 +02:00
|
|
|
set "msbcpu=/m:2"
|
|
|
|
if "%NUMBER_OF_PROCESSORS%"=="1" set "msbcpu=/m:1"
|
2016-03-09 12:58:06 +01:00
|
|
|
set "msbplatform=Win32"
|
|
|
|
if "%target_arch%"=="x64" set "msbplatform=x64"
|
2018-12-05 23:48:52 +01:00
|
|
|
if "%target_arch%"=="arm64" set "msbplatform=ARM64"
|
2018-06-19 21:17:46 +02:00
|
|
|
if "%target%"=="Build" (
|
2019-04-08 16:48:09 +02:00
|
|
|
if defined no_cctest set target=node
|
|
|
|
if "%test_args%"=="" set target=node
|
2018-06-19 21:17:46 +02:00
|
|
|
if defined cctest set target="Build"
|
|
|
|
)
|
2019-04-08 16:48:09 +02:00
|
|
|
if "%target%"=="node" if exist "%config%\cctest.exe" del "%config%\cctest.exe"
|
2019-03-04 17:06:00 +01:00
|
|
|
if defined msbuild_args set "extra_msbuild_args=%extra_msbuild_args% %msbuild_args%"
|
2018-12-14 01:43:45 +01:00
|
|
|
msbuild node.sln %msbcpu% /t:%target% /p:Configuration=%config% /p:Platform=%msbplatform% /clp:NoItemAndPropertyList;Verbosity=minimal /nologo %extra_msbuild_args%
|
2018-06-07 18:26:02 +02:00
|
|
|
if errorlevel 1 (
|
|
|
|
if not defined project_generated echo Building Node with reused solution failed. To regenerate project files use "vcbuild projgen"
|
2019-04-06 20:22:45 +02:00
|
|
|
exit /B 1
|
2018-06-07 18:26:02 +02:00
|
|
|
)
|
2015-07-08 00:06:13 +02:00
|
|
|
if "%target%" == "Clean" goto exit
|
2011-08-27 00:04:47 +02:00
|
|
|
|
2019-04-06 20:22:45 +02:00
|
|
|
:after-build
|
2019-04-13 16:06:00 +02:00
|
|
|
rd %config%
|
|
|
|
if errorlevel 1 echo "Old build output exists at 'out\%config%'. Please remove." & exit /B
|
2019-05-16 20:00:04 +02:00
|
|
|
:: Use /J because /D (symlink) requires special permissions.
|
|
|
|
if EXIST out\%config% mklink /J %config% out\%config%
|
|
|
|
if errorlevel 1 echo "Could not create junction to 'out\%config%'." & exit /B
|
2019-04-06 20:22:45 +02:00
|
|
|
|
2012-04-04 18:06:00 +02:00
|
|
|
:sign
|
2016-12-06 21:52:59 +01:00
|
|
|
@rem Skip signing unless the `sign` option was specified.
|
|
|
|
if not defined sign goto licensertf
|
2012-04-04 18:06:00 +02:00
|
|
|
|
2016-10-18 12:26:39 +02:00
|
|
|
call tools\sign.bat Release\node.exe
|
2014-03-26 06:26:17 +01:00
|
|
|
if errorlevel 1 echo Failed to sign exe&goto exit
|
2011-11-23 03:17:12 +01:00
|
|
|
|
2012-04-04 18:06:00 +02:00
|
|
|
:licensertf
|
|
|
|
@rem Skip license.rtf generation if not requested.
|
2018-09-21 18:30:08 +02:00
|
|
|
if not defined licensertf goto stage_package
|
2012-04-04 18:06:00 +02:00
|
|
|
|
2019-04-06 20:22:45 +02:00
|
|
|
%node_exe% tools\license2rtf.js < LICENSE > %config%\license.rtf
|
2012-04-04 18:06:00 +02:00
|
|
|
if errorlevel 1 echo Failed to generate license.rtf&goto exit
|
|
|
|
|
2018-09-21 18:30:08 +02:00
|
|
|
:stage_package
|
|
|
|
if not defined stage_package goto install-doctools
|
|
|
|
|
2016-03-24 18:53:42 +01:00
|
|
|
echo Creating package...
|
|
|
|
cd Release
|
2018-11-07 22:06:33 +01:00
|
|
|
rmdir /S /Q %TARGET_NAME% > nul 2> nul
|
|
|
|
mkdir %TARGET_NAME% > nul 2> nul
|
|
|
|
mkdir %TARGET_NAME%\node_modules > nul 2>nul
|
2016-03-24 18:53:42 +01:00
|
|
|
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y node.exe %TARGET_NAME%\ > nul
|
2016-03-24 18:53:42 +01:00
|
|
|
if errorlevel 1 echo Cannot copy node.exe && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\LICENSE %TARGET_NAME%\ > nul
|
2016-03-24 18:53:42 +01:00
|
|
|
if errorlevel 1 echo Cannot copy LICENSE && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\README.md %TARGET_NAME%\ > nul
|
2016-03-24 18:53:42 +01:00
|
|
|
if errorlevel 1 echo Cannot copy README.md && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\CHANGELOG.md %TARGET_NAME%\ > nul
|
2016-03-24 18:53:42 +01:00
|
|
|
if errorlevel 1 echo Cannot copy CHANGELOG.md && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
robocopy ..\deps\npm %TARGET_NAME%\node_modules\npm /e /xd test > nul
|
2016-03-24 18:53:42 +01:00
|
|
|
if errorlevel 8 echo Cannot copy npm package && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\deps\npm\bin\npm %TARGET_NAME%\ > nul
|
2016-03-24 18:53:42 +01:00
|
|
|
if errorlevel 1 echo Cannot copy npm && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\deps\npm\bin\npm.cmd %TARGET_NAME%\ > nul
|
2016-03-24 18:53:42 +01:00
|
|
|
if errorlevel 1 echo Cannot copy npm.cmd && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\deps\npm\bin\npx %TARGET_NAME%\ > nul
|
2017-08-25 18:00:07 +02:00
|
|
|
if errorlevel 1 echo Cannot copy npx && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\deps\npm\bin\npx.cmd %TARGET_NAME%\ > nul
|
2017-08-25 18:00:07 +02:00
|
|
|
if errorlevel 1 echo Cannot copy npx.cmd && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\tools\msvs\nodevars.bat %TARGET_NAME%\ > nul
|
2016-08-11 21:18:16 +02:00
|
|
|
if errorlevel 1 echo Cannot copy nodevars.bat && goto package_error
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\tools\msvs\install_tools\*.* %TARGET_NAME%\ > nul
|
|
|
|
if errorlevel 1 echo Cannot copy install_tools scripts && goto package_error
|
2016-08-11 21:18:16 +02:00
|
|
|
if not defined noetw (
|
2018-11-07 22:06:33 +01:00
|
|
|
copy /Y ..\src\res\node_etw_provider.man %TARGET_NAME%\ > nul
|
2016-08-11 21:18:16 +02:00
|
|
|
if errorlevel 1 echo Cannot copy node_etw_provider.man && goto package_error
|
|
|
|
)
|
2018-09-21 18:30:08 +02:00
|
|
|
cd ..
|
2016-03-24 18:53:42 +01:00
|
|
|
|
2018-09-21 18:30:08 +02:00
|
|
|
:package
|
|
|
|
if not defined package goto msi
|
|
|
|
cd Release
|
2018-11-07 22:06:33 +01:00
|
|
|
echo Creating %TARGET_NAME%.7z
|
|
|
|
del %TARGET_NAME%.7z > nul 2> nul
|
|
|
|
7z a -r -mx9 -t7z %TARGET_NAME%.7z %TARGET_NAME% > nul
|
|
|
|
if errorlevel 1 echo Cannot create %TARGET_NAME%.7z && goto package_error
|
2016-03-24 18:53:42 +01:00
|
|
|
|
2018-11-07 22:06:33 +01:00
|
|
|
echo Creating %TARGET_NAME%.zip
|
|
|
|
del %TARGET_NAME%.zip > nul 2> nul
|
|
|
|
7z a -r -mx9 -tzip %TARGET_NAME%.zip %TARGET_NAME% > nul
|
|
|
|
if errorlevel 1 echo Cannot create %TARGET_NAME%.zip && goto package_error
|
2016-03-24 18:53:42 +01:00
|
|
|
|
|
|
|
echo Creating node_pdb.7z
|
|
|
|
del node_pdb.7z > nul 2> nul
|
|
|
|
7z a -mx9 -t7z node_pdb.7z node.pdb > nul
|
|
|
|
|
|
|
|
echo Creating node_pdb.zip
|
|
|
|
del node_pdb.zip > nul 2> nul
|
|
|
|
7z a -mx9 -tzip node_pdb.zip node.pdb > nul
|
|
|
|
|
|
|
|
cd ..
|
|
|
|
echo Package created!
|
|
|
|
goto package_done
|
|
|
|
:package_error
|
|
|
|
cd ..
|
|
|
|
exit /b 1
|
|
|
|
:package_done
|
|
|
|
|
2011-09-14 23:51:49 +02:00
|
|
|
:msi
|
|
|
|
@rem Skip msi generation if not requested
|
2018-06-23 21:42:12 +02:00
|
|
|
if not defined msi goto install-doctools
|
2013-03-01 01:56:37 +01:00
|
|
|
|
|
|
|
:msibuild
|
2015-08-13 18:14:34 +02:00
|
|
|
echo Building node-v%FULLVERSION%-%target_arch%.msi
|
2017-11-17 18:54:06 +01:00
|
|
|
set "msbsdk="
|
|
|
|
if defined WindowsSDKVersion set "msbsdk=/p:WindowsTargetPlatformVersion=%WindowsSDKVersion:~0,-1%"
|
2019-12-11 06:51:23 +01:00
|
|
|
msbuild "%~dp0tools\msvs\msi\nodemsi.sln" /m /t:Clean,Build %msbsdk% /p:PlatformToolset=%PLATFORM_TOOLSET% /p:WixSdkDir="%WIXSDKDIR%" /p:Configuration=%config% /p:Platform=%target_arch% /p:NodeVersion=%NODE_VERSION% /p:FullVersion=%FULLVERSION% /p:DistTypeDir=%DISTTYPEDIR% %noetw_msi_arg% /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo
|
2011-09-14 23:51:49 +02:00
|
|
|
if errorlevel 1 goto exit
|
|
|
|
|
2016-12-06 21:52:59 +01:00
|
|
|
if not defined sign goto upload
|
2016-10-18 12:26:39 +02:00
|
|
|
call tools\sign.bat node-v%FULLVERSION%-%target_arch%.msi
|
2014-03-26 06:26:17 +01:00
|
|
|
if errorlevel 1 echo Failed to sign msi&goto exit
|
2011-11-23 03:17:12 +01:00
|
|
|
|
2015-06-10 09:05:26 +02:00
|
|
|
:upload
|
|
|
|
@rem Skip upload if not requested
|
2018-06-23 21:42:12 +02:00
|
|
|
if not defined upload goto install-doctools
|
2015-06-10 09:05:26 +02:00
|
|
|
|
|
|
|
if not defined SSHCONFIG (
|
|
|
|
echo SSHCONFIG is not set for upload
|
|
|
|
exit /b 1
|
|
|
|
)
|
2017-04-07 14:53:45 +02:00
|
|
|
|
2015-08-13 18:14:34 +02:00
|
|
|
if not defined STAGINGSERVER set STAGINGSERVER=node-www
|
2015-08-31 09:03:26 +02:00
|
|
|
ssh -F %SSHCONFIG% %STAGINGSERVER% "mkdir -p nodejs/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%"
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2015-08-31 09:03:26 +02:00
|
|
|
scp -F %SSHCONFIG% Release\node.exe %STAGINGSERVER%:nodejs/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%/node.exe
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2015-08-31 09:03:26 +02:00
|
|
|
scp -F %SSHCONFIG% Release\node.lib %STAGINGSERVER%:nodejs/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%/node.lib
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2016-03-24 18:53:42 +01:00
|
|
|
scp -F %SSHCONFIG% Release\node_pdb.zip %STAGINGSERVER%:nodejs/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%/node_pdb.zip
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2016-03-24 18:53:42 +01:00
|
|
|
scp -F %SSHCONFIG% Release\node_pdb.7z %STAGINGSERVER%:nodejs/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%/node_pdb.7z
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2018-11-07 22:06:33 +01:00
|
|
|
scp -F %SSHCONFIG% Release\%TARGET_NAME%.7z %STAGINGSERVER%:nodejs/%DISTTYPEDIR%/v%FULLVERSION%/%TARGET_NAME%.7z
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2018-11-07 22:06:33 +01:00
|
|
|
scp -F %SSHCONFIG% Release\%TARGET_NAME%.zip %STAGINGSERVER%:nodejs/%DISTTYPEDIR%/v%FULLVERSION%/%TARGET_NAME%.zip
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2015-08-31 09:03:26 +02:00
|
|
|
scp -F %SSHCONFIG% node-v%FULLVERSION%-%target_arch%.msi %STAGINGSERVER%:nodejs/%DISTTYPEDIR%/v%FULLVERSION%/
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
2018-11-07 22:06:33 +01:00
|
|
|
ssh -F %SSHCONFIG% %STAGINGSERVER% "touch nodejs/%DISTTYPEDIR%/v%FULLVERSION%/node-v%FULLVERSION%-%target_arch%.msi.done nodejs/%DISTTYPEDIR%/v%FULLVERSION%/%TARGET_NAME%.zip.done nodejs/%DISTTYPEDIR%/v%FULLVERSION%/%TARGET_NAME%.7z.done nodejs/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%.done && chmod -R ug=rw-x+X,o=r+X nodejs/%DISTTYPEDIR%/v%FULLVERSION%/node-v%FULLVERSION%-%target_arch%.* nodejs/%DISTTYPEDIR%/v%FULLVERSION%/win-%target_arch%*"
|
2018-04-05 15:59:10 +02:00
|
|
|
if errorlevel 1 goto exit
|
|
|
|
|
2015-06-10 09:05:26 +02:00
|
|
|
|
2018-06-23 21:42:12 +02:00
|
|
|
:install-doctools
|
2018-12-18 14:11:54 +01:00
|
|
|
REM only install if building doc OR testing doctool OR building addons
|
|
|
|
if not defined doc if not defined build_addons (
|
2018-06-23 21:42:12 +02:00
|
|
|
echo.%test_args% | findstr doctool 1>nul
|
|
|
|
if errorlevel 1 goto :skip-install-doctools
|
|
|
|
)
|
|
|
|
if exist "tools\doc\node_modules\unified\package.json" goto skip-install-doctools
|
|
|
|
SETLOCAL
|
|
|
|
cd tools\doc
|
2018-08-18 23:39:06 +02:00
|
|
|
%npm_exe% ci
|
2018-06-23 21:42:12 +02:00
|
|
|
cd ..\..
|
|
|
|
if errorlevel 1 goto exit
|
|
|
|
ENDLOCAL
|
|
|
|
:skip-install-doctools
|
|
|
|
@rem Clear errorlevel from echo.%test_args% | findstr doctool 1>nul
|
|
|
|
cd .
|
|
|
|
|
2018-03-28 21:16:47 +02:00
|
|
|
:build-doc
|
|
|
|
@rem Build documentation if requested
|
|
|
|
if not defined doc goto run
|
|
|
|
if not exist %node_exe% (
|
|
|
|
echo Failed to find node.exe
|
|
|
|
goto run
|
|
|
|
)
|
|
|
|
mkdir %config%\doc
|
|
|
|
robocopy /e doc\api %config%\doc\api
|
|
|
|
robocopy /e doc\api_assets %config%\doc\api\assets
|
|
|
|
|
|
|
|
for %%F in (%config%\doc\api\*.md) do (
|
2018-09-25 16:46:03 +02:00
|
|
|
%node_exe% tools\doc\generate.js --node-version=v%FULLVERSION% %%F --output-directory=%%~dF%%~pF
|
2018-03-28 21:16:47 +02:00
|
|
|
)
|
|
|
|
|
2011-08-27 00:04:47 +02:00
|
|
|
:run
|
|
|
|
@rem Run tests if requested.
|
|
|
|
|
2018-11-17 21:34:54 +01:00
|
|
|
if not defined build_addons goto build-js-native-api-tests
|
2016-03-24 08:52:27 +01:00
|
|
|
if not exist "%node_exe%" (
|
|
|
|
echo Failed to find node.exe
|
2018-11-17 21:34:54 +01:00
|
|
|
goto build-js-native-api-tests
|
2016-03-24 08:52:27 +01:00
|
|
|
)
|
2017-03-20 22:55:26 +01:00
|
|
|
echo Building addons
|
2016-03-24 08:52:27 +01:00
|
|
|
:: clear
|
|
|
|
for /d %%F in (test\addons\??_*) do (
|
|
|
|
rd /s /q %%F
|
|
|
|
)
|
|
|
|
:: generate
|
|
|
|
"%node_exe%" tools\doc\addon-verify.js
|
2016-09-05 16:08:03 +02:00
|
|
|
if %errorlevel% neq 0 exit /b %errorlevel%
|
2016-03-24 08:52:27 +01:00
|
|
|
:: building addons
|
2018-06-19 11:42:31 +02:00
|
|
|
setlocal
|
|
|
|
set npm_config_nodedir=%~dp0
|
|
|
|
"%node_exe%" "%~dp0tools\build-addons.js" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\addons"
|
|
|
|
if errorlevel 1 exit /b 1
|
|
|
|
endlocal
|
2017-03-20 22:55:26 +01:00
|
|
|
|
2018-11-17 21:34:54 +01:00
|
|
|
:build-js-native-api-tests
|
|
|
|
if not defined build_js_native_api_tests goto build-node-api-tests
|
|
|
|
if not exist "%node_exe%" (
|
|
|
|
echo Failed to find node.exe
|
|
|
|
goto build-node-api-tests
|
|
|
|
)
|
|
|
|
echo Building js-native-api
|
|
|
|
:: clear
|
|
|
|
for /d %%F in (test\js-native-api\??_*) do (
|
|
|
|
rd /s /q %%F
|
|
|
|
)
|
|
|
|
:: building js-native-api
|
|
|
|
setlocal
|
|
|
|
set npm_config_nodedir=%~dp0
|
|
|
|
"%node_exe%" "%~dp0tools\build-addons.js" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\js-native-api"
|
|
|
|
if errorlevel 1 exit /b 1
|
|
|
|
endlocal
|
|
|
|
goto build-node-api-tests
|
|
|
|
|
|
|
|
:build-node-api-tests
|
2020-05-01 13:07:15 +02:00
|
|
|
if not defined build_node_api_tests goto run-tests
|
2017-03-20 22:55:26 +01:00
|
|
|
if not exist "%node_exe%" (
|
|
|
|
echo Failed to find node.exe
|
2020-05-01 13:07:15 +02:00
|
|
|
goto run-tests
|
2017-03-20 22:55:26 +01:00
|
|
|
)
|
2018-11-17 21:34:54 +01:00
|
|
|
echo Building node-api
|
2017-03-20 22:55:26 +01:00
|
|
|
:: clear
|
2018-11-17 21:34:54 +01:00
|
|
|
for /d %%F in (test\node-api\??_*) do (
|
2017-03-20 22:55:26 +01:00
|
|
|
rd /s /q %%F
|
|
|
|
)
|
2018-11-17 21:34:54 +01:00
|
|
|
:: building node-api
|
2018-08-29 17:18:02 +02:00
|
|
|
setlocal
|
|
|
|
set npm_config_nodedir=%~dp0
|
2018-11-17 21:34:54 +01:00
|
|
|
"%node_exe%" "%~dp0tools\build-addons.js" "%~dp0deps\npm\node_modules\node-gyp\bin\node-gyp.js" "%~dp0test\node-api"
|
2018-08-29 17:18:02 +02:00
|
|
|
if errorlevel 1 exit /b 1
|
|
|
|
endlocal
|
2016-03-24 08:52:27 +01:00
|
|
|
goto run-tests
|
|
|
|
|
2012-06-14 00:55:29 +02:00
|
|
|
:run-tests
|
2017-04-17 06:01:00 +02:00
|
|
|
if defined test_check_deopts goto node-check-deopts
|
|
|
|
if defined test_node_inspect goto node-test-inspect
|
|
|
|
goto node-tests
|
|
|
|
|
|
|
|
:node-check-deopts
|
2018-02-07 11:23:26 +01:00
|
|
|
python tools\test.py --mode=release --check-deopts parallel sequential -J
|
2017-04-17 06:01:00 +02:00
|
|
|
if defined test_node_inspect goto node-test-inspect
|
|
|
|
goto node-tests
|
|
|
|
|
|
|
|
:node-test-inspect
|
2016-12-11 23:37:25 +01:00
|
|
|
set USE_EMBEDDED_NODE_INSPECT=1
|
2019-04-06 20:22:45 +02:00
|
|
|
%node_exe% tools\test-npm-package.js --install deps\node-inspect test
|
2016-12-11 23:37:25 +01:00
|
|
|
goto node-tests
|
|
|
|
|
|
|
|
:node-tests
|
2017-02-22 23:05:19 +01:00
|
|
|
if not defined test_npm goto no-test-npm
|
|
|
|
set npm_test_cmd="%node_exe%" tools\test-npm-package.js --install --logfile=test-npm.tap deps\npm test-node
|
|
|
|
echo %npm_test_cmd%
|
|
|
|
%npm_test_cmd%
|
|
|
|
if errorlevel 1 goto exit
|
|
|
|
:no-test-npm
|
|
|
|
|
2017-06-29 00:24:52 +02:00
|
|
|
if "%test_args%"=="" goto test-v8
|
2015-02-28 02:42:49 +01:00
|
|
|
if "%config%"=="Debug" set test_args=--mode=debug %test_args%
|
|
|
|
if "%config%"=="Release" set test_args=--mode=release %test_args%
|
2017-11-29 19:48:33 +01:00
|
|
|
if defined no_cctest echo Skipping cctest because no-cctest was specified && goto run-test-py
|
2018-06-19 21:17:46 +02:00
|
|
|
if not exist "%config%\cctest.exe" echo cctest.exe not found. Run "vcbuild test" or "vcbuild cctest" to build it. && goto run-test-py
|
2016-08-10 11:47:46 +02:00
|
|
|
echo running 'cctest %cctest_args%'
|
|
|
|
"%config%\cctest" %cctest_args%
|
2019-11-30 02:13:48 +01:00
|
|
|
if %errorlevel% neq 0 set exit_code=%errorlevel%
|
2017-11-29 19:48:33 +01:00
|
|
|
:run-test-py
|
2018-02-07 11:23:26 +01:00
|
|
|
echo running 'python tools\test.py %test_args%'
|
|
|
|
python tools\test.py %test_args%
|
2019-11-30 02:13:48 +01:00
|
|
|
if %errorlevel% neq 0 set exit_code=%errorlevel%
|
2017-10-09 14:50:24 +02:00
|
|
|
goto test-v8
|
2017-06-29 00:24:52 +02:00
|
|
|
|
|
|
|
:test-v8
|
2017-09-08 13:44:58 +02:00
|
|
|
if not defined custom_v8_test goto lint-cpp
|
2017-06-29 00:24:52 +02:00
|
|
|
call tools/test-v8.bat
|
|
|
|
if errorlevel 1 goto exit
|
2017-09-08 13:44:58 +02:00
|
|
|
goto lint-cpp
|
2017-03-15 04:12:32 +01:00
|
|
|
|
2017-09-08 13:44:58 +02:00
|
|
|
:lint-cpp
|
|
|
|
if not defined lint_cpp goto lint-js
|
2019-06-06 18:16:08 +02:00
|
|
|
if defined NODEJS_MAKE goto run-make-lint
|
|
|
|
where make > NUL 2>&1 && make -v | findstr /C:"GNU Make" 1> NUL
|
|
|
|
if "%ERRORLEVEL%"=="0" set "NODEJS_MAKE=make PYTHON=python" & goto run-make-lint
|
2019-09-19 15:25:37 +02:00
|
|
|
where wsl > NUL 2>&1
|
2019-06-06 18:16:08 +02:00
|
|
|
if "%ERRORLEVEL%"=="0" set "NODEJS_MAKE=wsl make" & goto run-make-lint
|
|
|
|
echo Could not find GNU Make, needed for linting C/C++
|
2017-09-08 13:44:58 +02:00
|
|
|
goto lint-js
|
2017-07-07 01:03:27 +02:00
|
|
|
|
2019-06-06 18:16:08 +02:00
|
|
|
:run-make-lint
|
|
|
|
%NODEJS_MAKE% lint-cpp
|
|
|
|
goto lint-js
|
2017-03-15 04:12:32 +01:00
|
|
|
|
2017-09-08 13:44:58 +02:00
|
|
|
:lint-js
|
|
|
|
if defined lint_js_ci goto lint-js-ci
|
2018-03-28 21:16:47 +02:00
|
|
|
if not defined lint_js goto lint-md-build
|
2017-12-22 16:53:42 +01:00
|
|
|
if not exist tools\node_modules\eslint goto no-lint
|
2017-09-08 13:44:58 +02:00
|
|
|
echo running lint-js
|
2019-04-06 20:22:45 +02:00
|
|
|
%node_exe% tools\node_modules\eslint\bin\eslint.js --cache --report-unused-disable-directives --rule "linebreak-style: 0" --ext=.js,.mjs,.md .eslintrc.js benchmark doc lib test tools
|
2018-03-28 21:16:47 +02:00
|
|
|
goto lint-md-build
|
2016-03-10 04:40:54 +01:00
|
|
|
|
2017-09-08 13:44:58 +02:00
|
|
|
:lint-js-ci
|
|
|
|
echo running lint-js-ci
|
2019-04-06 20:22:45 +02:00
|
|
|
%node_exe% tools\lint-js.js -J -f tap -o test-eslint.tap benchmark doc lib test tools
|
2018-03-28 21:16:47 +02:00
|
|
|
goto lint-md-build
|
2012-03-08 20:39:39 +01:00
|
|
|
|
2016-03-14 00:08:11 +01:00
|
|
|
:no-lint
|
|
|
|
echo Linting is not available through the source tarball.
|
|
|
|
echo Use the git repo instead: $ git clone https://github.com/nodejs/node.git
|
2018-03-28 21:16:47 +02:00
|
|
|
goto lint-md-build
|
|
|
|
|
|
|
|
:lint-md-build
|
|
|
|
if not defined lint_md_build goto lint-md
|
2018-09-06 22:17:54 +02:00
|
|
|
echo "Deprecated no-op target 'lint_md_build'"
|
2018-03-28 21:16:47 +02:00
|
|
|
goto lint-md
|
|
|
|
|
|
|
|
:lint-md
|
|
|
|
if not defined lint_md goto exit
|
|
|
|
echo Running Markdown linter on docs...
|
|
|
|
SETLOCAL ENABLEDELAYEDEXPANSION
|
|
|
|
set lint_md_files=
|
2018-09-06 22:17:54 +02:00
|
|
|
for /D %%D IN (doc\*) do (
|
2018-03-28 21:16:47 +02:00
|
|
|
for %%F IN (%%D\*.md) do (
|
2018-09-06 22:17:54 +02:00
|
|
|
set "lint_md_files="%%F" !lint_md_files!"
|
2018-03-28 21:16:47 +02:00
|
|
|
)
|
|
|
|
)
|
2019-04-06 20:22:45 +02:00
|
|
|
%node_exe% tools\lint-md.js -q -f %lint_md_files%
|
2018-03-28 21:16:47 +02:00
|
|
|
ENDLOCAL
|
2017-09-17 01:43:54 +02:00
|
|
|
goto exit
|
2016-03-14 00:08:11 +01:00
|
|
|
|
2015-02-28 02:42:49 +01:00
|
|
|
:create-msvs-files-failed
|
|
|
|
echo Failed to create vc project files.
|
2018-06-07 18:26:02 +02:00
|
|
|
del .used_configure_flags
|
2020-03-09 18:07:28 +01:00
|
|
|
set exit_code=1
|
2015-02-28 02:42:49 +01:00
|
|
|
goto exit
|
|
|
|
|
2011-08-24 08:14:56 +02:00
|
|
|
:help
|
2020-05-08 00:49:14 +02:00
|
|
|
echo vcbuild.bat [debug/release] [msi] [doc] [test/test-all/test-addons/test-js-native-api/test-node-api/test-benchmark/test-internet/test-pummel/test-simple/test-message/test-tick-processor/test-known-issues/test-node-inspect/test-check-deopts/test-npm/test-async-hooks/test-v8/test-v8-intl/test-v8-benchmarks/test-v8-all] [ignore-flaky] [static/dll] [noprojgen] [projgen] [small-icu/full-icu/without-intl] [nobuild] [nosnapshot] [noetw] [ltcg] [licensetf] [sign] [ia32/x86/x64/arm64] [vs2019] [download-all] [lint/lint-ci/lint-js/lint-js-ci/lint-md] [lint-md-build] [package] [build-release] [upload] [no-NODE-OPTIONS] [link-module path-to-module] [debug-http2] [debug-nghttp2] [clean] [cctest] [no-cctest] [openssl-no-asm] [experimental-quic]
|
2011-08-24 08:14:56 +02:00
|
|
|
echo Examples:
|
2017-09-14 15:27:13 +02:00
|
|
|
echo vcbuild.bat : builds release build
|
|
|
|
echo vcbuild.bat debug : builds debug build
|
|
|
|
echo vcbuild.bat release msi : builds release build and MSI installer package
|
|
|
|
echo vcbuild.bat test : builds debug build and runs tests
|
|
|
|
echo vcbuild.bat build-release : builds the release distribution as used by nodejs.org
|
|
|
|
echo vcbuild.bat link-module my_module.js : bundles my_module as built-in module
|
2018-03-28 21:16:47 +02:00
|
|
|
echo vcbuild.bat lint : runs the C++, documentation and JavaScript linter
|
2017-11-29 19:48:33 +01:00
|
|
|
echo vcbuild.bat no-cctest : skip building cctest.exe
|
2011-08-24 08:14:56 +02:00
|
|
|
goto exit
|
|
|
|
|
|
|
|
:exit
|
2019-12-13 04:36:14 +01:00
|
|
|
if %errorlevel% neq 0 exit /b %errorlevel%
|
2019-11-30 02:13:48 +01:00
|
|
|
exit /b %exit_code%
|
2013-03-01 21:03:44 +01:00
|
|
|
|
2017-06-29 00:24:52 +02:00
|
|
|
|
2013-03-01 21:03:44 +01:00
|
|
|
rem ***************
|
|
|
|
rem Subroutines
|
|
|
|
rem ***************
|
|
|
|
|
|
|
|
:getnodeversion
|
|
|
|
set NODE_VERSION=
|
2015-06-10 09:05:26 +02:00
|
|
|
set TAG=
|
|
|
|
set FULLVERSION=
|
2018-02-07 11:23:26 +01:00
|
|
|
|
|
|
|
for /F "usebackq tokens=*" %%i in (`python "%~dp0tools\getnodeversion.py"`) do set NODE_VERSION=%%i
|
2015-06-10 09:05:26 +02:00
|
|
|
if not defined NODE_VERSION (
|
2015-08-13 18:14:34 +02:00
|
|
|
echo Cannot determine current version of Node.js
|
2015-06-10 09:05:26 +02:00
|
|
|
exit /b 1
|
|
|
|
)
|
|
|
|
|
|
|
|
if not defined DISTTYPE set DISTTYPE=release
|
|
|
|
if "%DISTTYPE%"=="release" (
|
|
|
|
set FULLVERSION=%NODE_VERSION%
|
2017-06-28 20:09:00 +02:00
|
|
|
goto distexit
|
2015-06-10 09:05:26 +02:00
|
|
|
)
|
|
|
|
if "%DISTTYPE%"=="custom" (
|
|
|
|
if not defined CUSTOMTAG (
|
|
|
|
echo "CUSTOMTAG is not set for DISTTYPE=custom"
|
|
|
|
exit /b 1
|
|
|
|
)
|
|
|
|
set TAG=%CUSTOMTAG%
|
|
|
|
)
|
|
|
|
if not "%DISTTYPE%"=="custom" (
|
|
|
|
if not defined DATESTRING (
|
|
|
|
echo "DATESTRING is not set for nightly"
|
|
|
|
exit /b 1
|
|
|
|
)
|
|
|
|
if not defined COMMIT (
|
|
|
|
echo "COMMIT is not set for nightly"
|
|
|
|
exit /b 1
|
|
|
|
)
|
|
|
|
if not "%DISTTYPE%"=="nightly" (
|
|
|
|
if not "%DISTTYPE%"=="next-nightly" (
|
|
|
|
echo "DISTTYPE is not release, custom, nightly or next-nightly"
|
|
|
|
exit /b 1
|
|
|
|
)
|
|
|
|
)
|
|
|
|
set TAG=%DISTTYPE%%DATESTRING%%COMMIT%
|
|
|
|
)
|
|
|
|
set FULLVERSION=%NODE_VERSION%-%TAG%
|
2017-06-28 20:09:00 +02:00
|
|
|
|
|
|
|
:distexit
|
|
|
|
if not defined DISTTYPEDIR set DISTTYPEDIR=%DISTTYPE%
|
2018-11-07 22:06:33 +01:00
|
|
|
set TARGET_NAME=node-v%FULLVERSION%-win-%target_arch%
|
2017-06-28 20:09:00 +02:00
|
|
|
goto :EOF
|