# This builds the libpng image manipulation library, which is needed for luatex.
include ../build/Makefile-vars
# See https://github.com/glennrp/libpng/releases
VERSION = 1.6.35
URL = https://github.com/glennrp/libpng/archive/refs/tags/v${VERSION}.tar.gz
TARBALL = ${UPSTREAM}/libpng-${VERSION}.tar.gz
all: deps wasm
include ../build/Makefile-rules
###
# NATIVE
###
ZLIB_NATIVE = ${PACKAGES}/zlib/dist/native
${DIST_NATIVE}/.built: ${BUILD_NATIVE}/.build
cd ../zlib && make native
cd ../build && make zig
rm -rf ${DIST_NATIVE}
cd ${BUILD_NATIVE} \
&& CC="zig cc -I${ZLIB_NATIVE}/include -L${ZLIB_NATIVE}/lib" \
./configure --prefix=${DIST_NATIVE} \
&& make -j8 \
&& make install
touch ${DIST_NATIVE}/.built
###
# WASM
###
${BUILD_WASM}/.patched: ${BUILD_WASM}/.build
mkdir ${BUILD_WASM}/bits
echo "typedef int __jmp_buf;" > ${BUILD_WASM}/bits/setjmp.h
touch ${BUILD_WASM}/.patched
# the __COVERITY__ below makes it not use tmpfile, which we haven't implemented yet.
ZLIB_WASM = $(shell cowasm-package-path @cowasm/zlib)
${DIST_WASM}/.built: node_modules ${BUILD_WASM}/.patched
rm -rf ${DIST_WASM}
cd ../build && make zig
cd ${BUILD_WASM} \
&& CC="cowasm-cc -fvisibility-main -I${ZLIB_WASM}/include -L${ZLIB_WASM}/lib -D__COVERITY__" \
AR="zig ar" \
RANLIB="zig ranlib" \
./configure \
--prefix=${DIST_WASM} \
--host=none \
--disable-shared \
&& make -j8 libpng16.la timepng
mkdir -p ${DIST_WASM}/lib && cp ${BUILD_WASM}/.libs/libpng16.a ${DIST_WASM}/lib/libpng.a
mkdir -p ${DIST_WASM}/include && cp ${BUILD_WASM}/png.h ${BUILD_WASM}/pngconf.h ${BUILD_WASM}/pnglibconf.h ${DIST_WASM}/include/
touch ${DIST_WASM}/.built
test: node_modules ${DIST_WASM}/.built
cowasm ${BUILD_WASM}/timepng ${BUILD_WASM}/pngnow.png