include ../build/Makefile-vars
# See https://ftp.gnu.org/pub/gnu/ncurses/?C=M;O=D
VERSION = 6.3
URL = https://ftp.gnu.org/gnu/ncurses/ncurses-${VERSION}.tar.gz
TARBALL = ${UPSTREAM}/ncurses-${VERSION}.tar.gz
POSIX_WASM = $(shell cowasm-package-path @cowasm/posix-wasm)
TERMCAP_WASM = $(shell cowasm-package-path @cowasm/termcap)
all: wasm ${BUILD_WASM}/test/.built
include ../build/Makefile-rules
# NATIVE -- we do not use this, since pretty much any reasonable native build host has curses already.
# Also, we barely use the native python build...
${DIST_NATIVE}/.built: ${BUILD_NATIVE}/.build
cd ${BUILD_NATIVE} \
&& CC="zig cc ${ZIG_NATIVE_CFLAGS} " \
CXX="zig c++ ${ZIG_NATIVE_CFLAGS} " \
AR="zig ar ${ZIG_NATIVE_CFLAGS} " \
CFLAGS="-Oz -I${POSIX_WASM}" \
CXXFLAGS="-Oz -I${POSIX_WASM}" \
./configure \
--prefix=${DIST_NATIVE} \
--without-ada \
--without-manpages \
--without-progs \
--without-tests \
--without-ticlib \
--enable-termcap \
--disable-stripping \
&& make -j8 \
&& make -j8 install.libs
touch ${DIST_NATIVE}/.built
# WASM.
${BUILD_WASM}/.patched: ${BUILD_WASM}/.build
# Patch terminfo.src, since there are two obscure entries (of the thousands) that prevent "make install" from working.
cd ${BUILD_WASM}/misc && patch -p0 < ${SRC}/00-terminfo.patch
# Obviously, these should be done as patches:
cd ${BUILD_WASM}/ncurses/tty && echo '#include "posix-wasm.h"' | cat - lib_tstp.c > tmp && mv tmp lib_tstp.c
cd ${BUILD_WASM}/progs && echo '#include "posix-wasm.h"' | cat - tset.c > tmp && mv tmp tset.c
cd ${BUILD_WASM}/test && echo '#include "posix-wasm.h"' | cat - picsmap.c > tmp && mv tmp picsmap.c
cd ${BUILD_WASM} && cat ${SRC}/patches/01-disable-ncurses-test.patch | patch -p1
touch ${BUILD_WASM}/.patched
${DIST_WASM}/.built: node_modules ${BUILD_WASM}/.patched
cd ../build && make zig
cd ${BUILD_WASM} \
&& RANLIB="zig ranlib" \
AR="zig ar" \
CC="cowasm-cc" \
CXX="cowasm-c++" \
CFLAGS="-Oz -fvisibility-main -I${TERMCAP_WASM}/include -L${TERMCAP_WASM}/lib -I${POSIX_WASM}" \
CXXFLAGS="-Oz -I${TERMCAP_WASM}/include -L${TERMCAP_WASM}/lib -I${POSIX_WASM}" \
./configure \
--without-ada \
--without-manpages \
--without-tests \
--enable-termcap \
--disable-stripping \
--build=`./config.guess` \
--host=none \
--prefix="${DIST_WASM}" \
--with-build-cc="zig cc" \
&& make -j8 \
&& make -j8 install.libs
# this makes it much easier to use for client libraries:
cd ${DIST_WASM}/include && ln -sf ncurses/curses.h .
# Clear command is pretty useful
cp ${BUILD_WASM}/progs/clear ${DIST_WASM}/bin/clear
touch ${DIST_WASM}/.built
${BUILD_WASM}/test/.built: node_modules ${DIST_WASM}/.built
cd ../build && make zig
cd ${BUILD_WASM}/test \
&& RANLIB="zig ranlib" \
AR="zig ar" \
CC="cowasm-cc" \
CFLAGS="-Oz -fvisibility-main -I${TERMCAP_WASM}/include -I${POSIX_WASM} -I${DIST_WASM}/include" \
LDFLAGS="-L${TERMCAP_WASM}/lib -L${DIST_WASM}/lib -lncurses" \
./configure \
--without-ada \
--without-manpages \
--without-progs \
--without-pthread \
--disable-stripping \
--build=`../config.guess` \
--host=none \
--prefix="${DIST_WASM}" \
--with-build-cc="zig cc" \
&& echo "#undef USE_PTHREADS" >> ncurses_cfg.h \
&& make -j8 install
touch ${BUILD_WASM}/test/.built
${DIST_WASM}/bin/hello: ${DIST_WASM}/.built ${SRC}/hello.c
mkdir -p ${DIST_WASM}/bin
${BIN}/cowasm-cc -Werror=main -v -fvisibility-main -Oz -I${DIST_WASM}/include/ncurses -I${DIST_WASM}/include -L${DIST_WASM}/lib -lncurses ${SRC}/hello.c -o ${DIST_WASM}/bin/hello
test: ${BUILD_WASM}/test/.built
echo "all the (supported) ncurses test programs built successfully"