jauhien 14/08/29 14:12:27 Modified: rust-0.12.0-no-ldconfig.patch 50rust-mode-gentoo.el Added: rust-9999-libdir.patch rust-0.11.0-libdir.patch Log: Add slotting to rust ebuilds Add these slots: (major.minor) rust release (nightly) nightly version (git) git master branch Remove old unslotted versions (Portage version: 2.2.12/cvs/Linux x86_64, signed Manifest commit with key 0xB2EFA1D4)
Revision Changes Path 1.2 dev-lang/rust/files/rust-0.12.0-no-ldconfig.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/rust-0.12.0-no-ldconfig.patch?rev=1.2&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/rust-0.12.0-no-ldconfig.patch?rev=1.2&content-type=text/plain diff : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/rust-0.12.0-no-ldconfig.patch?r1=1.1&r2=1.2 Index: rust-0.12.0-no-ldconfig.patch =================================================================== RCS file: /var/cvsroot/gentoo-x86/dev-lang/rust/files/rust-0.12.0-no-ldconfig.patch,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- rust-0.12.0-no-ldconfig.patch 31 Jul 2014 14:29:09 -0000 1.1 +++ rust-0.12.0-no-ldconfig.patch 29 Aug 2014 14:12:27 -0000 1.2 @@ -1,8 +1,6 @@ Remove ldconfig(1) execution to prevent the installation script from accessing outside of a sandbox. -Author: Heather Cynede - diff --git a/src/etc/install.sh b/src/etc/install.sh index c949743..7c3daa5 100644 --- a/src/etc/install.sh 1.2 dev-lang/rust/files/50rust-mode-gentoo.el file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/50rust-mode-gentoo.el?rev=1.2&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/50rust-mode-gentoo.el?rev=1.2&content-type=text/plain diff : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/50rust-mode-gentoo.el?r1=1.1&r2=1.2 Index: 50rust-mode-gentoo.el =================================================================== RCS file: /var/cvsroot/gentoo-x86/dev-lang/rust/files/50rust-mode-gentoo.el,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- 50rust-mode-gentoo.el 18 May 2014 23:46:09 -0000 1.1 +++ 50rust-mode-gentoo.el 29 Aug 2014 14:12:27 -0000 1.2 @@ -1,2 +1,5 @@ + +;;; rust-mode site-lisp configuration + (add-to-list 'load-path "@SITELISP@") (require 'rust-mode) 1.1 dev-lang/rust/files/rust-9999-libdir.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/rust-9999-libdir.patch?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/rust-9999-libdir.patch?rev=1.1&content-type=text/plain Index: rust-9999-libdir.patch =================================================================== 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")] 1.1 dev-lang/rust/files/rust-0.11.0-libdir.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/rust-0.11.0-libdir.patch?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-lang/rust/files/rust-0.11.0-libdir.patch?rev=1.1&content-type=text/plain Index: rust-0.11.0-libdir.patch =================================================================== 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")]
