# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 inherit autotools flag-o-matic multibuild toolchain-funcs virtualx DESCRIPTION="The Next Generation Spice (Electronic Circuit Simulator)" HOMEPAGE="http://ngspice.sourceforge.net" SRC_URI=" https://downloads.sourceforge.net/ngspice/${P}.tar.gz doc? ( https://downloads.sourceforge.net/ngspice/${P}-manual.pdf ) " LICENSE="BSD GPL-2 MPL-2.0" SLOT="0" IUSE="X debug deprecated doc examples fftw +klu openmp +readline +shared tcl" KEYWORDS="~amd64 ~arm64 ~ppc ~riscv ~sparc ~x86 ~x64-macos" RESTRICT="!test? ( test )" DEPEND=" sys-libs/ncurses:= X? ( x11-libs/libXaw x11-libs/libXt x11-libs/libX11 ) fftw? ( sci-libs/fftw:3.0= ) readline? ( sys-libs/readline:= ) tcl? ( dev-lang/tcl:= dev-tcltk/blt ) " RDEPEND="${DEPEND}" DOCS=( ANALYSES AUTHORS BUGS ChangeLog DEVICES FAQ NEWS README README.vdmos Stuarts_Poly_Notes ) pkg_pretend() { [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp } pkg_setup() { [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp MULTIBUILD_VARIANTS=( "binaries" ) use shared && MULTIBUILD_VARIANTS+=( "shared" ) use tcl && MULTIBUILD_VARIANTS+=( "tcl" ) } src_prepare() { default if use tcl; then if use examples; then find examples/tclspice -type f -iname \*tcl -or -iname \*.sh | while read s do sed -i -e 's@../../../src/.libs/libspice.so@libspice.so@g' \ -e 's@package require BLT@package require Tk\npackage require BLT@g' \ -e "s@spice::codemodel \(.*\)/\(.*\).cm@spice::codemodel /usr/$(get_libdir)/ngspice/\2.cm@g" \ "${s}" || die "sed failed" done fi fi eautoreconf multibuild_copy_sources } src_configure() { # -Werror=lto-type-mismatch # https://bugs.gentoo.org/862513 # https://sourceforge.net/p/ngspice/bugs/665/ filter-lto multibuild_foreach_variant ngspice_configure } ngspice_configure() { local myeconfargs pushd "${BUILD_DIR}" &>/dev/null || die if use debug; then myeconfargs=( --enable-debug --enable-ftedebug --enable-cpdebug --enable-sensdebug --enable-asdebug --enable-stepdebug --enable-pzdebug ) else myeconfargs=( --disable-debug --disable-ftedebug --disable-cpdebug --disable-sensdebug --disable-asdebug --disable-stepdebug --disable-pzdebug ) fi # As of March 2021, these do not compile myeconfargs+=( --disable-blktmsdebug --disable-smltmsdebug ) myeconfargs+=( --enable-xspice --enable-cider --disable-rpath $(use_enable klu) $(use_enable openmp) $(use_with fftw fftw3) $(use_with readline) ) if [[ "${MULTIBUILD_VARIANT}" == "shared" ]]; then myeconfargs+=( --with-ngshared ) elif [[ "${MULTIBUILD_VARIANT}" == "tcl" ]]; then myeconfargs+=( --with-tcl="${EPREFIX}/usr/$(get_libdir)" ) else myeconfargs+=( $(use_enable deprecated oldapps) $(use_with X x) ) fi econf "${myeconfargs[@]}" popd &>/dev/null || die } src_compile() { multibuild_foreach_variant ngspice_compile } ngspice_compile() { pushd "${BUILD_DIR}" &>/dev/null || die default popd &>/dev/null || die } src_test() { if ! use debug; then # tests can be only executed for the binaries variant pushd "${WORKDIR}/${P}-binaries" &>/dev/null || die echo "set ngbehavior=mc" > "${HOME}"/.spiceinit || die "Failed to configure ${PN} for running the test suite" virtx default popd &>/dev/null || die else # https://sourceforge.net/p/ngspice/bugs/353/ ewarn ewarn "Skipping tests because they are known to fail in debug mode" ewarn fi } src_install() { multibuild_foreach_variant ngspice_install # merge the installations of all variants local v for v in "${MULTIBUILD_VARIANTS[@]}" ; do cp -a "${ED}/tmp/${v}"/* "${ED}" || die "Failed to combine multibuild installations" done rm -rf "${ED}/tmp" || die use tcl && DOCS+=( README.tcl ) use shared && DOCS+=( README.shared-xspice ) use doc && DOCS+=( "${DISTDIR}"/${P}-manual.pdf ) default if use examples; then if ! use tcl; then rm -rf examples/tclspice || die fi insinto /usr/share/${PN} doins -r examples fi } ngspice_install() { pushd "${BUILD_DIR}" &>/dev/null || die emake DESTDIR="${ED}/tmp/${MULTIBUILD_VARIANT}" install # Strip shared-library and Tcl-module builds to the bare minimum; # all the support files will have been handled by the 'binaries' build. if [[ "${MULTIBUILD_VARIANT}" != "binaries" ]]; then rm -rf "${ED}/tmp/${MULTIBUILD_VARIANT}"/usr/bin{,.debug} || die rm -rf "${ED}/tmp/${MULTIBUILD_VARIANT}"/usr/share || die rm -rf "${ED}/tmp/${MULTIBUILD_VARIANT}"/usr/$(get_libdir)/*.la || die rm -rf "${ED}/tmp/${MULTIBUILD_VARIANT}"/usr/$(get_libdir)/ngspice/*.cm{,.debug} || die fi popd &>/dev/null || die }