111 lines
3.1 KiB
Bash
Executable File
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
|