docs.sheetjs.com/tests/engines-chakracore.sh
2025-02-16 23:49:35 -05:00

90 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# https://docs.sheetjs.com/docs/demos/engines/chakra
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 e26c81f
cd ..
cd ChakraCore
## in commit e26c81f in macOS 15.2, the build fails with the following error:
##
##/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/usr/include/c++/v1/new:279:66: error: redefinition of 'operator new'
## 279 | _LIBCPP_NODISCARD_AFTER_CXX17 inline _LIBCPP_HIDE_FROM_ABI void* operator new(std::size_t, void* __p) _NOEXCEPT {
## | ^
##/tmp/sheetjs-chakra/ChakraCore/lib/Common/Memory/Allocator.h:457:1: note: previous definition is here
## 457 | operator new(
## | ^
##
## This patch avoids the issues
cat <<EOF >sheetjs.patch
diff --git a/lib/Common/Memory/Allocator.h b/lib/Common/Memory/Allocator.h
index 5a3a099bc..e05a7390f 100644
--- a/lib/Common/Memory/Allocator.h
+++ b/lib/Common/Memory/Allocator.h
@@ -452,24 +452,7 @@ void AssertValue(void * mem, T value, uint byteCount)
#ifndef __PLACEMENT_NEW_INLINE
#define __PLACEMENT_NEW_INLINE
-_Ret_notnull_
-NO_EXPORT(inline void *) __cdecl
-operator new(
-DECLSPEC_GUARD_OVERFLOW size_t byteSize,
-_In_ void * previousAllocation) throw()
-{
- return previousAllocation;
-}
-
-
-NO_EXPORT(inline void) __cdecl
-operator delete(
-void * allocationToFree, // Allocation to free
-void * previousAllocation // Previously allocated memory
-) throw()
-{
-
-}
+#include <new>
#endif
EOF
git apply sheetjs.patch
./build.sh --static --icu=/usr/local/opt/icu4c/include --test-build -j=8 --no-jit
cd ..
curl -L -O https://docs.sheetjs.com/chakra/sheetjs.ch.cpp
curl -L -O https://docs.sheetjs.com/chakra/Makefile
make
curl -L -O https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js
curl -L -O https://cdn.sheetjs.com/xlsx-latest/package/dist/shim.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 <<EOF >global.js
var global = (function(){ return this; }).call(null);
EOF
cat <<EOF >chakra.js
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