# Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # NOTICE: Before packaging we have to run "ResGen" and "GetDependencies". # See: https://git.alpinelinux.org/aports/tree/community/powershell/APKBUILD # The repackaged tarball contains some C# code generated by that subproject. EAPI=8 DOTNET_PKG_COMPAT="10.0" NUGET_APIS=( "https://api.nuget.org/v3-flatcontainer" "https://www.powershellgallery.com/api/v2" ) NUGETS=" dotnetanalyzers.documentationanalyzers.unstable@1.0.0.59 dotnetanalyzers.documentationanalyzers@1.0.0-beta.59 humanizer.core@2.14.1 json.more.net@2.1.1 jsonpointer.net@5.3.1 jsonschema.net@7.4.0 markdig.signed@0.31.0 markdig.signed@0.44.0 microsoft.applicationinsights@2.23.0 microsoft.bcl.asyncinterfaces@10.0.5 microsoft.codeanalysis.analyzers@3.11.0 microsoft.codeanalysis.analyzers@5.3.0 microsoft.codeanalysis.common@5.0.0 microsoft.codeanalysis.csharp@5.0.0 microsoft.codecoverage@18.0.1 microsoft.extensions.objectpool@10.0.0 microsoft.extensions.objectpool@10.0.5 microsoft.management.infrastructure.runtime.unix@3.0.0 microsoft.management.infrastructure.runtime.win@3.0.0 microsoft.management.infrastructure@3.0.0 microsoft.net.test.sdk@18.0.1 microsoft.netcore.platforms@1.1.2 microsoft.powershell.markdownrender@7.2.1 microsoft.powershell.native@700.0.0-rc.1 microsoft.security.extensions@1.4.0 microsoft.testplatform.objectmodel@18.0.1 microsoft.testplatform.testhost@18.0.1 microsoft.win32.registry.accesscontrol@10.0.5 microsoft.win32.systemevents@10.0.5 microsoft.windows.compatibility@10.0.5 netstandard.library@2.0.3 newtonsoft.json@13.0.3 newtonsoft.json@13.0.4 packagemanagement@1.4.8.1 runtime.android-arm.runtime.native.system.io.ports@10.0.5 runtime.android-arm64.runtime.native.system.io.ports@10.0.5 runtime.android-x64.runtime.native.system.io.ports@10.0.5 runtime.android-x86.runtime.native.system.io.ports@10.0.5 runtime.linux-arm.runtime.native.system.io.ports@10.0.5 runtime.linux-arm64.runtime.native.system.io.ports@10.0.5 runtime.linux-bionic-arm64.runtime.native.system.io.ports@10.0.5 runtime.linux-bionic-x64.runtime.native.system.io.ports@10.0.5 runtime.linux-musl-arm.runtime.native.system.io.ports@10.0.5 runtime.linux-musl-arm64.runtime.native.system.io.ports@10.0.5 runtime.linux-musl-x64.runtime.native.system.io.ports@10.0.5 runtime.linux-x64.runtime.native.system.io.ports@10.0.5 runtime.maccatalyst-arm64.runtime.native.system.io.ports@10.0.5 runtime.maccatalyst-x64.runtime.native.system.io.ports@10.0.5 runtime.native.system.data.sqlclient.sni@4.4.0 runtime.native.system.io.ports@10.0.5 runtime.osx-arm64.runtime.native.system.io.ports@10.0.5 runtime.osx-x64.runtime.native.system.io.ports@10.0.5 runtime.win-arm64.runtime.native.system.data.sqlclient.sni@4.4.0 runtime.win-x64.runtime.native.system.data.sqlclient.sni@4.4.0 runtime.win-x86.runtime.native.system.data.sqlclient.sni@4.4.0 stylecop.analyzers.unstable@1.2.0.556 stylecop.analyzers@1.2.0-beta.556 system.buffers@4.6.1 system.codedom@10.0.5 system.collections.immutable@9.0.14 system.componentmodel.composition.registration@10.0.5 system.componentmodel.composition@10.0.5 system.configuration.configurationmanager@10.0.5 system.data.odbc@10.0.5 system.data.oledb@10.0.5 system.data.sqlclient@4.9.0 system.data.sqlclient@4.9.1 system.diagnostics.eventlog@10.0.5 system.diagnostics.performancecounter@10.0.5 system.directoryservices.accountmanagement@10.0.5 system.directoryservices.protocols@10.0.5 system.directoryservices@10.0.5 system.drawing.common@10.0.5 system.io.packaging@10.0.5 system.io.ports@10.0.5 system.management@10.0.5 system.memory@4.6.3 system.net.http.winhttphandler@10.0.5 system.numerics.vectors@4.6.1 system.reflection.context@10.0.5 system.reflection.metadata@9.0.14 system.runtime.caching@10.0.5 system.runtime.compilerservices.unsafe@6.1.2 system.security.cryptography.pkcs@10.0.5 system.security.cryptography.protecteddata@10.0.5 system.security.cryptography.xml@10.0.0 system.security.cryptography.xml@10.0.5 system.security.permissions@10.0.5 system.servicemodel.http@10.0.652802 system.servicemodel.http@8.1.2 system.servicemodel.netframingbase@10.0.652802 system.servicemodel.nettcp@10.0.652802 system.servicemodel.nettcp@8.1.2 system.servicemodel.primitives@10.0.652802 system.servicemodel.primitives@8.1.2 system.servicemodel.syndication@10.0.5 system.serviceprocess.servicecontroller@10.0.5 system.speech@10.0.5 system.text.encoding.codepages@8.0.0 system.threading.tasks.extensions@4.6.3 system.web.services.description@8.1.2 system.windows.extensions@10.0.5 validation@2.6.68 xunit.abstractions@2.0.3 xunit.analyzers@1.18.0 xunit.assert@2.9.3 xunit.core@2.9.3 xunit.extensibility.core@2.4.0 xunit.extensibility.core@2.9.3 xunit.extensibility.execution@2.4.0 xunit.extensibility.execution@2.9.3 xunit.runner.visualstudio@3.1.5 xunit.skippablefact@1.5.61 xunit@2.9.3 xunitxml.testlogger@8.0.0 " # Additional PowerShell Gallery modules. NUGETS+=" microsoft.powershell.archive@1.2.5 microsoft.powershell.psresourceget@1.2.0 microsoft.powershell.threadjob@2.2.0 packagemanagement@1.4.8.1 powershellget@2.2.5 psreadline@2.4.5 " inherit check-reqs desktop dotnet-pkg xdg-utils DESCRIPTION="Cross-platform automation and configuration tool" HOMEPAGE="https://microsoft.com/powershell/ https://github.com/PowerShell/PowerShell/" SRC_URI=" https://dev.gentoo.org/~xgqt/distfiles/repackaged/${P}.repackaged.tar.xz ${NUGET_URIS} " LICENSE="MIT" SLOT="$(ver_cut 1-2)" KEYWORDS="~amd64 ~arm ~arm64" IUSE="gui vanilla" RDEPEND=" >=dev-libs/libpsl-native-7.4.0:= dev-libs/openssl-compat:1.0.0 sys-libs/pam:0/0 gui? ( dev-util/desktop-file-utils x11-misc/shared-mime-info ) " DEPEND=" ${RDEPEND} " IDEPEND=" app-eselect/eselect-pwsh " CHECKREQS_DISK_BUILD="2G" DOTNET_PKG_PROJECTS=( src/powershell-unix/powershell-unix.csproj src/Modules/PSGalleryModules.csproj ) DOTNET_PKG_RESTORE_EXTRA_ARGS=( -p:"RollForward=Major" -p:"RuntimeIdentifiers=" -p:"TreatWarningsAsErrors=false" ) DOTNET_PKG_BUILD_EXTRA_ARGS=( "${DOTNET_PKG_RESTORE_EXTRA_ARGS[@]}" ) PATCHES=( "${FILESDIR}/pwsh-7.3.3-disable-update-check.patch" ) DOCS=( CHANGELOG CHANGELOG.md CODE_OF_CONDUCT.md README.md docs ) check_requirements_locale() { if [[ "${MERGE_TYPE}" != binary ]] ; then if use elibc_glibc ; then local locales="$(locale -a)" if has en_US.utf8 ${locales} ; then LC_ALL="en_US.utf8" elif has en_US.UTF-8 ${locales} ; then LC_ALL="en_US.UTF-8" else eerror "The locale en_US.utf8 or en_US.UTF-8 is not available." eerror "Please generate en_US.UTF-8 before building ${CATEGORY}/${P}." die "Could not switch to the en_US.UTF-8 locale." fi else LC_ALL="en_US.UTF-8" fi export LC_ALL einfo "Successfully switched to the ${LC_ALL} locale." fi } pkg_pretend() { check-reqs_pkg_pretend check_requirements_locale } pkg_setup() { check-reqs_pkg_setup dotnet-pkg_pkg_setup check_requirements_locale } src_prepare() { if ! use vanilla ; then PATCHES+=( "${FILESDIR}/pwsh-7.5.0-disable-telemetry.patch" ) fi # This is guarded by "RegexGitVersion" in "PowerShell.Common.props". local fake_describe="v${PV}-0-g0" sed -e "s|git describe --abbrev=60 --long|echo ${fake_describe}|g" \ -i ./PowerShell.Common.props || die echo "v${PV}" > ./powershell.version || die dotnet-pkg_src_prepare } src_compile() { einfo 'Copying DLL files for the missing "ref" directory' efsi "${FILESDIR}/pwsh-7.3.3-copy-ref.fsx" "${WORKDIR}/${P}_ref" dotnet-pkg_src_compile } src_test() { local -a test_args=( "${DOTNET_PKG_RESTORE_EXTRA_ARGS[@]}" -p:"RuntimeIdentifier=${DOTNET_PKG_RUNTIME}" "${S}/test/xUnit/xUnit.tests.csproj" ) dotnet-pkg-base_restore "${test_args[@]}" dotnet-pkg-base_test "${test_args[@]}" } src_install() { local dest_root="/usr/share/${PN}-${SLOT}" # Install additional PowerShell Gallery modules. local -a psg_modules=( Microsoft.PowerShell.Archive Microsoft.PowerShell.PSResourceGet Microsoft.PowerShell.ThreadJob PSReadLine PackageManagement PowerShellGet ) local psg_module="" for psg_module in "${psg_modules[@]}" ; do insinto "${dest_root}/Modules/${psg_module}" doins -r "${NUGET_PACKAGES}/${psg_module,,}"/* done dotnet-pkg-base_append_launchervar 'DOTNET_ROLL_FORWARD="Major"' dotnet-pkg-base_append_launchervar 'PSModulePath="${PSModulePath}:${EPREFIX}/usr/share/GentooPowerShell/Modules:"' dotnet-pkg-base_install "${dest_root}" dotnet-pkg-base_dolauncher-portable "${dest_root}/pwsh.dll" "pwsh-${SLOT}" insinto "${dest_root}/ref" doins "${WORKDIR}/${P}_ref"/* # Fix runtime config because we roll forward from .NET 9.0 into .NET >-10.0. sed -i "${ED}/${dest_root}/pwsh.runtimeconfig.json" \ -e "s|.*rollForwardOnNoCandidateFx.*||g" \ || die "sed failed" # Replace "libpsl-native.so" provided by "microsoft.powershell.native". rm "${ED}/${dest_root}/libpsl-native.so" || die dosym -r "/usr/$(get_libdir)/libpsl-native.so" "${dest_root}/libpsl-native.so" # On musl remove "libSystem.IO.Ports.Native.so" linked against glibc. if ! use elibc_glibc ; then ewarn "libSystem.IO.Ports.Native.so is available only for glibc, removing it" rm -f "${ED}/${dest_root}/libSystem.IO.Ports.Native.so" || die fi if use gui ; then newicon ./assets/ps_black_128.svg "powershell-${SLOT}.svg" make_desktop_entry "pwsh-${SLOT} -l" "PowerShell ${SLOT}" \ "powershell-${SLOT}" "ConsoleOnly;System;" "Terminal=true" fi einstalldocs } pkg_postinst() { if use gui ; then xdg_icon_cache_update xdg_desktop_database_update fi eselect pwsh update ifunset } pkg_postrm() { if use gui ; then xdg_icon_cache_update xdg_desktop_database_update fi eselect pwsh update ifunset }