SUMMARY="New curses library"
DESCRIPTION="The Ncurses (new curses) library is a free software emulation of \
curses in System V Release 4.0, and more. It uses Terminfo format, supports \
pads and color and multiple highlights and forms characters and function-key \
mapping, and has all the other SYSV-curses enhancements over BSD Curses.
The ncurses code was developed under GNU/Linux. It has been in use for some \
time with OpenBSD as the system curses library, and on FreeBSD and NetBSD as \
an external package. It should port easily to any ANSI/POSIX-conforming UNIX. \
It has even been ported to OS/2 Warp!
The distribution includes the library and support utilities, including a \
terminfo compiler tic, a decompiler infocmp, clear, tput, tset, and a \
termcap conversion tool captoinfo. Full manual pages are provided for the \
library and tools."
HOMEPAGE="https://www.gnu.org/software/ncurses/ncurses.html"
COPYRIGHT="1998-2018 Free Software Foundation, Inc."
LICENSE="MIT"
REVISION="1"
SOURCE_URI="https://ftpmirror.gnu.org/ncurses/ncurses-$portVersion.tar.gz
	https://ftp.gnu.org/gnu/ncurses/ncurses-$portVersion.tar.gz"
CHECKSUM_SHA256="aa057eeeb4a14d470101eff4597d5833dcef5965331be3528c08d99cebaa0d17"
SOURCE_DIR="ncurses-$portVersion"
PATCHES="ncurses-$portVersion.patchset"

ARCHITECTURES="all"
SECONDARY_ARCHITECTURES="x86_gcc2 x86"

libVersion="$portVersion"
libVersionCompat="$libVersion compat >= 6"
portVersionCompat="$portVersion compat >= 6"

PROVIDES="
	ncurses6$secondaryArchSuffix = $portVersion
	lib:libform$secondaryArchSuffix = $libVersionCompat
	lib:libformw$secondaryArchSuffix = $libVersionCompat
	lib:libmenu$secondaryArchSuffix = $libVersionCompat
	lib:libmenuw$secondaryArchSuffix = $libVersionCompat
	lib:libncurses$secondaryArchSuffix = $libVersionCompat
	lib:libncursesw$secondaryArchSuffix = $libVersionCompat
	lib:libncurses++$secondaryArchSuffix = $libVersionCompat
	lib:libncurses++w$secondaryArchSuffix = $libVersionCompat
	lib:libpanel$secondaryArchSuffix = $libVersionCompat
	lib:libpanelw$secondaryArchSuffix = $libVersionCompat
	"
if [ -z "$secondaryArchSuffix" ]; then
	PROVIDES="$PROVIDES
		cmd:captoinfo = $portVersionCompat
		cmd:clear = $portVersionCompat
		cmd:infocmp = $portVersionCompat
		cmd:infotocap = $portVersionCompat
		cmd:reset = $portVersionCompat
		cmd:tabs = $portVersionCompat
		cmd:tic = $portVersionCompat
		cmd:toe = $portVersionCompat
		cmd:tput = $portVersionCompat
		cmd:tset = $portVersionCompat
		"
fi
REQUIRES="
	haiku$secondaryArchSuffix
	"

PROVIDES_devel="
	ncurses6${secondaryArchSuffix}_devel = $portVersion
	cmd:ncurses6_config${secondaryArchSuffix} = $portVersion
	cmd:ncursesw6_config${secondaryArchSuffix} = $portVersion
	devel:libform$secondaryArchSuffix = $libVersionCompat
	devel:libformw$secondaryArchSuffix = $libVersionCompat
	devel:libmenu$secondaryArchSuffix = $libVersionCompat
	devel:libmenuw$secondaryArchSuffix = $libVersionCompat
	devel:libncurses$secondaryArchSuffix = $libVersionCompat
	devel:libncursesw$secondaryArchSuffix = $libVersionCompat
	devel:libncurses++$secondaryArchSuffix = $libVersionCompat
	devel:libncurses++w$secondaryArchSuffix = $libVersionCompat
	devel:libpanel$secondaryArchSuffix = $libVersionCompat
	devel:libpanelw$secondaryArchSuffix = $libVersionCompat
	"
REQUIRES_devel="
	ncurses6$secondaryArchSuffix == $portVersion base
	"
CONFLICTS_devel="
	ncurses${secondaryArchSuffix}_devel
	"

BUILD_REQUIRES="
	"
BUILD_PREREQUIRES="
	haiku${secondaryArchSuffix}_devel
	cmd:gcc$secondaryArchSuffix
	cmd:grep
	cmd:ld$secondaryArchSuffix
	cmd:libtoolize$secondaryArchSuffix
	cmd:make
	cmd:sed
	"

PATCH()
{
	if [ "$effectiveTargetArchitecture" = x86_gcc2 ]; then
		sed -i 's/=stdc++/=stdc++.r4/' aclocal.m4 configure
	fi
}

doBuild()
{
	if [ $# -lt 1 ]; then
		echo >&2 "Usage: doBuild <targetDir> [ <configureFlags> ... ]"
		exit 1
	fi

	targetDir=$(pwd)/$1
	shift 1

	# Parse additional arguments. "--libs-only" means we only want the
	# libraries, nothing else. "--without-progs" means no programs and no
	# terminfo DB (requires tic).
	local noData
	local libsOnly
	local configureArgs
	local arg
	for arg in $@; do
		case "$arg" in
			--libs-only)
				noData=1
				libsOnly=1
				arg="--without-progs"
				;;
			--without-progs)
				noData=1
				;;
		esac
		configureArgs="$configureArgs $arg"
	done

	rm -rf $targetDir
	mkdir $targetDir

	runConfigure \
		--omit-dirs "dataRootDir docDir" ./configure \
		--with-libtool \
		--enable-termcap \
		--enable-hard-tabs \
		--enable-pc-files \
		$configureArgs
	make $jobArgs

	if [ -z "$noData" ]; then
		# We need LIBRARY_PATH to include the library installation directory,
		# since the installation process for the terminfo database will run tic
		# and the built-in rpath doesn't consider the DESTDIR we're using.
		LIBRARY_PATH="$targetDir/$prefix/lib:$LIBRARY_PATH" \
		make install DESTDIR=$targetDir
	else
		make install.libs DESTDIR=$targetDir
		if [ -z "$libsOnly" ]; then
			make install.includes DESTDIR=$targetDir
			make install.man DESTDIR=$targetDir
		fi
	fi

	# clean up for the next build
	make clean
}

BUILD()
{
	# Unfortunately building only works in the source directory. So we build
	# two times -- once without and once with wide-char support -- installing in
	# temporary directories from which we copy to the actual installation
	# directory in INSTALL().

	# For the secondary architecture we don't want the programs nor the
	# terminfo DB. The main package will depend on the primary package which
	# provides all this.
	local withoutProgramArgs
	if [ -n "$secondaryArchSuffix" ]; then
		withoutProgramArgs="--without-progs"
	fi

	doBuild build-nowidec $withoutProgramArgs
	doBuild build-widec --enable-widec --libs-only
}

INSTALL()
{
	cp -ra build-nowidec/$prefix/. $prefix
	cp -ra build-widec/$prefix/. $prefix

	# remove libtool files
	rm $libDir/lib*.la

	# copy pkg-config files
	mkdir -p $libDir/pkgconfig
	cp build-*/*.pc $libDir/pkgconfig

	# prepare develop/lib
	prepareInstalledDevelLibs \
		libform libmenu libncurses libncurses++ libpanel \
		libformw libmenuw libncursesw libncurses++w libpanelw
	fixPkgconfig

	# fix ncurses[w]6-config
	fixDevelopLibDirReferences $binDir/ncurses6-config $binDir/ncursesw6-config

	# devel package
	packageEntries devel \
		$binDir/ncurses6-config \
		$binDir/ncursesw6-config \
		$developDir \
		$manDir/man3

	# For the secondary architecture package clean up stuff we don't need, since
	# we make it depend on the primary architecture package.
	if [ -n "$secondaryArchSuffix" ]; then
		rm -rf $binDir
		rm -rf $documentationDir
	fi
}
