# Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 LLVM_COMPAT=( {15..19} ) PYTHON_COMPAT=( python3_{11..14} ) inherit llvm-r1 python-single-r1 unpacker DESCRIPTION="A high-level, general-purpose, multi-paradigm, compiled programming language" HOMEPAGE="https://www.swift.org" SWIFT_PF="${PF/-bin/}" SRC_URI="https://github.com/itaiferber/gentoo-distfiles/releases/download/${CATEGORY}/${SWIFT_PF}/${SWIFT_PF}.gpkg.tar" S="${WORKDIR}" LICENSE="Apache-2.0 GPL-2" SLOT="6/2" KEYWORDS="-* ~amd64" REQUIRED_USE="${PYTHON_REQUIRED_USE}" RESTRICT="strip" RDEPEND=" ${PYTHON_DEPS} !~dev-lang/swift-5.10.1:0 !dev-lang/swift:6/2 >=app-arch/zstd-1.5 >=app-eselect/eselect-swift-1.0-r1 >=dev-db/sqlite-3 >=dev-libs/icu-69 >=dev-libs/libedit-20221030 >=dev-libs/libxml2-2.11.5 >=net-misc/curl-8.9.1 >=sys-libs/ncurses-6 >=virtual/zlib-1.3.1:= dev-lang/python $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}=') " QA_PREBUILT="*" PKG_PREINST_SWIFT_INTENTIONALLY_SET='true' src_unpack() { unpack_gpkg "${SWIFT_PF}.gpkg.tar" } src_install() { mv "${SWIFT_PF}/image/usr" "${ED}" } pkg_preinst() { # After installation, we ideally want the system to have the latest Swift # version set -- but if the system already has a Swift version set and it # isn't the latest version, that's likely an intentional decision that we # don't want to override. local current_swift_version="$(eselect swift show | tail -n1 | xargs)" local latest_swift_version="$(eselect swift show --latest | tail -n1 | xargs)" [[ "${current_swift_version}" == '(unset)' ]] \ || [[ "${current_swift_version}" == "${latest_swift_version}" ]] \ && PKG_PREINST_SWIFT_INTENTIONALLY_SET='false' } pkg_postinst() { # If the system doesn't have Swift intentionally set to an older version, we # can update to the latest. if [[ "${PKG_PREINST_SWIFT_INTENTIONALLY_SET}" == 'false' ]]; then eselect swift update fi # We also want to provide a stable directory which matches our SLOT to avoid # revdep breakages, as patch updates use the same SLOT but otherwise move # the install location on disk. # # See https://bugs.gentoo.org/957730 # # We do this in `pkg_postinst` instead of calling `dosym` in `src_install` # because when upgrading from a major version to a patch version, the major # version is still on disk while the patch version is being installed, so # the existing directory is in use and the symlink fails to install. local major_ver="$(ver_cut 1-2)" if [[ "${PV}" != "${major_ver}" ]]; then local libdir="${EROOT}/usr/$(get_libdir)" ln -fsT "${libdir}/${P}" "${libdir}/${PN}-${major_ver}" || die fi } pkg_postrm() { # We don't want to leave behind symlinks pointing to this Swift version on # removal. local current_swift_version="$(eselect swift show | tail -n1 | xargs)" if [[ "${current_swift_version}" == "${P}" ]]; then eselect swift update fi # If we installed a SLOT symlink, we also want to remove it here. local major_ver="$(ver_cut 1-2)" local link="${EROOT}/usr/$(get_libdir)/${PN}-${major_ver}" if [[ -L "${link}" && "${PV}" != "${major_ver}" ]]; then rm "${link}" fi }