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 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-devel/llvm-gcc/llvm-gcc-2.8.ebuild,v 1.1 2010/10/06 09:17:40 voyageur Exp $
EAPI=3
inherit libtool flag-o-matic gnuconfig multilib
LLVM_GCC_VERSION=4.2
MY_PV=${LLVM_GCC_VERSION}-${PV/_pre*}
DESCRIPTION="LLVM C front-end"
HOMEPAGE="http://llvm.org"
SRC_URI="http://llvm.org/releases/${PV}/${PN}-${MY_PV}.source.tgz"
LICENSE="GPL-2"
SLOT=0
KEYWORDS="~amd64 ~ppc ~x86 ~ppc-macos"
IUSE="bootstrap fortran multilib nls objc objc++ test"
RDEPEND=">=sys-devel/llvm-$PV"
DEPEND="${RDEPEND}
>=sys-apps/texinfo-4.2-r4
|| ( >=sys-devel/binutils-2.18 >=sys-devel/binutils-apple-3.2.3 )
>=sys-devel/bison-1.875
test? ( dev-util/dejagnu
sys-devel/autogen )"
S=${WORKDIR}/llvm-gcc-${MY_PV}.source
src_prepare() {
#we keep the directory structure suggested by README.LLVM,
mkdir -p "${S}"/obj
# From toolchain eclass
elibtoolize --portage --shallow --no-uclibc
gnuconfig_update
# update configure files
local f
for f in $(grep -l 'autoconf version 2.13' $(find "${S}" -name configure)) ; do
#ebegin " Updating ${f/${S}\/} [LANG]"
ebegin " Updating \"${f/${S}\/}\" [LANG]"
patch "${f}" "${FILESDIR}"/gcc-configure-LANG.patch >& "${T}"/configure-patch.log \
|| eerror "Please file a bug about this"
eend $?
done
sed -i 's|A-Za-z0-9|[:alnum:]|g' gcc/*.awk #215828
if [[ -x contrib/gcc_update ]] ; then
einfo "Touching generated files"
./contrib/gcc_update --touch | \
while read f ; do
einfo " ${f%%...}"
done
fi
}
src_configure() {
gcc_do_filter_flags
# Target options are handled by econf
cd "${S}"/obj
EXTRALANGS=""
use fortran && EXTRALANGS="${EXTRALANGS},fortran"
use objc && EXTRALANGS="${EXTRALANGS},objc"
use objc++ && EXTRALANGS="${EXTRALANGS},obj-c++"
ECONF_SOURCE="${S}" econf --prefix="${EPREFIX}"/usr/$(get_libdir)/${PN}-${MY_PV} \
$(use_enable multilib) \
--program-prefix=${PN}-${MY_PV}- \
--enable-llvm="${EPREFIX}"/usr --enable-languages=c,c++${EXTRALANGS} \
$(use prefix && echo "--with-local-prefix=${EPREFIX}/usr") \
|| die "configure failed"
}
src_compile() {
gcc_do_filter_flags
cd "${S}"/obj
BUILDOPTIONS="LLVM_VERSION_INFO=${MY_PV}"
use bootstrap && BUILDOPTIONS="${BUILDOPTIONS} bootstrap"
emake ${BUILDOPTIONS} || die "emake failed"
}
src_test() {
cd "${S}"/obj
emake -j1 -k check || ewarn "check failed and that sucks :("
}
src_install() {
cd "${S}"/obj
# Do allow symlinks in private gcc include dir as this can break the build
find gcc/include*/ -type l -print0 | xargs -0 rm -f
# Remove generated headers, as they can cause things to break
# (ncurses, openssl, etc).
for x in $(find gcc/include*/ -name '*.h') ; do
grep -q 'It has been auto-edited by fixincludes from' "${x}" \
&& rm -f "${x}"
done
emake DESTDIR="${D}" install || die "installation failed"
rm -rf "${ED}"/usr/share/man/man7
if ! use nls; then
einfo "nls USE flag disabled, not installing locale files"
rm -rf "${ED}"/usr/share/locale
fi
# Add some symlinks
dodir /usr/bin
cd "${ED}/usr/bin"
for X in c++ g++ cpp gcc gcov gccbug ; do
ln -s "${EPREFIX}"/usr/$(get_libdir)/${PN}-${MY_PV}/bin/${PN}-${MY_PV}-${X} llvm-${X}
done
use fortran && \
ln -s "${EPREFIX}"/usr/$(get_libdir)/${PN}-${MY_PV}/bin/${PN}-${MY_PV}-gfortran llvm-gfortran
# Fix install_names on Darwin. The build system is too complicated
# to just fix this, so we correct it post-install
if [[ ${CHOST} == *-darwin* ]] ; then
local f=$(echo "${ED}"usr/$(get_libdir)/${PN}-${MY_PV}/lib/gcc/${CHOST}/${LLVM_GCC_VERSION}*/libstdc++.dylib)
install_name_tool -id "/${f#${D}}" "${f}"
fi
}
gcc_do_filter_flags() {
strip-flags
# In general gcc does not like optimization, and add -O2 where
# it is safe. This is especially true for gcc 3.3 + 3.4
replace-flags -O? -O2
# ... sure, why not?
strip-unsupported-flags
# dont want to funk ourselves
filter-flags '-mabi*' -m31 -m32 -m64
filter-flags '-mcpu=*'
}
|