102 lines
3.9 KiB
Plaintext
102 lines
3.9 KiB
Plaintext
Build Instructions
|
|
|
|
1. Install jdk8, ant and python
|
|
a) Install the latest jdk8 build from http://jdk8.java.net/download.html (b119+)
|
|
b) Ensure ant is installed and ant -version is 1.8+
|
|
c) Ensure python is installed and python --version is 2.7.5+
|
|
|
|
2. Download node.js
|
|
a) git clone https://github.com/joyent/node.git source
|
|
b) cd source
|
|
c) git checkout v0.10.21
|
|
(do 'git pull' to refresh repo if you get an error saying this version is unknown)
|
|
|
|
3. Clone dependencies (<id> is your java.net id)
|
|
(Strongly recommend that all dependencies be cloned at the same level as node.js)
|
|
|
|
a) git clone git://java.net/avatar-js~libuv-java libuv-java (read-only)
|
|
git clone ssh://<id>@git.java.net/avatar-js~libuv-java libuv-java
|
|
|
|
b) git clone git://java.net/avatar-js~http-parser-java http-parser-java (read-only)
|
|
git clone ssh://<id>@git.java.net/avatar-js~http-parser-java http-parser-java
|
|
|
|
c) git clone git://java.net/avatar-js~src avatar-js (read-only)
|
|
git clone ssh://<id>@git.java.net/avatar-js~src avatar-js
|
|
|
|
d) Download test-ng from http://testng.org/doc/download.html
|
|
unzip bundle and place testng.jar somewhere in your workspace
|
|
|
|
4. Edit ~/.avatar-js.properties to set various locations
|
|
(Ensure that there is no trailing slash after a property value), for example
|
|
|
|
source.home = /ws/source (from 2a)
|
|
libuv.home = /ws/libuv-java (from 3a)
|
|
http-parser.home = /ws/http-parser-java (from 3b)
|
|
avatar-js.home = /ws/avatar-js (from 3c)
|
|
testng.jar = /ws/lib/testng.jar (from 3d)
|
|
|
|
5. Setup environment so that native libraries can be found
|
|
cd avatar-js
|
|
export LD_LIBRARY_PATH=$PWD/dist:$LD_LIBRARY_PATH (linux)
|
|
export DYLD_LIBRARY_PATH=$PWD/dist:$DYLD_LIBRARY_PATH (mac)
|
|
export PATH=%CWD%/dist;%PATH% (windows)
|
|
|
|
6. Configure
|
|
a) ant setup
|
|
|
|
7. Build - ensure ant, jdk8 and appropriate c++ compiler/linker is in PATH
|
|
a) ant jar-all
|
|
b) ant clean-all (to clean project and dependencies)
|
|
c) ant -Dbuild.type=Release jar-all (to build Release configuration)
|
|
|
|
8. Test
|
|
a) might need to set LANG=en_US.UTF-8
|
|
b) Some crypto tests require
|
|
Java Cryptography Extension Unlimited Jurisdiction Policy Files
|
|
to be installed from
|
|
http://www.oracle.com/technetwork/java/javase/downloads/index.html
|
|
follow the instructions in the download, files for Java7 work in Java8
|
|
c) java -jar dist/avatar-js.jar src/test/js/test-runner.js test/simple/
|
|
(test-runner.js supports many options, look at source for help)
|
|
d) java -jar dist/avatar-js.jar src/test/js/test-runner.js test/crypto/
|
|
e) java -jar dist/avatar-js.jar src/test/js/test-runner.js -timeout 180 test/pummel/
|
|
|
|
9. Running applications
|
|
java -jar dist/avatar-js.jar app.js
|
|
|
|
Limitations and Gotchas
|
|
|
|
1. Platforms tested
|
|
a) Ubuntu Linux x64
|
|
b) Mac OS X Mountain Lion
|
|
c) Windows 7 & 8 x64
|
|
|
|
2. Dependencies
|
|
Requires a recent build of jdk8 (b108+)
|
|
|
|
3. Globals - some additional globals are exposed
|
|
a) context of type ScriptContext [http://download.java.net/jdk8/docs/api/javax/script/ScriptContext.html]
|
|
b) __avatar (non-iterable) container for some avatar-specific globals
|
|
|
|
4. Limitations of the vm module
|
|
Objects loaded in a new context and accessed from the current context have some strong limitations -
|
|
a) Only a subset of JavaScript API is available on these objects
|
|
b) equality (==, ===) will not work as expected
|
|
|
|
5. Limitations on __proto__
|
|
a) __proto__ cannot be set to undefined
|
|
affects the ejs module used by express
|
|
|
|
6. No const keyword
|
|
a) the const keyword is not supported, replace with var
|
|
affects the mongodb and grunt modules
|
|
|
|
7. No signal handlers installed by default
|
|
some generate EINVAL (invalid argument)
|
|
the JVM installs some of its own and we do not want to cause conflicts
|
|
an app can install signal handlers as needed using
|
|
process.signals.start('SIGUSR1');
|
|
or
|
|
process.signals.start(43);
|
|
|