emulith-1.30norayr-overlay
download
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit flag-o-matic toolchain-funcs
DESCRIPTION="ETH Lilith Modula-2 computer emulator"
HOMEPAGE="http://pascal.hansotten.com/niklaus-wirth/lilith/emulith/"
SRC_URI="
http://pascal.hansotten.com/uploads/lilith/Emulith_v13.tgz -> ${P}.tgz
http://pascal.hansotten.com/uploads/lilith/docu/LilithHandbook_Aug82.pdf
tools? (
http://pascal.hansotten.com/uploads/lilith/ETH_Disks.zip
http://pascal.hansotten.com/uploads/lilith/medos.zip
http://pascal.hansotten.com/uploads/lilith/medos_txt.zip
)
"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc ~x86"
IUSE="+floppy tools compiler"
RDEPEND="
x11-libs/fltk:1[opengl]
x11-libs/libX11
x11-libs/libXft
media-libs/libjpeg-turbo
media-libs/libpng
"
DEPEND="${RDEPEND}"
S="${WORKDIR}"
src_prepare() {
default
local fltk_cflags_escaped="-Ifltk"
local fltk_libdir_escaped="fltk/lib"
sed -i \
-e "s|-Ifltk|${fltk_cflags_escaped}|g" \
-e "s|fltk/lib|${fltk_libdir_escaped}|g" \
Makefile || die "sed failed"
# Undefine all b0..b7 before FLTK includes to prevent macro collision
sed -i '/#include "lilith.h"/a \
#ifdef b0\n#undef b0\n#endif\n\
#ifdef b1\n#undef b1\n#endif\n\
#ifdef b2\n#undef b2\n#endif\n\
#ifdef b3\n#undef b3\n#endif\n\
#ifdef b4\n#undef b4\n#endif\n\
#ifdef b5\n#undef b5\n#endif\n\
#ifdef b6\n#undef b6\n#endif\n\
#ifdef b7\n#undef b7\n#endif' \
Src/fltk_cde.c || die "sed undef b0-b7 failed"
}
src_compile() {
append-cxxflags $(fltk-config --cxxflags)
append-ldflags $(fltk-config --ldflags)
emake lin \
CXX="$(tc-getCXX)" \
CC="$(tc-getCC)" \
STRIP=true \
CFLAGS="${CFLAGS}" \
CXXFLAGS="${CXXFLAGS}"
if use tools; then
emake fs
fi
}
src_install() {
# Install main binary as emulith-bin
newbin emulith emulith-bin || die
# Install wrapper script as emulith
cat > "${T}/emulith" << 'EOF'
#!/bin/sh
cd /usr/share/emulith || exit 1
exec /usr/bin/emulith-bin "$@"
EOF
dobin "${T}/emulith" || die
chmod +x "${ED}/usr/bin/emulith" || die
# Install optional support tools with prefix
if use tools; then
for bin in lft pp dmp; do
newbin support/$bin emulith-$bin || die
done
fi
# Core runtime files
insinto /usr/share/emulith
doins -r img mcode ascii.def emulith.ini || die
# Optional floppy files
if use floppy; then
insinto /usr/share/emulith/floppy
doins floppy/* || die
fi
# Optional compiler files: install and extract zips
if use compiler; then
insinto /usr/share/emulith/compiler
doins "${DISTDIR}"/ETH_Disks.zip "${DISTDIR}"/medos*.zip || die
local compdir="${ED}/usr/share/emulith/compiler"
mkdir -p "${compdir}" || die
unzip -q -o "${DISTDIR}/ETH_Disks.zip" -d "${compdir}" || die "unzip ETH_Disks failed"
unzip -q -o "${DISTDIR}/medos.zip" -d "${compdir}" || die "unzip medos failed"
unzip -q -o "${DISTDIR}/medos_txt.zip" -d "${compdir}" || die "unzip medos_txt failed"
fi
# Documentation
dodoc "${DISTDIR}/LilithHandbook_Aug82.pdf"
dodoc docu/Emulith_Manual_1.3.pdf docu/18-03-2012.txt || die
# Create writable user directory
keepdir /var/lib/emulith
dosym ../../var/lib/emulith /usr/share/emulith/userdata || die
}
pkg_postinst() {
elog "To start the emulator:"
elog " \$ emulith"
elog
elog "Default disk images are installed to:"
elog " /usr/share/emulith/img"
elog
elog "Create writable copies in your home directory:"
elog " mkdir -p ~/.emulith/img"
elog " cp /usr/share/emulith/img/* ~/.emulith/img/"
elog
if use compiler; then
elog "Compiler-related disk images (ETH_Disks.zip, medos.zip) installed in:"
elog " /usr/share/emulith/compiler"
fi
}