Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 471330 | Differences between
and this patch

Collapse All | Expand All

(-)a/sys-devel/llvm/llvm-3.1-r2.ebuild (-7 / +91 lines)
Lines 11-17 HOMEPAGE="http://llvm.org/" Link Here
11
SRC_URI="http://llvm.org/releases/${PV}/${P}.src.tar.gz"
11
SRC_URI="http://llvm.org/releases/${PV}/${P}.src.tar.gz"
12
12
13
LICENSE="UoI-NCSA"
13
LICENSE="UoI-NCSA"
14
SLOT="0"
14
SLOT="${PV}"
15
KEYWORDS="amd64 arm ppc x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
15
KEYWORDS="amd64 arm ppc x86 ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
16
IUSE="debug gold +libffi multitarget ocaml test udis86 vim-syntax"
16
IUSE="debug gold +libffi multitarget ocaml test udis86 vim-syntax"
17
17
Lines 27-32 DEPEND="dev-lang/perl Link Here
27
	ocaml? ( dev-lang/ocaml )
27
	ocaml? ( dev-lang/ocaml )
28
	udis86? ( dev-libs/udis86[pic(+)] )"
28
	udis86? ( dev-libs/udis86[pic(+)] )"
29
RDEPEND="dev-lang/perl
29
RDEPEND="dev-lang/perl
30
	app-admin/eselect-llvm
30
	libffi? ( virtual/libffi )
31
	libffi? ( virtual/libffi )
31
	vim-syntax? ( || ( app-editors/vim app-editors/gvim ) )"
32
	vim-syntax? ( || ( app-editors/vim app-editors/gvim ) )"
32
33
Lines 82-88 src_prepare() { Link Here
82
		-i tools/llvm-config/llvm-config.cpp || die "llvm-config sed failed"
83
		-i tools/llvm-config/llvm-config.cpp || die "llvm-config sed failed"
83
84
84
	einfo "Fixing rpath and CFLAGS"
85
	einfo "Fixing rpath and CFLAGS"
85
	sed -e 's,\$(RPATH) -Wl\,\$(\(ToolDir\|LibDir\)),$(RPATH) -Wl\,'"${EPREFIX}"/usr/$(get_libdir)/${PN}, \
86
	sed -e "s@\$(RPATH) -Wl,\$(\(ToolDir\|LibDir\))@\$(RPATH) -Wl,'${EPREFIX}/usr/$(get_libdir)/${PN}-${SLOT}'@" \
86
		-e '/OmitFramePointer/s/-fomit-frame-pointer//' \
87
		-e '/OmitFramePointer/s/-fomit-frame-pointer//' \
87
		-i Makefile.rules || die "rpath sed failed"
88
		-i Makefile.rules || die "rpath sed failed"
88
	if use gold; then
89
	if use gold; then
Lines 164-190 src_install() { Link Here
164
		doins utils/vim/*.vim
165
		doins utils/vim/*.vim
165
	fi
166
	fi
166
167
168
	# Register slot for app-admin/eselect-llvm
169
	local eselect_dir="/usr/share/eselect-llvm/slots/${SLOT}"
170
	dodir "${eselect_dir}"
171
	eselect_dir="${ED}/${eselect_dir}"
172
	echo "${CATEGORY}/${PF}" > "${eselect_dir}/ebuild"
173
174
	with_slot_suffix() {
175
		local file=$(echo "$1" | sed -e "s/-${SLOT}//")
176
		local ext=""
177
		if [[ "${file}" =~ \. ]] ; then
178
			ext=".${file#*.}"
179
		fi
180
		local base="${file%%.*}"
181
		echo "${base}-${SLOT}${ext}"
182
	}
183
184
	make_versioned() {
185
		local dir=$1
186
		local candidates=(${ED%/}/${dir})
187
		if [[ ! ${dir##*/} ]] ; then
188
			dir=${dir%/}
189
			candidates=( "${candidates}"* )
190
		else
191
			dir=$(dirname "${dir}")
192
		fi
193
194
		pushd ${ED%/}/${dir} >/dev/null || die
195
196
		local candidate
197
		for candidate in "${candidates[@]}" ; do
198
			if [[ -h "${candidate}" ]] ; then
199
				# Add slot suffix to symlink target
200
				local target=$(readlink -s "${candidate}")
201
				local slotted_target=$(with_slot_suffix "${target}")
202
				if [[ -e "${target}" ]] || [[ -e "${slotted_target}" ]] ; then
203
					ln -sf "${slotted_target}" "${candidate}" \
204
						|| die "Could not update symlink"
205
				fi
206
			fi
207
208
			local base_name=$(basename "${candidate}")
209
			local slotted_name=$(with_slot_suffix "${base_name}")
210
			mv "${candidate}" "${ED}/${dir}/${slotted_name}" \
211
				|| die "Could not rename ${candidate} to ${slotted_name}"
212
			echo "/${dir#/}/${base_name}" >> "${eselect_dir}/versioned"
213
		done
214
215
		popd >/dev/null || die
216
	}
217
218
	# Trailing slash => version the content
219
	# No trailing slash => version the directory itself
220
	local paths=(
221
		/usr/bin/
222
		/usr/$(get_libdir)/
223
		/usr/include/
224
		/usr/share/man/man1/
225
	)
226
	use vim-syntax && paths+=( /usr/share/vim/vimfiles/syntax/ )
227
228
	local path
229
	for path in "${paths[@]}" ; do
230
		make_versioned "${path}"
231
	done
232
167
	# Fix install_names on Darwin.  The build system is too complicated
233
	# Fix install_names on Darwin.  The build system is too complicated
168
	# to just fix this, so we correct it post-install
234
	# to just fix this, so we correct it post-install
169
	local lib= f= odylib=
235
	local lib= f= odylib=
170
	if [[ ${CHOST} == *-darwin* ]] ; then
236
	if [[ ${CHOST} == *-darwin* ]] ; then
171
		for lib in lib{EnhancedDisassembly,LLVM-${PV},LTO,profile_rt}.dylib {BugpointPasses,LLVMHello}.dylib ; do
237
		for lib in lib{EnhancedDisassembly,LLVM-${PV},LTO,profile_rt}.dylib {BugpointPasses,LLVMHello}.dylib ; do
172
			# libEnhancedDisassembly is Darwin10 only, so non-fatal
238
			# libEnhancedDisassembly is Darwin10 only, so non-fatal
173
			[[ -f ${ED}/usr/lib/${PN}/${lib} ]] || continue
239
			[[ -f ${ED}/usr/lib/${PN}-${SLOT}/${lib} ]] || continue
174
			ebegin "fixing install_name of $lib"
240
			ebegin "fixing install_name of $lib"
175
			install_name_tool \
241
			install_name_tool \
176
				-id "${EPREFIX}"/usr/lib/${PN}/${lib} \
242
				-id "${EPREFIX}"/usr/lib/${PN}-${SLOT}/${lib} \
177
				"${ED}"/usr/lib/${PN}/${lib}
243
				"${ED}"/usr/lib/${PN}-${SLOT}/${lib}
178
			eend $?
244
			eend $?
179
		done
245
		done
180
		for f in "${ED}"/usr/bin/* "${ED}"/usr/lib/${PN}/libLTO.dylib ; do
246
		for f in "${ED}"/usr/bin/* "${ED}"/usr/lib/${PN}-${SLOT}/libLTO.dylib ; do
181
			odylib=$(scanmacho -BF'%n#f' "${f}" | tr ',' '\n' | grep libLLVM-${PV}.dylib)
247
			odylib=$(scanmacho -BF'%n#f' "${f}" | tr ',' '\n' | grep libLLVM-${PV}.dylib)
182
			ebegin "fixing install_name reference to ${odylib} of ${f##*/}"
248
			ebegin "fixing install_name reference to ${odylib} of ${f##*/}"
183
			install_name_tool \
249
			install_name_tool \
184
				-change "${odylib}" \
250
				-change "${odylib}" \
185
					"${EPREFIX}"/usr/lib/${PN}/libLLVM-${PV}.dylib \
251
					"${EPREFIX}"/usr/lib/${PN}-${SLOT}/libLLVM-${PV}.dylib \
186
				"${f}"
252
				"${f}"
187
			eend $?
253
			eend $?
188
		done
254
		done
189
	fi
255
	fi
190
}
256
}
257
258
pkg_postinst() {
259
	if [[ $(eselect ${PN} show) = "(none)" ]] ; then
260
		eselect ${PN} set ${SLOT}
261
	fi
262
}
263
264
pkg_prerm() {
265
	if [[ $(eselect ${PN} show) = ${SLOT} ]] ; then
266
		eselect ${PN} clear
267
	fi
268
}
269
270
pkg_postrm() {
271
	if [[ -z ${REPLACED_BY_VERSION} ]] ; then
272
		eselect ${PN} update
273
	fi
274
}

Return to bug 471330