docs.sheetjs.com/tests/engines/chakracore.sh
2026-03-09 00:32:12 -04:00

111 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# https://docs.sheetjs.com/docs/demos/engines/chakra
OS=$(uname -s)
ARCH=$(uname -m)
case "$OS" in
Darwin|Linux) ;;
*) echo "Unsupported OS: $OS"; exit 1 ;;
esac
case "$ARCH" in
x86_64) ARCH="x64" ;;
arm64|aarch64) ARCH="arm64" ;;
*) echo "Unsupported architecture: $ARCH"; exit 1 ;;
esac
cd /tmp
rm -rf sheetjs-chakra
mkdir sheetjs-chakra
cd sheetjs-chakra
git clone https://github.com/chakra-core/ChakraCore.git
cd ChakraCore
git checkout 792ee76
cd ..
cd ChakraCore
case "$OS" in
Darwin)
BREW_PREFIX=$(brew --prefix)
# Check for required commands
if ! command -v cmake &> /dev/null; then
echo "cmake not found. Please install cmake (e.g., brew install cmake)"
exit 1
fi
if ! brew list icu4c &> /dev/null; then
echo "icu4c not found. Please install icu4c (e.g., brew install icu4c)"
exit 1
fi
if [ ! -d usr/local/opt ] && [ -d "${BREW_PREFIX}/opt/icu4c" ]; then
mkdir -p usr/local/opt
ln -sf "${BREW_PREFIX}/opt/icu4c" usr/local/opt/icu4c
fi
for f in CMakeLists.txt pal/CMakeLists.txt pal/src/CMakeLists.txt lib/wabt/CMakeLists.txt; do
if [ -f "$f" ] && grep -q "cmake_minimum_required(VERSION 3.2)" "$f"; then
sed -i '' 's/cmake_minimum_required(VERSION 3.2)/cmake_minimum_required(VERSION 4.0)/g' "$f"
fi
done
if [ "$ARCH" = "arm64" ]; then
if grep -q "^operator new(" lib/Common/Memory/Allocator.h 2>/dev/null; then
sed -i '' ':a;N;$!ba;s/#ifndef __PLACEMENT_NEW_INLINE.*#endif/#include <new>/g' lib/Common/Memory/Allocator.h
fi
./build.sh --static --no-icu --test-build -j=8 --no-jit
else
./build.sh --static --icu=${BREW_PREFIX}/opt/icu4c/include --test-build -j=8 --system-icu --no-jit
fi
;;
Linux)
# Check for required commands
if ! command -v cmake &> /dev/null; then
echo "cmake not found. Please install cmake (e.g., sudo apt-get install cmake or sudo pacman -S cmake)"
exit 1
fi
if ! command -v clang++ &> /dev/null; then
echo "clang++ not found. Please install clang (e.g., sudo apt-get install clang or sudo pacman -S clang)"
exit 1
fi
./build.sh --static --embed-icu --test-build -j=8 --no-jit
;;
esac
cd ..
curl -L -O https://docs.sheetjs.com/chakra/sheetjs.ch.cpp
curl -L -O https://docs.sheetjs.com/chakra/Makefile
if [[ "$OS" == "Darwin" && "$ARCH" == "x64" && ! -d /usr/local/opt/icu4c ]]; then
sudo mkdir -p /usr/local/opt 2>/dev/null || true
sudo ln -sf "${BREW_PREFIX}/opt/icu4c" /usr/local/opt 2>/dev/null || true
fi
make
curl -L -O https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js
curl -L -O https://docs.sheetjs.com/pres.numbers
./sheetjs.ch pres.numbers
cp ChakraCore/out/Test/ch .
node -e "fs.writeFileSync('payload.js', 'var payload = \"' + fs.readFileSync('pres.numbers').toString('base64') + '\";')"
cat >global.js <<'EOF'
var global = (function(){ return this; }).call(null);
EOF
cat >chakra.js <<'EOF'
var wb = XLSX.read(payload, {type:'base64'});
console.log(XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]]));
EOF
cat global.js xlsx.full.min.js payload.js chakra.js > xlsx.chakra.js
./ch xlsx.chakra.js