summaryrefslogtreecommitdiff
path: root/dev-lang/ada-bootstrap/ada-bootstrap-12.ebuild
blob: 7bbb7820b86c2e414b0a12f5f8b580b2a0c5d51b (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# Copyright 2024-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

# The binaries in SRC_URI are generated by the following (roughly):
# * taking an amd64 stage3
# * adding USE=ada to make.conf
# * running `crossdev ${CHOST} --ex-gcc -S`
# * running `USE=ada ${CHOST}-emerge -v1 gcc`
# * copy /usr/${CHOST}/var/cache/binpkgs/sys-devel/gcc* into
#   ada-bootstrap-${PV}-${CHOST}.gpkg.tar
#
# The full script is at https://github.com/thesamesam/sam-gentoo-scripts/blob/91558fb51c56a661d6f374507888ff67725ca660/build-ada-bootstraps.
#
# Binaries in SRC_URI are regular Gentoo binpkgs in the GPKG format.
#
# Note: of course, the used GCC on both CBUILD and CHOST
# must be the same version, correspond to ${PV} in ada-bootstrap,
# and be at most the newest stable GCC (ideally older).
inherit unpacker

DESCRIPTION="Binary bootstrap compiler for GNAT (Ada compiler)"
HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Ada"
SRC_URI="
	alpha? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-alpha-unknown-linux-gnu.gpkg.tar
	)
	amd64? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-x86_64-pc-linux-gnu.gpkg.tar
	)
	arm64? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-aarch64-unknown-linux-gnu.gpkg.tar
	)
	arm? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-armv6j-softfp-linux-gnueabi.gpkg.tar
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-armv6j-unknown-linux-gnueabihf.gpkg.tar
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-armv7a-softfp-linux-gnueabi.gpkg.tar
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-armv7a-unknown-linux-gnueabihf.gpkg.tar
	)
	hppa? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-hppa1.1-unknown-linux-gnu.gpkg.tar
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-hppa2.0-unknown-linux-gnu.gpkg.tar
	)
	ppc? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-powerpc-unknown-linux-gnu.gpkg.tar
	)
	ppc64? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-powerpc64le-unknown-linux-gnu.gpkg.tar
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-powerpc64-unknown-linux-gnu.gpkg.tar
	)
	riscv? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-riscv64-unknown-linux-gnu.gpkg.tar
	)
	sparc? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-sparc64-unknown-linux-gnu.gpkg.tar
	)
	s390? (
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-s390-ibm-linux-gnu.gpkg.tar
		https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-s390x-ibm-linux-gnu.gpkg.tar
	)
"
S=${WORKDIR}

LICENSE="GPL-2 GPL-3"
SLOT="0"
KEYWORDS="-* amd64 arm arm64 ~hppa ppc ppc64 ~riscv ~sparc"
IUSE="prefix"

RDEPEND="
	>=dev-libs/gmp-4.3.2:0/10.4
	>=dev-libs/mpfr-2.4.2:0/6
	>=dev-libs/mpc-0.8.1:0/3
	virtual/zlib
	virtual/libiconv
"
BDEPEND="
	prefix? ( dev-util/patchelf )
"

src_unpack() {
	# We want to unpack only the appropriate tarball for CHOST (e.g. on arm).
	TARBALL_TO_UNPACK=

	local archive
	for archive in ${A} ; do
		local tarball_chost=${archive/${P}-}
		tarball_chost=${tarball_chost%%.gpkg.tar}

		if [[ ${tarball_chost} == ${CHOST} ]] ; then
			TARBALL_TO_UNPACK=${archive}
			break
		fi
	done

	if [[ -z ${TARBALL_TO_UNPACK} ]] ; then
		die "No tarball found for CHOST=${CHOST}. Please file a bug at bugs.gentoo.org."
	fi

	unpack_gpkg "${TARBALL_TO_UNPACK}"
}

src_install() {
	local chost=${TARBALL_TO_UNPACK/${P}-}
	chost=${chost%%.gpkg.tar}

	BINPKG=$(find "${WORKDIR}"/ -type d -mindepth 1 -maxdepth 1 -iname 'gcc-*')
	BINPKG="${BINPKG#${WORKDIR}}"

	dodir /usr/lib/ada-bootstrap
	mv "${WORKDIR}"/${BINPKG}/image/usr/ "${ED}"/usr/lib/ada-bootstrap || die

	# Make `gcc-config`-style symlinks
	insinto /usr/lib/ada-bootstrap/bin
	local tool
	for tool in gcc gnat{,bind,chop,clean,kr,link,ls,make,name,prep} ; do
		dosym -r /usr/lib/ada-bootstrap/usr/${chost}/gcc-bin/${PV}/${tool} /usr/lib/ada-bootstrap/bin/${tool}
		dosym -r /usr/lib/ada-bootstrap/usr/${chost}/gcc-bin/${PV}/${tool} /usr/lib/ada-bootstrap/bin/${chost}-${tool}
		dosym -r /usr/lib/ada-bootstrap/usr/${chost}/gcc-bin/${PV}/${tool} /usr/lib/ada-bootstrap/bin/${chost}-${tool}-${PV}
	done

	rm -rf "${ED}"/usr/lib/ada-bootstrap/usr/bin || die
	# This gives us the same layout as older dev-lang/ada-bootstrap
	dosym -r /usr/lib/ada-bootstrap/bin /usr/lib/ada-bootstrap/usr/bin
	dosym -r /usr/lib/ada-bootstrap/usr/libexec /usr/lib/ada-bootstrap/libexec

	if use prefix ; then
		local ret=0
		local interpreter=$(patchelf --print-interpreter "${EPREFIX}"/bin/bash)
		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/usr/lib/ada-bootstrap/usr/bin"
		find "${ED}"/usr/lib/ada-bootstrap/usr/bin -type f -print0 | \
			while IFS=  read -r -d '' filename; do
				patchelf ${filename} --set-interpreter ${interpreter} \; || ret=1
			done
		eend ${ret} || die "patchelf invocation failed"
	fi
}

# TODO: pkg_postinst warning/log?