serenity/Ports/ncurses/package.sh

98 lines
3.2 KiB
Bash
Executable file

#!/usr/bin/env -S bash ../.port_include.sh
port='ncurses'
version='6.4'
useconfigure='true'
configopts=(
'--enable-pc-files'
'--enable-sigwinch'
'--enable-term-driver'
'--with-pkg-config=/usr/local/lib/pkgconfig'
'--with-pkg-config-libdir=/usr/local/lib/pkgconfig'
'--with-shared'
'--without-ada'
'--enable-widec'
)
files=(
"https://invisible-mirror.net/archives/ncurses/ncurses-${version}.tar.gz#6931283d9ac87c5073f30b6290c4c75f21632bb4fc3603ac8100812bed248159"
)
check_tic_version() {
local tic_path="$1"
# "ncurses A.B.C" -> "A.B.C" -> "A"
local major_version="$("${tic_path}" -V | cut -d ' ' -f2 | cut -d '.' -f1)"
[ "$major_version" -ge 6 ]
}
get_tic_path() {
# Installation involves generating terminfo files using `tic`.
# It seems MacOS ships with an older version of ncurses which has a
# `tic` binary that cannot properly parse the `terminfo.src` that ships
# with the version we build.
# So ensure that at least tic 6.0 is available.
# See https://github.com/termux/termux-packages/issues/4487#issuecomment-626277493
# and https://lists.gnu.org/archive/html/bug-ncurses/2019-07/msg00020.html.
if command -v tic >/dev/null; then
if check_tic_version 'tic'; then
echo 'tic'
return 0
else
# Check for Homebrew installation.
if command -v brew >/dev/null; then
local cellar_path="$(brew --cellar ncurses)"
local highest_version="$(ls "${cellar_path}" | head -1)"
local tic_path="${cellar_path}/${highest_version}/bin/tic"
if check_tic_version "${tic_path}"; then
echo "${tic_path}"
return 0
fi
fi
fi
fi
return 1
}
pre_configure() {
export CPPFLAGS='-P'
}
install() {
local tic_path="$(get_tic_path)"
if [ ! $? ]; then
echo 'Error: installing cross-compiled ncurses requires locally installed ncurses >= 6.0'
exit 1
fi
echo "Using ${tic_path} from $(${tic_path} -V)"
export TIC_PATH="${tic_path}"
run make DESTDIR="${DESTDIR}" "${installopts[@]}" install
}
post_install() {
# Compatibility symlinks for merged libraries.
for lib in tinfo tic curses; do
ln -svf libncursesw.so "${SERENITY_INSTALL_ROOT}/usr/local/lib/lib${lib}w.so"
done
# Compatibility symlinks for non-w libraries.
for lib in form menu ncurses ncurses++ panel tinfo tic curses; do
ln -svf "lib${lib}w.so" "${SERENITY_INSTALL_ROOT}/usr/local/lib/lib${lib}.so"
done
# Compatibility symlink for the include folder.
# Target folder has to be removed, otherwise we will get `/usr/local/include/ncurses/ncursesw`.
rm -rf "${SERENITY_INSTALL_ROOT}/usr/local/include/ncurses"
ln -svf ncursesw "${SERENITY_INSTALL_ROOT}/usr/local/include/ncurses"
# Compatibility symlink for ports that expect `/usr/local/include/curses.h` and friends.
# FIXME: Is there a logical explanation for all of this? If so, we should clean it up at some point.
for file in $(ls "${SERENITY_INSTALL_ROOT}/usr/local/include/ncursesw"); do
ln -svf "ncursesw/${file}" "${SERENITY_INSTALL_ROOT}/usr/local/include/${file}"
done
}