blob: 66c60c0e2b1c299be52a69ffd27fc2427ab627d1 (
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-lang/gnat/gnat-3.45.ebuild,v 1.10 2007/02/06 08:09:10 genone Exp $
inherit flag-o-matic
MY_PV="3.4.5"
DESCRIPTION="GNAT Ada Compiler"
SRC_URI="ftp://gcc.gnu.org/pub/gcc/releases/gcc-${MY_PV}/gcc-core-${MY_PV}.tar.bz2
ftp://gcc.gnu.org/pub/gcc/releases/gcc-${MY_PV}/gcc-ada-${MY_PV}.tar.bz2
x86? ( http://dev.gentoo.org/~george/src/gcc-3.4-i386-r1.tar.bz2 )
ppc? ( mirror://gentoo/gnat-3.15p-powerpc-unknown-linux-gnu.tar.bz2 )
amd64? ( http://dev.gentoo.org/~george/src/gcc-3.4-amd64.tar.gz )"
HOMEPAGE="http://www.gnat.com/"
DEPEND="=sys-devel/gcc-3.4*
!dev-lang/gnat-gcc
!dev-lang/gnat-gpl"
SLOT="0"
KEYWORDS="amd64 ppc x86"
LICENSE="GMGPL"
IUSE=""
S="${WORKDIR}/gcc-${MY_PV}"
GNATBUILD="${WORKDIR}/build"
case ${ARCH} in
ppc)
GNATBOOT="${WORKDIR}/gnat-3.15p-powerpc-unknown-linux-gnu"
GNATBOOTINST="${GNATBOOT}"
GCC_EXEC_BASE="${GNATBOOT}/lib/gcc-lib"
;;
amd64 | x86)
GNATBOOT="${WORKDIR}/usr"
GCC_EXEC_BASE="${GNATBOOT}/lib/gcc"
;;
esac
src_unpack() {
unpack ${A}
# Install the bootstrap compiler
if [ "${ARCH}" = "amd64" -o "${ARCH}" = "x86" ]; then
cd ${S}/gcc/ada/
patch Make-lang.in < ${FILESDIR}/gnat-3.44-amd64-Make-lang.in.patch
fi
# Prepare the gcc source directory
cd "${S}"
touch gcc/cstamp-h.in
touch gcc/ada/[es]info.h
touch gcc/ada/nmake.ad[bs]
mkdir -p "${GNATBUILD}"
#fixup some hardwired flags
sed -i -e "s:CFLAGS = -O2:CFLAGS = ${CFLAGS}:" \
gcc/ada/Makefile.adalib || die "patching Makefile.adalib failed"
}
src_compile() {
# Set some paths to our bootstrap compiler.
local GCC_EXEC_PREFIX=$(echo ${GCC_EXEC_BASE}/*/*)
local PATH="${GNATBOOT}/bin:${PATH}"
# this should catch one that works
local ADA_OBJECTS_PATH
local ADA_INCLUDE_PATH
for x in $(find "${GCC_EXEC_PREFIX}" -name adalib); do
ADA_OBJECTS_PATH="${x}:${ADA_OBJECTS_PATH}"
done
for x in $(find "${GCC_EXEC_PREFIX}" -name adainclude); do
ADA_INCLUDE_PATH="${x}:${ADA_INCLUDE_PATH}"
done
case ${ARCH} in
ppc)
export LDFLAGS="-L${GCC_EXEC_PREFIX} -L${GNATBOOTINST}"
;;
amd64 | x86)
export LDFLAGS="-L${GCC_EXEC_PREFIX}"
;;
esac
export CC="${GNATBOOT}/bin/gcc"
export LD_LIBRARY_PATH="${GNATBOOT}/lib"
# Configure gcc
cd "${GNATBUILD}"
CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" "${S}"/configure --prefix=/usr \
--program-prefix=gnat \
--enable-languages="c,ada" \
--enable-libada \
--with-gcc \
--enable-threads=posix \
--enable-shared \
--with-system-zlib \
--disable-nls \
--libdir=/usr/lib/ada \
--libexecdir=/usr/libexec/ada \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
|| die "configure failed"
# Compile helper tools
cd "${GNATBOOT}"
cp ${S}/gcc/ada/xtreeprs.adb .
cp ${S}/gcc/ada/xsinfo.adb .
cp ${S}/gcc/ada/xeinfo.adb .
cp ${S}/gcc/ada/xnmake.adb .
gnatmake xtreeprs && \
gnatmake xsinfo && \
gnatmake xeinfo && \
gnatmake xnmake || die "building helper tools"
for i in `find ${S}/gcc/ada -name '*.ad[sb]'`; do \
sed -i -e "s/\"gcc\"/\"gnatgcc\"/g" ${i}; \
done
cd "${GNATBUILD}"
emake bootstrap || die "bootstrap failed"
einfo "building gnatlib_and_tools"
# make rts honor user defined CFLAGS
MAKEOPTS=-j1 emake -C gcc gnatlib_and_tools || die "gnatlib_and_tools failed"
einfo "building shared lib"
rm -f gcc/ada/rts/*.{o,ali} || die
#otherwise make tries to reuse already compiled (without -fPIC) objs..
MAKEOPTS=-j1 emake -C gcc gnatlib-shared LIBRARY_VERSION=3.4 || die "gnatlib-shared failed"
}
src_install() {
# Do not allow symlinks in /usr/lib/gcc/${CHOST}/${MY_PV}/include as
# this can break the build.
for x in ${WORKDIR}/build/gcc/include/*
do
if [ -L ${x} ]
then
rm -f ${x}
fi
done
# Install gnatgcc, tools and native threads library
cd "${GNATBUILD}"
make prefix=${D}/usr \
libdir=${D}/usr/lib/ada \
libexecdir=${D}/usr/libexec/ada \
mandir=${D}/usr/share/man \
infodir=${D}/usr/share/info \
install || die "died while installing"
#above make installs libgcc_s into weird location
#removing it, as it is provided by gcc anyway
#rm -rf ${D}/usr/lib/lib*
# These are all provided by gcc
rm -rf ${D}/usr/share/info/{gcc*,cpp*}
dosym /usr/share/info/gnat_ugn_unw.info /usr/share/info/gnat.info
#on amd64 installer misdetects arch string
# also we need to move appropriate libgcc_s to join the other libs
if [ "${ARCH}" == "amd64" ]; then
local myCHOST="x86_64-unknown-linux-gnu"
mv ${D}/usr/lib/lib64/* ${D}/usr/lib/ada/gcc/${myCHOST}/${MY_PV}/
mv ${D}/usr/lib/lib/* ${D}/usr/lib/ada/gcc/${myCHOST}/${MY_PV}/32/
else
local myCHOST="${CHOST}"
mv ${D}/usr/lib/ada/libgcc_s* ${D}/usr/lib/ada/gcc/${myCHOST}/${MY_PV}/
fi
dodir "/usr/lib/ada/gcc/${myCHOST}/${MY_PV}/rts-native"
# Move the native threads library
cd "${D}/usr/lib/ada/gcc/${myCHOST}/${MY_PV}"
mv adalib adainclude rts-native
# Make native threads the default
ln -s rts-native/adalib adalib
ln -s rts-native/adainclude adainclude
# remove uneeded stuff
rm -rf ${D}/usr/lib/li{b,b64} ${D}/usr/lib/ada/libiberty.a ${D}/usr/include/
}
pkg_postinst() {
# Notify the user of what changed
elog
elog "The compiler has been installed as gnatgcc, and the coverage testing"
elog "tool as gnatgcov."
elog
elog "If you are upgrading from GNAT-3.15p or older you will have to"
elog "reemerge all Ada packages as GNAT-${MY_PV} has updated to a version of"
elog "GCC which is not backwards compatible with 2.8.1."
elog
}
|