aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJauhien Piatlicki <jauhien@gentoo.org>2014-08-19 18:20:44 +0200
committerJauhien Piatlicki <jauhien@gentoo.org>2014-08-19 18:56:45 +0200
commit58d26ce35c133546faa33089b977969cfd4b74c9 (patch)
tree17e9b885473b993d5175331ea55bee9552b68f7d /dev-lang
parentMerge pull request #27 from jauhien/sync-with-tree (diff)
downloadrust-58d26ce35c133546faa33089b977969cfd4b74c9.tar.gz
rust-58d26ce35c133546faa33089b977969cfd4b74c9.tar.bz2
rust-58d26ce35c133546faa33089b977969cfd4b74c9.zip
Add slotting to rust ebuilds.
These slots are added: (major.minor) rust release (nightly) nightly version (git) git master branch eselect module was added, that allows switching between different rust versions To make all this work, proper support of --libdir option in rust build system was implemented (previous version did not work), see rust-lang/rust#16552 Until upstream accepts it, it will be maintained downstream
Diffstat (limited to 'dev-lang')
-rw-r--r--dev-lang/rust/files/50rust-mode-gentoo.el3
-rw-r--r--dev-lang/rust/files/rust-0.11.0-libdir.patch270
-rw-r--r--dev-lang/rust/files/rust-9999-libdir.patch113
-rw-r--r--dev-lang/rust/metadata.xml1
-rw-r--r--dev-lang/rust/rust-0.11.0-r1.ebuild (renamed from dev-lang/rust/rust-0.11.0.ebuild)44
-rw-r--r--dev-lang/rust/rust-999.ebuild127
-rw-r--r--dev-lang/rust/rust-9999-r1.ebuild (renamed from dev-lang/rust/rust-9999.ebuild)53
7 files changed, 581 insertions, 30 deletions
diff --git a/dev-lang/rust/files/50rust-mode-gentoo.el b/dev-lang/rust/files/50rust-mode-gentoo.el
index 8686a13..92eb10d 100644
--- a/dev-lang/rust/files/50rust-mode-gentoo.el
+++ b/dev-lang/rust/files/50rust-mode-gentoo.el
@@ -1,2 +1,5 @@
+
+;;; rust-mode site-lisp configuration
+
(add-to-list 'load-path "@SITELISP@")
(require 'rust-mode)
diff --git a/dev-lang/rust/files/rust-0.11.0-libdir.patch b/dev-lang/rust/files/rust-0.11.0-libdir.patch
new file mode 100644
index 0000000..f895e76
--- /dev/null
+++ b/dev-lang/rust/files/rust-0.11.0-libdir.patch
@@ -0,0 +1,270 @@
+This patch adds proper support for --libdir configure option
+See https://github.com/rust-lang/rust/issues/11671 and
+https://github.com/rust-lang/rust/pull/16552
+
+diff -r -u rust-0.11.0.orig/configure rust-0.11.0/configure
+--- rust-0.11.0.orig/configure
++++ rust-0.11.0/configure
+@@ -453,6 +453,14 @@
+
+ valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
+
++case "$CFG_LIBDIR" in
++ "$CFG_PREFIX"/*) CAT_INC=2;;
++ "$CFG_PREFIX"*) CAT_INC=1;;
++ *)
++ err "libdir must begin with the prefix. Use --prefix to set it accordingly.";;
++esac
++CFG_LIBDIR_RELATIVE=`echo ${CFG_LIBDIR} | cut -c$((${#CFG_PREFIX}+${CAT_INC}))-`
++
+ if [ $HELP -eq 1 ]
+ then
+ echo
+@@ -838,6 +846,15 @@
+ do
+ for t in $CFG_TARGET
+ do
++ # host lib dir stage0
++ make_dir $h/stage0/lib
++
++ # target bin dir stage0
++ make_dir $h/stage0/lib/rustlib/$t/bin
++
++ # target lib dir stage0
++ make_dir $h/stage0/lib/rustlib/$t/lib
++
+ for i in 0 1 2 3
+ do
+ # host bin dir
+diff -r -u rust-0.11.0.orig/mk/main.mk rust-0.11.0/mk/main.mk
+--- rust-0.11.0.orig/mk/main.mk
++++ rust-0.11.0/mk/main.mk
+@@ -304,7 +304,11 @@
+ # Destinations of artifacts for the host compiler
+ HROOT$(1)_H_$(3) = $(3)/stage$(1)
+ HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
++ifeq ($(1),0)
++HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/lib
++else
+ HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_LIBDIR_RELATIVE)
++endif
+
+ # Destinations of artifacts for target architectures
+ TROOT$(1)_T_$(2)_H_$(3) = $$(HLIB$(1)_H_$(3))/rustlib/$(2)
+diff -r -u rust-0.11.0.orig/src/etc/install.sh rust-0.11.0/src/etc/install.sh
+--- rust-0.11.0.orig/src/etc/install.sh
++++ rust-0.11.0/src/etc/install.sh
+@@ -35,6 +35,13 @@
+ fi
+ }
+
++need_cmd() {
++ if command -v $1 >/dev/null 2>&1
++ then msg "found $1"
++ else err "need $1"
++ fi
++}
++
+ putvar() {
+ local T
+ eval T=\$$1
+@@ -198,7 +205,16 @@
+ ABSOLUTIFIED="${FILE_PATH}"
+ }
+
+-CFG_SRC_DIR="$(cd $(dirname $0) && pwd)/"
++msg "looking for install programs"
++need_cmd mkdir
++need_cmd printf
++need_cmd cut
++need_cmd grep
++need_cmd uname
++need_cmd tr
++need_cmd sed
++
++CFG_SRC_DIR="$(cd $(dirname $0) && pwd)"
+ CFG_SELF="$0"
+ CFG_ARGS="$@"
+
+@@ -216,16 +232,85 @@
+ step_msg "processing $CFG_SELF args"
+ fi
+
++# Check for mingw or cygwin in order to special case $CFG_LIBDIR_RELATIVE.
++# This logic is duplicated from configure in order to get the correct libdir
++# for Windows installs.
++CFG_OSTYPE=$(uname -s)
++
++case $CFG_OSTYPE in
++
++ MINGW32*)
++ CFG_OSTYPE=pc-mingw32
++ ;;
++
++ MINGW64*)
++ # msys2, MSYSTEM=MINGW64
++ CFG_OSTYPE=w64-mingw32
++ ;;
++
++# Thad's Cygwin identifers below
++
++# Vista 32 bit
++ CYGWIN_NT-6.0)
++ CFG_OSTYPE=pc-mingw32
++ ;;
++
++# Vista 64 bit
++ CYGWIN_NT-6.0-WOW64)
++ CFG_OSTYPE=w64-mingw32
++ ;;
++
++# Win 7 32 bit
++ CYGWIN_NT-6.1)
++ CFG_OSTYPE=pc-mingw32
++ ;;
++
++# Win 7 64 bit
++ CYGWIN_NT-6.1-WOW64)
++ CFG_OSTYPE=w64-mingw32
++ ;;
++esac
++
+ OPTIONS=""
+ BOOL_OPTIONS=""
+ VAL_OPTIONS=""
+
++# On windows we just store the libraries in the bin directory because
++# there's no rpath. This is where the build system itself puts libraries;
++# --libdir is used to configure the installation directory.
++# FIXME: Thise needs to parameterized over target triples. Do it in platform.mk
++CFG_LIBDIR_RELATIVE=lib
++if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
++then
++ CFG_LIBDIR_RELATIVE=bin
++fi
++
++if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
++then
++ CFG_LD_PATH_VAR=PATH
++ CFG_OLD_LD_PATH_VAR=$PATH
++elif [ "$CFG_OSTYPE" = "Darwin" ]
++then
++ CFG_LD_PATH_VAR=DYLD_LIBRARY_PATH
++ CFG_OLD_LD_PATH_VAR=$DYLD_LIBRARY_PATH
++else
++ CFG_LD_PATH_VAR=LD_LIBRARY_PATH
++ CFG_OLD_LD_PATH_VAR=$LD_LIBRARY_PATH
++fi
++
+ flag uninstall "only uninstall from the installation prefix"
+ opt verify 1 "verify that the installed binaries run correctly"
+ valopt prefix "/usr/local" "set installation prefix"
+-# NB This isn't quite the same definition as in `configure`.
+-# just using 'lib' instead of CFG_LIBDIR_RELATIVE
+-valopt libdir "${CFG_PREFIX}/lib" "install libraries"
++# NB This is exactly the same definition as in `configure`.
++valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
++case "$CFG_LIBDIR" in
++ "$CFG_PREFIX"/*) CAT_INC=2;;
++ "$CFG_PREFIX"*) CAT_INC=1;;
++ *)
++ err "libdir must begin with the prefix. Use --prefix to set it accordingly.";;
++esac
++CFG_LIBDIR_RELATIVE=`echo ${CFG_LIBDIR} | cut -c$((${#CFG_PREFIX}+${CAT_INC}))-`
++
+ valopt mandir "${CFG_PREFIX}/share/man" "install man pages in PATH"
+
+ if [ $HELP -eq 1 ]
+@@ -247,11 +332,13 @@
+ if [ -z "${CFG_UNINSTALL}" ]
+ then
+ msg "verifying platform can run binaries"
++ export $CFG_LD_PATH_VAR="${CFG_SRC_DIR}/lib":$CFG_OLD_LD_PATH_VAR
+ "${CFG_SRC_DIR}/bin/rustc" --version > /dev/null
+ if [ $? -ne 0 ]
+ then
+ err "can't execute rustc binary on this platform"
+ fi
++ export $CFG_LD_PATH_VAR=$CFG_OLD_LD_PATH_VAR
+ fi
+ fi
+
+@@ -348,9 +435,9 @@
+ # Decide the destination of the file
+ FILE_INSTALL_PATH="${CFG_PREFIX}/$p"
+
+- if echo "$p" | grep "^lib/" > /dev/null
++ if echo "$p" | grep "^${CFG_LIBDIR_RELATIVE}/" > /dev/null
+ then
+- pp=`echo $p | sed 's/^lib\///'`
++ pp=`echo $p | sed "s%^${CFG_LIBDIR_RELATIVE}/%%"`
+ FILE_INSTALL_PATH="${CFG_LIBDIR}/$pp"
+ fi
+
+@@ -384,24 +471,36 @@
+ need_ok "failed to update manifest"
+
+ # The manifest lists all files to install
+-done < "${CFG_SRC_DIR}/lib/rustlib/manifest.in"
++done < "${CFG_SRC_DIR}/${CFG_LIBDIR_RELATIVE}/rustlib/manifest.in"
+
+ # Sanity check: can we run the installed binaries?
++#
++# As with the verification above, make sure the right LD_LIBRARY_PATH-equivalent
++# is in place. Try first without this variable, and if that fails try again with
++# the variable. If the second time tries, print a hopefully helpful message to
++# add something to the appropriate environment variable.
+ if [ -z "${CFG_DISABLE_VERIFY}" ]
+ then
+ msg "verifying installed binaries are executable"
+- "${CFG_PREFIX}/bin/rustc" --version > /dev/null
++ "${CFG_PREFIX}/bin/rustc" --version 2> /dev/null 1> /dev/null
+ if [ $? -ne 0 ]
+ then
+- ERR="can't execute installed rustc binary. "
+- ERR="${ERR}installation may be broken. "
+- ERR="${ERR}if this is expected then rerun install.sh with \`--disable-verify\` "
+- ERR="${ERR}or \`make install\` with \`--disable-verify-install\`"
+- err "${ERR}"
++ export $CFG_LD_PATH_VAR="${CFG_PREFIX}/lib":$CFG_OLD_LD_PATH_VAR
++ "${CFG_PREFIX}/bin/rustc" --version > /dev/null
++ if [ $? -ne 0 ]
++ then
++ ERR="can't execute installed rustc binary. "
++ ERR="${ERR}installation may be broken. "
++ ERR="${ERR}if this is expected then rerun install.sh with \`--disable-verify\` "
++ ERR="${ERR}or \`make install\` with \`--disable-verify-install\`"
++ err "${ERR}"
++ else
++ echo
++ echo " Note: please ensure '${CFG_PREFIX}/lib' is added to ${CFG_LD_PATH_VAR}"
++ fi
+ fi
+ fi
+
+-
+ echo
+ echo " Rust is ready to roll."
+ echo
+diff -r -u rust-0.11.0.orig/src/librustc/metadata/filesearch.rs rust-0.11.0/src/librustc/metadata/filesearch.rs
+--- rust-0.11.0.orig/src/librustc/metadata/filesearch.rs
++++ rust-0.11.0/src/librustc/metadata/filesearch.rs
+@@ -243,10 +243,14 @@
+ // of the directory where librustc is located, rather than where the rustc
+ // binary is.
+
+- if sysroot.join(primary_libdir_name()).join(rustlibdir()).exists() {
+- return primary_libdir_name();
+- } else {
+- return secondary_libdir_name();
++ match option_env!("CFG_LIBDIR_RELATIVE") {
++ None => if sysroot.join(primary_libdir_name()).join(rustlibdir()).exists() {
++ return primary_libdir_name();
++ } else {
++ return secondary_libdir_name();
++ },
++
++ Some(libdir) => return libdir.to_string()
+ }
+
+ #[cfg(target_word_size = "64")]
diff --git a/dev-lang/rust/files/rust-9999-libdir.patch b/dev-lang/rust/files/rust-9999-libdir.patch
new file mode 100644
index 0000000..33098b8
--- /dev/null
+++ b/dev-lang/rust/files/rust-9999-libdir.patch
@@ -0,0 +1,113 @@
+This patch adds proper support for --libdir configure option
+See https://github.com/rust-lang/rust/issues/11671 and
+https://github.com/rust-lang/rust/pull/16552
+
+diff --git a/configure b/configure
+index 636d502..fff67b6 100755
+--- a/configure
++++ b/configure
+@@ -459,6 +459,14 @@ fi
+
+ valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
+
++case "$CFG_LIBDIR" in
++ "$CFG_PREFIX"/*) CAT_INC=2;;
++ "$CFG_PREFIX"*) CAT_INC=1;;
++ *)
++ err "libdir must begin with the prefix. Use --prefix to set it accordingly.";;
++esac
++CFG_LIBDIR_RELATIVE=`echo ${CFG_LIBDIR} | cut -c$((${#CFG_PREFIX}+${CAT_INC}))-`
++
+ if [ $HELP -eq 1 ]
+ then
+ echo
+@@ -855,6 +863,15 @@ for h in $CFG_HOST
+ do
+ for t in $CFG_TARGET
+ do
++ # host lib dir stage0
++ make_dir $h/stage0/lib
++
++ # target bin dir stage0
++ make_dir $h/stage0/lib/rustlib/$t/bin
++
++ # target lib dir stage0
++ make_dir $h/stage0/lib/rustlib/$t/lib
++
+ for i in 0 1 2 3
+ do
+ # host bin dir
+diff --git a/mk/main.mk b/mk/main.mk
+index 2bdfc1b..bca5b3b 100644
+--- a/mk/main.mk
++++ b/mk/main.mk
+@@ -311,7 +311,11 @@ define SREQ
+ # Destinations of artifacts for the host compiler
+ HROOT$(1)_H_$(3) = $(3)/stage$(1)
+ HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
++ifeq ($(1),0)
++HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/lib
++else
+ HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_LIBDIR_RELATIVE)
++endif
+
+ # Destinations of artifacts for target architectures
+ TROOT$(1)_T_$(2)_H_$(3) = $$(HLIB$(1)_H_$(3))/rustlib/$(2)
+diff --git a/src/etc/install.sh b/src/etc/install.sh
+index c949743..1a472c6 100644
+--- a/src/etc/install.sh
++++ b/src/etc/install.sh
+@@ -301,9 +301,16 @@ fi
+ flag uninstall "only uninstall from the installation prefix"
+ opt verify 1 "verify that the installed binaries run correctly"
+ valopt prefix "/usr/local" "set installation prefix"
+-# NB This isn't quite the same definition as in `configure`.
+-# just using 'lib' instead of CFG_LIBDIR_RELATIVE
++# NB This is exactly the same definition as in `configure`.
+ valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
++case "$CFG_LIBDIR" in
++ "$CFG_PREFIX"/*) CAT_INC=2;;
++ "$CFG_PREFIX"*) CAT_INC=1;;
++ *)
++ err "libdir must begin with the prefix. Use --prefix to set it accordingly.";;
++esac
++CFG_LIBDIR_RELATIVE=`echo ${CFG_LIBDIR} | cut -c$((${#CFG_PREFIX}+${CAT_INC}))-`
++
+ valopt mandir "${CFG_PREFIX}/share/man" "install man pages in PATH"
+
+ if [ $HELP -eq 1 ]
+@@ -428,9 +435,9 @@ while read p; do
+ # Decide the destination of the file
+ FILE_INSTALL_PATH="${CFG_PREFIX}/$p"
+
+- if echo "$p" | grep "^lib/" > /dev/null
++ if echo "$p" | grep "^${CFG_LIBDIR_RELATIVE}/" > /dev/null
+ then
+- pp=`echo $p | sed 's/^lib\///'`
++ pp=`echo $p | sed "s%^${CFG_LIBDIR_RELATIVE}/%%"`
+ FILE_INSTALL_PATH="${CFG_LIBDIR}/$pp"
+ fi
+
+diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs
+index 99b98b6..f3e37ff 100644
+--- a/src/librustc/metadata/filesearch.rs
++++ b/src/librustc/metadata/filesearch.rs
+@@ -243,10 +243,14 @@ fn find_libdir(sysroot: &Path) -> String {
+ // of the directory where librustc is located, rather than where the rustc
+ // binary is.
+
+- if sysroot.join(primary_libdir_name()).join(rustlibdir()).exists() {
+- return primary_libdir_name();
+- } else {
+- return secondary_libdir_name();
++ match option_env!("CFG_LIBDIR_RELATIVE") {
++ None => if sysroot.join(primary_libdir_name()).join(rustlibdir()).exists() {
++ return primary_libdir_name();
++ } else {
++ return secondary_libdir_name();
++ },
++
++ Some(libdir) => return libdir.to_string()
+ }
+
+ #[cfg(target_word_size = "64")]
diff --git a/dev-lang/rust/metadata.xml b/dev-lang/rust/metadata.xml
index 85325e9..3580fa3 100644
--- a/dev-lang/rust/metadata.xml
+++ b/dev-lang/rust/metadata.xml
@@ -11,7 +11,6 @@
<use>
<flag name="binary-bootstrap">Download precompiled rust for compilator bootstrap</flag>
<flag name="clang">Use <pkg>sys-devel/clang</pkg> for building</flag>
- <flag name="heather">Heather fork</flag>
<flag name="libcxx">Use <pkg>sys-libs/libcxx</pkg> as standard
library when building with <pkg>sys-devel/clang</pkg></flag>
</use>
diff --git a/dev-lang/rust/rust-0.11.0.ebuild b/dev-lang/rust/rust-0.11.0-r1.ebuild
index 5727ea1..87c95e9 100644
--- a/dev-lang/rust/rust-0.11.0.ebuild
+++ b/dev-lang/rust/rust-0.11.0-r1.ebuild
@@ -17,7 +17,7 @@ ARCH_SRC_URI="amd64? ( http://static.rust-lang.org/dist/${P}-x86_64-unknown-linu
SRC_URI="http://static.rust-lang.org/dist/${P}.tar.gz ${ARCH_SRC_URI}"
LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
-SLOT="0"
+SLOT="0.11"
KEYWORDS="~amd64 ~x86"
IUSE="clang debug emacs libcxx vim-syntax zsh-completion"
@@ -27,15 +27,17 @@ RDEPEND="vim-syntax? ( || ( app-editors/vim app-editors/gvim ) )
zsh-completion? ( app-shells/zsh )"
DEPEND="${RDEPEND}
${PYTHON_DEPS}
+ app-admin/eselect-rust
>=dev-lang/perl-5.0
clang? ( sys-devel/clang )
emacs? ( virtual/emacs )
- libcxx? ( sys-libs/libcxx )"
+ libcxx? ( sys-libs/libcxx )
+ !dev-lang/rust:0"
SITEFILE="50${PN}-mode-gentoo.el"
src_prepare() {
- epatch "${FILESDIR}/${P}-stage0.patch"
+ epatch "${FILESDIR}/${P}-stage0.patch" "${FILESDIR}/${P}-libdir.patch"
}
src_configure() {
@@ -44,7 +46,9 @@ src_configure() {
LOCAL_RUST_PATH="${WORKDIR}/${P}-${ARCH_POSTFIX}-unknown-linux-gnu"
"${ECONF_SOURCE:-.}"/configure \
- --prefix="${EPREFIX}/usr/" \
+ --prefix="${EPREFIX}/usr" \
+ --libdir="${EPREFIX}/usr/lib/${P}" \
+ --mandir="${EPREFIX}/usr/share/${P}/man" \
$(use_enable clang) \
$(use_enable debug) \
$(use_enable debug llvm-assertions) \
@@ -56,11 +60,12 @@ src_configure() {
--enable-local-rust \
--local-rust-root="${LOCAL_RUST_PATH}" \
--disable-manage-submodules \
+ --disable-verify-install \
|| die
}
src_compile() {
- default
+ emake VERBOSE=1
if use emacs; then
cd src/etc/emacs || die
@@ -73,25 +78,42 @@ src_install() {
default
if use emacs; then
- elisp-install ${PN}-mode src/etc/emacs/*.el src/etc/emacs/*.elc
- elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+ local sf="${T}/${SITEFILE}"
+ local my_elisp_pn=${PN}-mode
+
+ insinto "/usr/share/${P}/emacs/site-lisp/${my_elisp_pn}"
+ doins -r src/etc/emacs/*.el src/etc/emacs/*.elc
+
+ cp "${FILESDIR}/${SITEFILE}" "${sf}" || die
+ sed -i -e "s:@SITELISP@:${EPREFIX}${SITELISP}/${my_elisp_pn}:g" "${sf}" || die
+ insinto "/usr/share/${P}/emacs/site-lisp/site-gentoo.d/"
+ doins "${sf}"
fi
if use vim-syntax; then
- insinto /usr/share/vim/vimfiles
+ insinto /usr/share/${P}/vim/vimfiles
doins -r src/etc/vim/*
fi
if use zsh-completion; then
- insinto "/usr/share/zsh/site-functions"
+ insinto "/usr/share/${P}/zsh/site-functions"
doins src/etc/zsh/_rust
fi
+
+ mv "${D}/usr/bin/rustc" "${D}/usr/bin/rustc-${PV}" || die
+ mv "${D}/usr/bin/rustdoc" "${D}/usr/bin/rustdoc-${PV}" || die
+
+ cat <<-EOF > "${T}"/50${P}
+ LDPATH="/usr/lib/${P}"
+ MANPATH="/usr/share/${P}/man"
+ EOF
+ doenvd "${T}"/50${P}
}
pkg_postinst() {
- use emacs && elisp-site-regen
+ eselect rust update --if-unset
}
pkg_postrm() {
- use emacs && elisp-site-regen
+ eselect rust unset --if-invalid
}
diff --git a/dev-lang/rust/rust-999.ebuild b/dev-lang/rust/rust-999.ebuild
new file mode 100644
index 0000000..f693d18
--- /dev/null
+++ b/dev-lang/rust/rust-999.ebuild
@@ -0,0 +1,127 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI="5"
+
+PYTHON_COMPAT=( python{2_6,2_7} )
+
+inherit elisp-common eutils python-any-r1
+
+MY_P=${PN}-nightly
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="http://www.rust-lang.org/"
+MY_SRC_URI="http://static.rust-lang.org/dist/${MY_P}.tar.gz"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
+SLOT="nightly"
+KEYWORDS=""
+
+IUSE="clang debug emacs libcxx vim-syntax zsh-completion"
+REQUIRED_USE="libcxx? ( clang )"
+
+RDEPEND="vim-syntax? ( || ( app-editors/vim app-editors/gvim ) )
+ zsh-completion? ( app-shells/zsh )"
+DEPEND="${RDEPEND}
+ ${PYTHON_DEPS}
+ app-admin/eselect-rust
+ >=dev-lang/perl-5.0
+ net-misc/wget
+ clang? ( sys-devel/clang )
+ emacs? ( virtual/emacs )
+ libcxx? ( sys-libs/libcxx )
+ !dev-lang/rust:0"
+
+S="${WORKDIR}/${MY_P}"
+
+SITEFILE="50${PN}-mode-gentoo.el"
+
+src_unpack() {
+ wget "${MY_SRC_URI}" || die
+ unpack ./"${PN}-nightly.tar.gz"
+
+ use amd64 && BUILD_TRIPLE=x86_64-unknown-linux-gnu
+ use x86 && BUILD_TRIPLE=i686-unknown-linux-gnu
+ export CFG_SRC_DIR="${S}" && \
+ cd ${S} && \
+ mkdir -p "${S}/dl" && \
+ mkdir -p "${S}/${BUILD_TRIPLE}/stage0/bin" && \
+ python2 "${S}/src/etc/get-snapshot.py" ${BUILD_TRIPLE} || die
+}
+
+src_prepare() {
+ epatch "${FILESDIR}/${PN}-0.12.0-no-ldconfig.patch" "${FILESDIR}/${PN}-9999-libdir.patch"
+}
+
+src_configure() {
+ "${ECONF_SOURCE:-.}"/configure \
+ --prefix="${EPREFIX}/usr" \
+ --libdir="${EPREFIX}/usr/lib/${P}" \
+ --mandir="${EPREFIX}/usr/share/${P}/man" \
+ $(use_enable clang) \
+ $(use_enable debug) \
+ $(use_enable debug llvm-assertions) \
+ $(use_enable !debug optimize) \
+ $(use_enable !debug optimize-cxx) \
+ $(use_enable !debug optimize-llvm) \
+ $(use_enable !debug optimize-tests) \
+ $(use_enable libcxx libcpp) \
+ --disable-manage-submodules \
+ --disable-verify-install \
+ || die
+}
+
+src_compile() {
+ emake VERBOSE=1
+
+ if use emacs; then
+ cd src/etc/emacs || die
+ elisp-compile *.el
+ elisp-make-autoload-file "${PN}-mode-autoloads.el" .
+ fi
+}
+
+src_install() {
+ default
+
+ if use emacs; then
+ local sf="${T}/${SITEFILE}"
+ local my_elisp_pn=${PN}-mode
+
+ insinto "/usr/share/${P}/emacs/site-lisp/${my_elisp_pn}"
+ doins -r src/etc/emacs/*.el src/etc/emacs/*.elc
+
+ cp "${FILESDIR}/${SITEFILE}" "${sf}" || die
+ sed -i -e "s:@SITELISP@:${EPREFIX}${SITELISP}/${my_elisp_pn}:g" "${sf}" || die
+ insinto "/usr/share/${P}/emacs/site-lisp/site-gentoo.d/"
+ doins "${sf}"
+ fi
+
+ if use vim-syntax; then
+ insinto /usr/share/${P}/vim/vimfiles
+ doins -r src/etc/vim/*
+ fi
+
+ if use zsh-completion; then
+ insinto "/usr/share/${P}/zsh/site-functions"
+ doins src/etc/zsh/_rust
+ fi
+
+ mv "${D}/usr/bin/rustc" "${D}/usr/bin/rustc-${PV}" || die
+ mv "${D}/usr/bin/rustdoc" "${D}/usr/bin/rustdoc-${PV}" || die
+
+ cat <<-EOF > "${T}"/50${P}
+ LDPATH="/usr/lib/${P}"
+ MANPATH="/usr/share/${P}/man"
+ EOF
+ doenvd "${T}"/50${P}
+}
+
+pkg_postinst() {
+ eselect rust update --if-unset
+}
+
+pkg_postrm() {
+ eselect rust unset --if-invalid
+}
diff --git a/dev-lang/rust/rust-9999.ebuild b/dev-lang/rust/rust-9999-r1.ebuild
index b83b348..be90455 100644
--- a/dev-lang/rust/rust-9999.ebuild
+++ b/dev-lang/rust/rust-9999-r1.ebuild
@@ -10,28 +10,25 @@ inherit elisp-common eutils git-r3 python-any-r1
DESCRIPTION="Systems programming language from Mozilla"
HOMEPAGE="http://www.rust-lang.org/"
-
-if use heather; then
- EGIT_REPO_URI="git://github.com/Heather/rust.git"
-else
- EGIT_REPO_URI="git://github.com/rust-lang/rust.git"
-fi
+EGIT_REPO_URI="git://github.com/rust-lang/rust.git"
LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
-SLOT="0"
+SLOT="git"
KEYWORDS=""
-IUSE="clang debug emacs heather libcxx vim-syntax zsh-completion"
+IUSE="clang debug emacs libcxx vim-syntax zsh-completion"
REQUIRED_USE="libcxx? ( clang )"
RDEPEND="vim-syntax? ( || ( app-editors/vim app-editors/gvim ) )
zsh-completion? ( app-shells/zsh )"
DEPEND="${RDEPEND}
${PYTHON_DEPS}
+ app-admin/eselect-rust
>=dev-lang/perl-5.0
clang? ( sys-devel/clang )
emacs? ( virtual/emacs )
- libcxx? ( sys-libs/libcxx )"
+ libcxx? ( sys-libs/libcxx )
+ !dev-lang/rust:0"
SITEFILE="50${PN}-mode-gentoo.el"
@@ -48,12 +45,14 @@ src_unpack() {
}
src_prepare() {
- epatch "${FILESDIR}/${PN}-0.12.0-no-ldconfig.patch"
+ epatch "${FILESDIR}/${PN}-0.12.0-no-ldconfig.patch" "${FILESDIR}/${P}-libdir.patch"
}
src_configure() {
"${ECONF_SOURCE:-.}"/configure \
- --prefix="${EPREFIX}/usr/" \
+ --prefix="${EPREFIX}/usr" \
+ --libdir="${EPREFIX}/usr/lib/${P}" \
+ --mandir="${EPREFIX}/usr/share/${P}/man" \
$(use_enable clang) \
$(use_enable debug) \
$(use_enable debug llvm-assertions) \
@@ -63,11 +62,12 @@ src_configure() {
$(use_enable !debug optimize-tests) \
$(use_enable libcxx libcpp) \
--disable-manage-submodules \
+ --disable-verify-install \
|| die
}
src_compile() {
- default
+ emake VERBOSE=1
if use emacs; then
cd src/etc/emacs || die
@@ -80,25 +80,42 @@ src_install() {
default
if use emacs; then
- elisp-install ${PN}-mode src/etc/emacs/*.el src/etc/emacs/*.elc
- elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+ local sf="${T}/${SITEFILE}"
+ local my_elisp_pn=${PN}-mode
+
+ insinto "/usr/share/${P}/emacs/site-lisp/${my_elisp_pn}"
+ doins -r src/etc/emacs/*.el src/etc/emacs/*.elc
+
+ cp "${FILESDIR}/${SITEFILE}" "${sf}" || die
+ sed -i -e "s:@SITELISP@:${EPREFIX}${SITELISP}/${my_elisp_pn}:g" "${sf}" || die
+ insinto "/usr/share/${P}/emacs/site-lisp/site-gentoo.d/"
+ doins "${sf}"
fi
if use vim-syntax; then
- insinto /usr/share/vim/vimfiles
+ insinto /usr/share/${P}/vim/vimfiles
doins -r src/etc/vim/*
fi
if use zsh-completion; then
- insinto "/usr/share/zsh/site-functions"
+ insinto "/usr/share/${P}/zsh/site-functions"
doins src/etc/zsh/_rust
fi
+
+ mv "${D}/usr/bin/rustc" "${D}/usr/bin/rustc-${PV}" || die
+ mv "${D}/usr/bin/rustdoc" "${D}/usr/bin/rustdoc-${PV}" || die
+
+ cat <<-EOF > "${T}"/50${P}
+ LDPATH="/usr/lib/${P}"
+ MANPATH="/usr/share/${P}/man"
+ EOF
+ doenvd "${T}"/50${P}
}
pkg_postinst() {
- use emacs && elisp-site-regen
+ eselect rust update --if-unset
}
pkg_postrm() {
- use emacs && elisp-site-regen
+ eselect rust unset --if-invalid
}