e7f410de10
It doesn't take that long to load the module, and it's going to make users' life way easier.
53 lines
4.1 KiB
Bash
Executable File
53 lines
4.1 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
export MAKE_FLAGS='-j4'
|
|
export PREFIX="$(pwd)/libsodium-js"
|
|
export EXPORTED_FUNCTIONS='["_crypto_aead_chacha20poly1305_abytes","_crypto_aead_chacha20poly1305_decrypt","_crypto_aead_chacha20poly1305_encrypt","_crypto_aead_chacha20poly1305_keybytes","_crypto_aead_chacha20poly1305_npubbytes","_crypto_aead_chacha20poly1305_nsecbytes","_crypto_auth","_crypto_auth_bytes","_crypto_auth_keybytes","_crypto_auth_verify","_crypto_box_beforenm","_crypto_box_beforenmbytes","_crypto_box_detached","_crypto_box_detached_afternm","_crypto_box_easy","_crypto_box_easy_afternm","_crypto_box_keypair","_crypto_box_macbytes","_crypto_box_noncebytes","_crypto_box_open_detached","_crypto_box_open_detached_afternm","_crypto_box_open_easy","_crypto_box_open_easy_afternm","_crypto_box_publickeybytes","_crypto_box_secretkeybytes","_crypto_box_seed_keypair","_crypto_box_seedbytes","_crypto_generichash","_crypto_generichash_bytes","_crypto_generichash_bytes_max","_crypto_generichash_bytes_min","_crypto_generichash_final","_crypto_generichash_init","_crypto_generichash_keybytes","_crypto_generichash_keybytes_max","_crypto_generichash_keybytes_min","_crypto_generichash_update","_crypto_hash","_crypto_hash_bytes","_crypto_pwhash_scryptsalsa208sha256","_crypto_pwhash_scryptsalsa208sha256_ll","_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive","_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive","_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive","_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive","_crypto_pwhash_scryptsalsa208sha256_saltbytes","_crypto_pwhash_scryptsalsa208sha256_str","_crypto_pwhash_scryptsalsa208sha256_str_verify","_crypto_pwhash_scryptsalsa208sha256_strbytes","_crypto_pwhash_scryptsalsa208sha256_strprefix","_crypto_scalarmult","_crypto_scalarmult_base","_crypto_scalarmult_bytes","_crypto_scalarmult_scalarbytes","_crypto_secretbox_detached","_crypto_secretbox_easy","_crypto_secretbox_keybytes","_crypto_secretbox_macbytes","_crypto_secretbox_noncebytes","_crypto_secretbox_open_detached","_crypto_secretbox_open_easy","_crypto_shorthash","_crypto_shorthash_bytes","_crypto_shorthash_keybytes","_crypto_sign","_crypto_sign_bytes","_crypto_sign_detached","_crypto_sign_ed25519_pk_to_curve25519","_crypto_sign_ed25519_sk_to_curve25519","_crypto_sign_keypair","_crypto_sign_open","_crypto_sign_publickeybytes","_crypto_sign_secretkeybytes","_crypto_sign_seed_keypair","_crypto_sign_seedbytes","_crypto_sign_verify_detached","_randombytes_buf","_randombytes_close","_randombytes_random","_randombytes_set_implementation","_randombytes_stir","_randombytes_uniform","_sodium_bin2hex","_sodium_hex2bin","_sodium_init","_sodium_library_version_major","_sodium_library_version_minor","_sodium_memcmp","_sodium_memzero","_sodium_version_string"]'
|
|
export TOTAL_MEMORY=33554432
|
|
export JS_EXPORTS_FLAGS="-s EXPORTED_FUNCTIONS=${EXPORTED_FUNCTIONS} -s RESERVED_FUNCTION_POINTERS=8"
|
|
export LDFLAGS="-s TOTAL_MEMORY=${TOTAL_MEMORY}"
|
|
|
|
rm -f test/js.done
|
|
|
|
emconfigure ./configure --enable-minimal --disable-shared --prefix="$PREFIX" \
|
|
CFLAGS="-O3" && \
|
|
emmake make clean && \
|
|
emmake make $MAKE_FLAGS install V=1 && \
|
|
emcc -O3 --closure 1 --llvm-lto 1 --memory-init-file 0 $LDFLAGS $JS_EXPORTS_FLAGS \
|
|
"${PREFIX}/lib/libsodium.a" -o "${PREFIX}/lib/libsodium.js" || exit 1
|
|
|
|
if test "x$NODE" = x; then
|
|
for candidate in iojs node nodejs; do
|
|
case $($candidate --version 2>&1) in #(
|
|
v*)
|
|
NODE=$candidate
|
|
break ;;
|
|
esac
|
|
done
|
|
fi
|
|
|
|
if test "x$NODE" = x; then
|
|
echo 'io.js / node.js not found - test suite skipped.' >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Using [${NODE}] as a Javascript runtime."
|
|
|
|
echo 'Compiling the test suite...' && \
|
|
emmake make $MAKE_FLAGS check > /dev/null 2>&1
|
|
|
|
echo 'Running the test suite.'
|
|
echo 'sodium_utils2 and sodium_utils3 are expected to fail in Javascript.'
|
|
(
|
|
cd test/default && \
|
|
for file in *.js; do
|
|
echo "#! /usr/bin/env ${NODE}" > "${file}.tmp"
|
|
fgrep -v '#! /usr/bin/env node' "$file" >> "${file}.tmp"
|
|
chmod +x "${file}.tmp"
|
|
mv -f "${file}.tmp" "$file"
|
|
done
|
|
)
|
|
make $MAKE_FLAGS check || exit 1
|
|
echo 'Done.'
|
|
touch -r "${PREFIX}/lib/libsodium.js" test/js.done
|