diff options
Diffstat (limited to 'dev-lang/rust/files/rust-0.11.0-libdir.patch')
-rw-r--r-- | dev-lang/rust/files/rust-0.11.0-libdir.patch | 270 |
1 files changed, 270 insertions, 0 deletions
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 000000000000..f895e76903e9 --- /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")] |