aboutsummaryrefslogtreecommitdiff
blob: 6c03b45e04d9bb8b70b049b0341a272dcb8fa79d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{10..13} )
inherit python-single-r1

DESCRIPTION="A high-level general-purpose, multi-paradigm, compiled programming language"
HOMEPAGE="https://www.swift.org/"
SRC_URI="amd64? ( https://download.swift.org/${P}-release/fedora39/${P}-RELEASE/${P}-RELEASE-fedora39.tar.gz )"
S="${WORKDIR}/${P}-RELEASE-fedora39/usr"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="-* ~amd64"
REQUIRED_USE="${PYTHON_REQUIRED_USE}"

RESTRICT="bindist mirror test strip"

RDEPEND="
	${PYTHON_DEPS}
	dev-db/sqlite
	dev-lang/python
	dev-libs/libedit
	dev-libs/libxml2
	dev-vcs/git
	net-misc/curl
	sys-devel/binutils[gold]
	sys-devel/gcc
	sys-libs/ncurses
	sys-libs/zlib
"

BDEPEND="dev-util/patchelf"

QA_PREBUILT="*"

src_install() {
	# lib/swift/linux/libicudataswift.so.69.1 has an empty DT_RUNPATH, which
	# fails `rpath_security_checks`. It contains only data, so we can remove its
	# rpath altogether.
	patchelf --remove-rpath lib/swift/linux/libicudataswift.so.69.1

	# The RELEASE tarball is a self-contained portable installation that's
	# _significantly_ easier to leave as-is rather than attempt to splat onto
	# the filesystem; we'll install the contents as-is into
	# `/usr/lib64/swift-{version}` (e.g., `/usr/lib64/swift-5.10.1`) and expose
	# the relevant binaries via linking.
	dest_dir="/usr/lib64/swift-${PV}"
	mkdir -p "${ED}${dest_dir}"
	cp -pPR "${S}" "${ED}${dest_dir}"

	# Swift ships with its own `clang`, `lldb`, etc.; these don't need to be
	# exposed externally, so we'll just symlink Swift-specific binaries into
	# `/usr/bin`.
	find bin -maxdepth 1 \( -type f -o -type l \) \
		\( -name "swift*" -o -name "sourcekit*" \) -executable -print0 |
		while IFS= read -r -d '' exe_path; do
			exe_name="$(basename "$exe_path")"
			dosym -r "${dest_dir}/usr/bin/${exe_name}" "/usr/bin/${exe_name}"
		done
}