@@ -66,6 +66,68 @@ if [ ! -d "$LIBPG_QUERY_DIR" ]; then
6666 cd $PROJECT_ROOT
6767fi
6868
69+ echo " Build libzip for WebAssembly"
70+ LIBZIP_VERSION=1.11.3
71+ LIBZIP_DIR=libzip-$LIBZIP_VERSION
72+ LIBZIP_INSTALL_DIR=" $PROJECT_ROOT /$LIBZIP_DIR /install"
73+
74+ # Check for installed library, not just source directory
75+ if [ ! -f " $LIBZIP_INSTALL_DIR /lib/libzip.a" ]; then
76+ # First, ensure Emscripten's zlib port is built by triggering a compile
77+ # This downloads and builds zlib to the Emscripten cache
78+ echo " int main(){return 0;}" > /tmp/zlib_test.c
79+ emcc -sUSE_ZLIB=1 /tmp/zlib_test.c -o /tmp/zlib_test.js 2> /dev/null || true
80+ rm -f /tmp/zlib_test.c /tmp/zlib_test.js /tmp/zlib_test.wasm
81+
82+ # Get Emscripten cache path and locate zlib
83+ EM_CACHE=$( em-config CACHE)
84+ ZLIB_LIBRARY=" $EM_CACHE /sysroot/lib/wasm32-emscripten/lto/libz.a"
85+ ZLIB_INCLUDE_DIR=" $EM_CACHE /sysroot/include"
86+
87+ echo " Using zlib from Emscripten cache:"
88+ echo " ZLIB_LIBRARY=$ZLIB_LIBRARY "
89+ echo " ZLIB_INCLUDE_DIR=$ZLIB_INCLUDE_DIR "
90+
91+ if [ ! -f " $ZLIB_LIBRARY " ]; then
92+ echo " ERROR: zlib library not found at $ZLIB_LIBRARY "
93+ exit 1
94+ fi
95+
96+ if [ ! -e $LIBZIP_DIR .tar.xz ]; then
97+ wget https://libzip.org/download/libzip-$LIBZIP_VERSION .tar.xz
98+ fi
99+ tar xf $LIBZIP_DIR .tar.xz
100+ cd $LIBZIP_DIR
101+
102+ mkdir -p build && cd build
103+
104+ # Configure libzip for WebAssembly using CMake
105+ # Provide explicit paths to Emscripten's zlib (from its ports system)
106+ # Disable encryption and optional compression to minimize dependencies
107+ emcmake cmake .. \
108+ -DCMAKE_INSTALL_PREFIX=$LIBZIP_INSTALL_DIR \
109+ -DZLIB_LIBRARY=$ZLIB_LIBRARY \
110+ -DZLIB_INCLUDE_DIR=$ZLIB_INCLUDE_DIR \
111+ -DBUILD_SHARED_LIBS=OFF \
112+ -DENABLE_COMMONCRYPTO=OFF \
113+ -DENABLE_GNUTLS=OFF \
114+ -DENABLE_MBEDTLS=OFF \
115+ -DENABLE_OPENSSL=OFF \
116+ -DENABLE_WINDOWS_CRYPTO=OFF \
117+ -DENABLE_BZIP2=OFF \
118+ -DENABLE_LZMA=OFF \
119+ -DENABLE_ZSTD=OFF \
120+ -DBUILD_TOOLS=OFF \
121+ -DBUILD_REGRESS=OFF \
122+ -DBUILD_EXAMPLES=OFF \
123+ -DBUILD_DOC=OFF
124+
125+ emmake make -j$( nproc)
126+ emmake make install
127+
128+ cd $PROJECT_ROOT
129+ fi
130+
69131echo " Download and extract PHP if needed"
70132if [ ! -d " $PHP_PATH " ]; then
71133 if [ ! -e $PHP_PATH .tar.xz ]; then
@@ -94,9 +156,15 @@ cp -r "$SNAPPY_EXT_DIR" "$SNAPPY_EXT_DST"
94156echo " Configure PHP"
95157
96158# Use -Oz for size optimization instead of -O3 for speed
97- export CFLAGS=" -Oz -flto -fPIC -g0 -DZEND_MM_ERROR=0 -I$LIBXML2_INSTALL_DIR /include/libxml2 -I$LIBPG_QUERY_INSTALL_DIR -I$LIBPG_QUERY_INSTALL_DIR /src -sUSE_ZLIB=1"
159+ export CFLAGS=" -Oz -flto -fPIC -g0 -DZEND_MM_ERROR=0 -I$LIBXML2_INSTALL_DIR /include/libxml2 -I$LIBPG_QUERY_INSTALL_DIR -I$LIBPG_QUERY_INSTALL_DIR /src -I $LIBZIP_INSTALL_DIR /include - sUSE_ZLIB=1"
98160export CXXFLAGS=" -Oz -flto -fPIC -g0 -std=c++11 -sUSE_ZLIB=1"
99- export LDFLAGS=" -L$LIBXML2_INSTALL_DIR /lib -L$LIBPG_QUERY_INSTALL_DIR -sUSE_ZLIB=1"
161+ export LDFLAGS=" -L$LIBXML2_INSTALL_DIR /lib -L$LIBPG_QUERY_INSTALL_DIR -L$LIBZIP_INSTALL_DIR /lib -sUSE_ZLIB=1"
162+
163+ # Set PKG_CONFIG_PATH so PHP configure can find libzip
164+ # Note: emconfigure overrides PKG_CONFIG_PATH with PKG_CONFIG_LIBDIR, so we also set LIBZIP_* directly
165+ export PKG_CONFIG_PATH=" $LIBZIP_INSTALL_DIR /lib/pkgconfig:${PKG_CONFIG_PATH:- } "
166+ export LIBZIP_CFLAGS=" -I$LIBZIP_INSTALL_DIR /include"
167+ export LIBZIP_LIBS=" -L$LIBZIP_INSTALL_DIR /lib -lzip"
100168
101169cd $PHP_PATH
102170
@@ -106,6 +174,7 @@ cd $PHP_PATH
106174# - xml, dom, xmlreader, xmlwriter: required by flow-php/etl-adapter-xml
107175# - phar, mbstring: essential PHP extensions
108176# - iconv: required by symfony/polyfill-mbstring
177+ # - zip: required by flow-php/etl-adapter-excel (XLSX files are ZIP archives)
109178
110179# Fix permissions for build scripts
111180chmod +x buildconf build/config-stubs build/shtool 2> /dev/null || true
@@ -143,7 +212,8 @@ emconfigure ./configure \
143212 --enable-xmlwriter \
144213 --enable-pg-query \
145214 --with-pg-query=$LIBPG_QUERY_INSTALL_DIR \
146- --enable-snappy
215+ --enable-snappy \
216+ --with-zip
147217
148218if [ $? -ne 0 ]; then
149219 echo " emconfigure failed. Content of config.log:"
@@ -189,7 +259,7 @@ emcc $CFLAGS $LDFLAGS \
189259 -s ASYNCIFY=1 \
190260 -s STACK_OVERFLOW_CHECK=0 \
191261 -s SAFE_HEAP=0 \
192- libs/libphp.a pib_eval.o $LIBXML2_INSTALL_DIR /lib/libxml2.a $LIBPG_QUERY_INSTALL_DIR /libpg_query.a -o out/php.js
262+ libs/libphp.a pib_eval.o $LIBXML2_INSTALL_DIR /lib/libxml2.a $LIBPG_QUERY_INSTALL_DIR /libpg_query.a $LIBZIP_INSTALL_DIR /lib/libzip.a -o out/php.js
193263
194264echo " Copy outputs to web/landing/assets/wasm"
195265OUTPUT_DIR=" $PROJECT_ROOT /../web/landing/assets/wasm"
0 commit comments