Установка Pascalabcnet в Calculate

Никто не желает порадовать школьников в преддверии нового года рабочим ebuild?

Лучшее – детям

Давайте попробую (не судите строго, в каких-то моментах проявил вольность):

# eix-sync && eix-update
...
База данных содержит 19130 пакетов в 172 категориях
 * Вызов eix-diff
[N]   >> dev-lang/pascalabcnet (~9999) [3]: PascalABC.NET is a Pascal programming language that implements classic Pascal, most Delphi language features, as well as a number of their own extensions
 * Статистика времени:
...
# equery list -op dev-lang/pascalabcnet

 * Searching for pascalabcnet in dev-lang ...
[--O] [ ~] dev-lang/pascalabcnet-3.9.0-r3390:0
[--O] [ ~] dev-lang/pascalabcnet-9999:0
# eix dev-lang/pascalabcne
* dev-lang/pascalabcnet [1]
     Доступные версии:      ~3.9.0-r3390^ms ~9999^ms {+chm gtk2}
     Домашняя страница:     http://pascalabc.net/
     Описание:              PascalABC.NET is a Pascal programming language that implements classic Pascal, most Delphi language features, as well as a number of their own extensions

[1] "custom" /var/calculate/repos/custom
# emerge -av dev-lang/pascalabcnet

Local copy of remote index is up-to-date and will be used.

Local copy of remote index is up-to-date and will be used.

These are the packages that would be merged, in order:

Calculating dependencies... done!
Dependency resolution took 10.40 s (backtrack: 0/20).

[binary  N     ] acct-group/geoclue-0-r2::gentoo  12 KiB
[binary  N     ] acct-user/geoclue-0-r2::gentoo  0 KiB
[binary  N     ] dev-libs/chmlib-0.40-r2::gentoo  USE="examples -static-libs" 49 KiB
[binary  N     ] dev-libs/libzip-1.9.2:0/5::gentoo  USE="bzip2 ssl zstd -gnutls -lzma -mbedtls -static-libs -test -tools" 246 KiB
[binary  N     ] dev-lang/mono-6.12.0.199-r2::gentoo  USE="minimal nls -doc -pax-kernel (-selinux) -xen" ABI_X86="32 (64) (-x32)" 0 KiB
[binary  NS    ] dev-qt/qtwebchannel-5.15.14:5/5.15::gentoo [6.7.3:6/6.7.3::gentoo] USE="qml -debug% -test" 101 KiB
[binary  N     ] dev-qt/qtpositioning-5.15.14:5/5.15::gentoo  USE="geoclue qml -debug -test" 337 KiB
[binary  N     ] app-misc/geoclue-2.7.2:2.0::gentoo  USE="introspection -gtk-doc -modemmanager -vala -zeroconf" 206 KiB
[binary  N     ] dev-qt/qtwebengine-5.15.14_p20240510:5/5.15::gentoo  USE="alsa geolocation jumbo-build pulseaudio screencast system-icu widgets -bindist -debug -designer -kerberos -test" 50901 KiB
[ebuild  N    ~] app-text/kchmviewer-8.0::gentoo  305 KiB
[ebuild  N    ~] dev-lang/pascalabcnet-9999::custom  USE="chm -gtk2" 7883 KiB

Total: 11 packages (10 new, 1 in new slot, 9 binaries), Size of downloads: 60036 KiB

The following keyword changes are necessary to proceed:
 (see "package.accept_keywords" in the portage(5) man page for more details)
# required by dev-lang/pascalabcnet (argument)
=dev-lang/pascalabcnet-9999 ~amd64
# required by dev-lang/pascalabcnet-9999::custom[chm]
# required by dev-lang/pascalabcnet (argument)
=app-text/kchmviewer-8.0 ~amd64

Would you like to add these changes to your config files? [Yes/No] 
# cat /var/calculate/repos/custom/dev-lang/pascalabcnet/pascalabcnet-3.9.0-r3390.ebuild
Спойлер
# Copyright 2020-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit rpm

DESCRIPTION="PascalABC.NET is a Pascal programming language that implements classic Pascal, most Delphi language features, as well as a number of their own extensions"
HOMEPAGE="http://pascalabc.net/"
SRC_URI="amd64? ( http://mirror.rosalinux.ru/rosa/rosa2021.1/repository/x86_64/contrib/release/${P}-1.gitf309df.3-rosa2021.1.x86_64.rpm )"

LICENSE="LGPL-3.0"
SLOT="0"
KEYWORDS="~amd64"
RESTRICT="mirror strip"

IUSE="+chm gtk2"

RDEPEND="
    chm? ( app-text/kchmviewer )
    dev-dotnet/libgdiplus
    dev-lang/mono
    gtk2? ( media-libs/libcanberra[gtk2] )
    gtk2? ( x11-misc/appmenu-gtk-module[gtk2] )
"

DEPEND="${RDEPEND}"

S="${WORKDIR}"

src_unpack() {

    rpm_unpack ${P}-1.gitf309df.3-rosa2021.1.x86_64.rpm

}

src_install() {

    cp -R "${WORKDIR}/usr" "${D}" || die "install failed!"

}

pkg_postinst() {

    if !(use gtk2) ; then
        elog "Если будет докучать ошибка-предупреждение об отсутствующей библиотеке 'appmenu-gtk-module' или 'canberra-gtk-module', то поступите следующим образом:"
        elog ""
        elog "Задайте USE-флаги командой: echo 'dev-lang/pascalabcnet gtk2' >> /etc/portage/package.use/custom && echo 'x11-misc/appmenu-gtk-module gtk2' >> /etc/portage/package.use/custom && echo 'media-libs/libcanberra gtk2' >> /etc/portage/package.use/custom"
        elog ""
        elog "и переустановите программу 'PascalABCNETLinux' следующей командой: emerge -av dev-lang/pascalabcnet"
        elog ""
    fi

}

# cat /var/calculate/repos/custom/dev-lang/pascalabcnet/pascalabcnet-9999.ebuild 
Спойлер
# Copyright 2020-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit unpacker

DESCRIPTION="PascalABC.NET is a Pascal programming language that implements classic Pascal, most Delphi language features, as well as a number of their own extensions"
HOMEPAGE="http://pascalabc.net/"
SRC_URI="amd64? ( https://pascalabc.net/downloads/PascalABCNETLinux.zip )"

LICENSE="LGPL-3.0"
SLOT="0"
KEYWORDS="~amd64"
RESTRICT="mirror strip"

IUSE="+chm gtk2"

RDEPEND="
    chm? ( app-text/kchmviewer )
    dev-dotnet/libgdiplus
    dev-lang/mono
    gtk2? ( media-libs/libcanberra[gtk2] )
    gtk2? ( x11-misc/appmenu-gtk-module[gtk2] )
"

DEPEND="${RDEPEND}"

S="${WORKDIR}"

src_install() {

    local dst_path="opt"

    ###Извлечём файлы дистрибутива по пути:

    insinto "${dst_path}"
    doins -r "PascalABCNETLinux" || die "install failed!"

    insinto "${dst_path}/PascalABCNETLinux"
    doins -r "Samples" || die "install failed!"


    ###Создадим и наполним стартовый сценарий:

    insinto "${dst_path}/PascalABCNETLinux"
    newins - "PascalABCNETLinux.sh" <<_EOF
#!/bin/bash
export MONO_IOMAP=all
export MONO_HELP_VIEWER=kchmviewer
export MONO_REGISTRY_PATH="HOME_VAR/PABCWork.NET"
[ -d "MONO_VAR_REGISTRY_PATH" ] || mkdir -p "MONO_VAR_REGISTRY_PATH"
mono "/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.exe"
_EOF
    sed -i 's|HOME_VAR|\$HOME|g' "${D}/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.sh"
    sed -i 's|MONO_VAR|\$MONO|g' "${D}/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.sh"
    chmod 0755 "${D}/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.sh"


    ###Создадим файл иконки и наполним его:

    base64png="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"

    insinto "${dst_path}/PascalABCNETLinux"
    newins - "PascalABCNETLinux.png"
    base64 -d <<<${base64png} > "${D}/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.png"
    insinto "usr/share/pixmaps"
    doins "${D}/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.png"


    ###Создадим и наполним .desktop-файл:

    insinto "${dst_path}/PascalABCNETLinux"
    newins - "PascalABCNETLinux.desktop" <<_EOF
[Desktop Entry]
Categories=Education;Development;
Comment[ru]=Система программирования PascalABC.NET
Comment=
Exec=/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.sh %F
GenericName[ru_RU]=
GenericName=
Icon=/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.png
MimeType=
Name[ru_RU]=PascalABC.NET for Linux
Name=PascalABC.NET for Linux
StartupNotify=true
Terminal=false
Type=Application
X-KDE-SubstituteUID=false
X-KDE-Username=
_EOF

    insinto "usr/share/applications"
    doins "${D}/${dst_path}/PascalABCNETLinux/PascalABCNETLinux.desktop"

}

pkg_postinst() {

    if !(use gtk2) ; then
        elog "Если будет докучать ошибка-предупреждение об отсутствующей библиотеке 'appmenu-gtk-module' или 'canberra-gtk-module', то поступите следующим образом:"
        elog ""
        elog "Задайте USE-флаги командой: echo 'dev-lang/pascalabcnet gtk2' >> /etc/portage/package.use/custom && echo 'x11-misc/appmenu-gtk-module gtk2' >> /etc/portage/package.use/custom && echo 'media-libs/libcanberra gtk2' >> /etc/portage/package.use/custom"
        elog ""
        elog "и переустановите программу 'PascalABCNETLinux' следующей командой: emerge -av dev-lang/pascalabcnet"
        elog ""
    fi

}

Куда уж без скринов, прикладываю один из:

Спойлер