mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Use rust-installer for installation
This is just a refactoring to put Cargo and Rust on the same installer script.
This commit is contained in:
parent
4e92eb2dd8
commit
8498392346
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "src/rust-installer"]
|
||||||
|
path = src/rust-installer
|
||||||
|
url = https://github.com/rust-lang/rust-installer.git
|
53
Makefile.in
53
Makefile.in
@ -53,6 +53,7 @@ else
|
|||||||
TARGET_$(1) = $$(TARGET_ROOT)/$(1)
|
TARGET_$(1) = $$(TARGET_ROOT)/$(1)
|
||||||
endif
|
endif
|
||||||
DISTDIR_$(1) = $$(TARGET_$(1))/dist
|
DISTDIR_$(1) = $$(TARGET_$(1))/dist
|
||||||
|
IMGDIR_$(1) = $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1)-image
|
||||||
PKGDIR_$(1) = $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1)
|
PKGDIR_$(1) = $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1)
|
||||||
BIN_TARGETS_$(1) := $$(BIN_TARGETS:%=$$(TARGET_$(1))/%$$(X))
|
BIN_TARGETS_$(1) := $$(BIN_TARGETS:%=$$(TARGET_$(1))/%$$(X))
|
||||||
endef
|
endef
|
||||||
@ -128,6 +129,8 @@ $(DOC_DIR)/%: src/doc/%
|
|||||||
|
|
||||||
# === Distribution
|
# === Distribution
|
||||||
|
|
||||||
|
NON_INSTALLED_PREFIXES := README.md,LICENSE-MIT,LICENSE-APACHE,LICENSE-THIRD-PARTY
|
||||||
|
|
||||||
define DO_DIST_TARGET
|
define DO_DIST_TARGET
|
||||||
dist-$(1): $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz
|
dist-$(1): $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz
|
||||||
|
|
||||||
@ -147,34 +150,38 @@ distcheck-$(1): dist-$(1)
|
|||||||
--prefix=$$(TARGET_$(1))/distcheck/install --uninstall
|
--prefix=$$(TARGET_$(1))/distcheck/install --uninstall
|
||||||
[ -f $$(TARGET_$(1))/distcheck/install/bin/cargo$(X) ] && exit 1 || exit 0
|
[ -f $$(TARGET_$(1))/distcheck/install/bin/cargo$(X) ] && exit 1 || exit 0
|
||||||
|
|
||||||
$$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz: prepare-manifest-$(1)
|
prepare-image-$(1):
|
||||||
tar -czvf $$@ -C $$(@D) $$(PKG_NAME)-$(1)
|
|
||||||
|
|
||||||
prepare-manifest-$(1):
|
|
||||||
@[ -f $$(TARGET_$(1))/cargo$$(X) ] || echo 'Please run `make` first'
|
@[ -f $$(TARGET_$(1))/cargo$$(X) ] || echo 'Please run `make` first'
|
||||||
@[ -f $$(TARGET_$(1))/cargo$$(X) ]
|
@[ -f $$(TARGET_$(1))/cargo$$(X) ]
|
||||||
rm -rf $$(PKGDIR_$(1))
|
rm -rf $$(IMGDIR_$(1))
|
||||||
mkdir -p $$(PKGDIR_$(1))/bin $$(PKGDIR_$(1))/lib/cargo \
|
mkdir -p $$(IMGDIR_$(1))/bin $$(IMGDIR_$(1))/lib/cargo \
|
||||||
$$(PKGDIR_$(1))/share/man/man1 \
|
$$(IMGDIR_$(1))/share/man/man1 \
|
||||||
$$(PKGDIR_$(1))/share/doc/cargo \
|
$$(IMGDIR_$(1))/share/doc/cargo \
|
||||||
$$(PKGDIR_$(1))/share/zsh/site-functions \
|
$$(IMGDIR_$(1))/share/zsh/site-functions \
|
||||||
$$(PKGDIR_$(1))/etc/bash_completion.d
|
$$(IMGDIR_$(1))/etc/bash_completion.d
|
||||||
cp $$(TARGET_$(1))/cargo$$(X) $$(PKGDIR_$(1))/bin
|
cp $$(TARGET_$(1))/cargo$$(X) $$(IMGDIR_$(1))/bin
|
||||||
cp src/etc/cargo.1 $$(PKGDIR_$(1))/share/man/man1
|
cp src/etc/cargo.1 $$(IMGDIR_$(1))/share/man/man1
|
||||||
cp src/etc/_cargo $$(PKGDIR_$(1))/share/zsh/site-functions/_cargo
|
cp src/etc/_cargo $$(IMGDIR_$(1))/share/zsh/site-functions/_cargo
|
||||||
cp src/etc/cargo.bashcomp.sh $$(PKGDIR_$(1))/etc/bash_completion.d/cargo
|
cp src/etc/cargo.bashcomp.sh $$(IMGDIR_$(1))/etc/bash_completion.d/cargo
|
||||||
#cp $$(BIN_TARGETS_$(1)) $$(PKGDIR_$(1))/lib/cargo
|
|
||||||
cp README.md LICENSE-MIT LICENSE-APACHE LICENSE-THIRD-PARTY \
|
cp README.md LICENSE-MIT LICENSE-APACHE LICENSE-THIRD-PARTY \
|
||||||
$$(PKGDIR_$(1))/share/doc/cargo
|
$$(IMGDIR_$(1))/share/doc/cargo
|
||||||
(cd $$(PKGDIR_$(1)) && find . -type f | sed 's/^\.\///') \
|
|
||||||
> $$(DISTDIR_$(1))/manifest-$$(PKG_NAME).in
|
|
||||||
cp src/etc/install.sh $$(PKGDIR_$(1))
|
|
||||||
cp README.md LICENSE-MIT LICENSE-APACHE LICENSE-THIRD-PARTY \
|
cp README.md LICENSE-MIT LICENSE-APACHE LICENSE-THIRD-PARTY \
|
||||||
$$(PKGDIR_$(1))
|
$$(IMGDIR_$(1))
|
||||||
mv $$(DISTDIR_$(1))/manifest-$$(PKG_NAME).in \
|
|
||||||
$$(PKGDIR_$(1))/lib/cargo/manifest.in
|
|
||||||
|
|
||||||
install-$(1): prepare-manifest-$(1)
|
$$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz: prepare-image-$(1)
|
||||||
|
sh src/rust-installer/gen-installer.sh \
|
||||||
|
--product-name=Cargo \
|
||||||
|
--verify-bin=cargo \
|
||||||
|
--rel-manifest-dir=cargo \
|
||||||
|
--success-message=Cargo-is-ready-to-roll. \
|
||||||
|
--image-dir=$$(IMGDIR_$(1)) \
|
||||||
|
--work-dir=./$$(DISTDIR_$(1)) \
|
||||||
|
--output-dir=./$$(DISTDIR_$(1)) \
|
||||||
|
--non-installed-prefixes=$$(NON_INSTALLED_PREFIXES) \
|
||||||
|
--package-name=$$(PKG_NAME)-$(1)
|
||||||
|
rm -Rf $$(IMGDIR_$(1))
|
||||||
|
|
||||||
|
install-$(1): $$(DISTDIR_$(1))/$$(PKG_NAME)-$(1).tar.gz
|
||||||
$$(PKGDIR_$(1))/install.sh \
|
$$(PKGDIR_$(1))/install.sh \
|
||||||
--prefix="$$(CFG_PREFIX)" \
|
--prefix="$$(CFG_PREFIX)" \
|
||||||
--destdir="$$(DESTDIR)" $$(MAYBE_DISABLE_VERIFY)
|
--destdir="$$(DESTDIR)" $$(MAYBE_DISABLE_VERIFY)
|
||||||
|
@ -43,6 +43,7 @@ Cargo can then be compiled like many other standard unix-like projects:
|
|||||||
```sh
|
```sh
|
||||||
git clone https://github.com/rust-lang/cargo
|
git clone https://github.com/rust-lang/cargo
|
||||||
cd cargo
|
cd cargo
|
||||||
|
git submodule init
|
||||||
./.travis.install.deps.sh
|
./.travis.install.deps.sh
|
||||||
./configure --local-rust-root=`pwd`/rustc
|
./configure --local-rust-root=`pwd`/rustc
|
||||||
make
|
make
|
||||||
|
@ -1,466 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
|
||||||
# file at the top-level directory of this distribution and at
|
|
||||||
# http://rust-lang.org/COPYRIGHT.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
||||||
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
||||||
# option. This file may not be copied, modified, or distributed
|
|
||||||
# except according to those terms.
|
|
||||||
|
|
||||||
msg() {
|
|
||||||
echo "install: $1"
|
|
||||||
}
|
|
||||||
|
|
||||||
step_msg() {
|
|
||||||
msg
|
|
||||||
msg "$1"
|
|
||||||
msg
|
|
||||||
}
|
|
||||||
|
|
||||||
warn() {
|
|
||||||
echo "install: WARNING: $1"
|
|
||||||
}
|
|
||||||
|
|
||||||
err() {
|
|
||||||
echo "install: error: $1"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
need_ok() {
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
err "$1"
|
|
||||||
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
|
|
||||||
eval TLEN=\${#$1}
|
|
||||||
if [ $TLEN -gt 35 ]
|
|
||||||
then
|
|
||||||
printf "install: %-20s := %.35s ...\n" $1 "$T"
|
|
||||||
else
|
|
||||||
printf "install: %-20s := %s %s\n" $1 "$T" "$2"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
valopt() {
|
|
||||||
VAL_OPTIONS="$VAL_OPTIONS $1"
|
|
||||||
|
|
||||||
local OP=$1
|
|
||||||
local DEFAULT=$2
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
local DOC="$*"
|
|
||||||
if [ $HELP -eq 0 ]
|
|
||||||
then
|
|
||||||
local UOP=$(echo $OP | tr '[:lower:]' '[:upper:]' | tr '\-' '\_')
|
|
||||||
local V="CFG_${UOP}"
|
|
||||||
eval $V="$DEFAULT"
|
|
||||||
for arg in $CFG_ARGS
|
|
||||||
do
|
|
||||||
if echo "$arg" | grep -q -- "--$OP="
|
|
||||||
then
|
|
||||||
val=$(echo "$arg" | cut -f2 -d=)
|
|
||||||
eval $V=$val
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
putvar $V
|
|
||||||
else
|
|
||||||
if [ -z "$DEFAULT" ]
|
|
||||||
then
|
|
||||||
DEFAULT="<none>"
|
|
||||||
fi
|
|
||||||
OP="${OP}=[${DEFAULT}]"
|
|
||||||
printf " --%-30s %s\n" "$OP" "$DOC"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
opt() {
|
|
||||||
BOOL_OPTIONS="$BOOL_OPTIONS $1"
|
|
||||||
|
|
||||||
local OP=$1
|
|
||||||
local DEFAULT=$2
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
local DOC="$*"
|
|
||||||
local FLAG=""
|
|
||||||
|
|
||||||
if [ $DEFAULT -eq 0 ]
|
|
||||||
then
|
|
||||||
FLAG="enable"
|
|
||||||
else
|
|
||||||
FLAG="disable"
|
|
||||||
DOC="don't $DOC"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $HELP -eq 0 ]
|
|
||||||
then
|
|
||||||
for arg in $CFG_ARGS
|
|
||||||
do
|
|
||||||
if [ "$arg" = "--${FLAG}-${OP}" ]
|
|
||||||
then
|
|
||||||
OP=$(echo $OP | tr 'a-z-' 'A-Z_')
|
|
||||||
FLAG=$(echo $FLAG | tr 'a-z' 'A-Z')
|
|
||||||
local V="CFG_${FLAG}_${OP}"
|
|
||||||
eval $V=1
|
|
||||||
putvar $V
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
if [ ! -z "$META" ]
|
|
||||||
then
|
|
||||||
OP="$OP=<$META>"
|
|
||||||
fi
|
|
||||||
printf " --%-30s %s\n" "$FLAG-$OP" "$DOC"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
flag() {
|
|
||||||
BOOL_OPTIONS="$BOOL_OPTIONS $1"
|
|
||||||
|
|
||||||
local OP=$1
|
|
||||||
shift
|
|
||||||
local DOC="$*"
|
|
||||||
|
|
||||||
if [ $HELP -eq 0 ]
|
|
||||||
then
|
|
||||||
for arg in $CFG_ARGS
|
|
||||||
do
|
|
||||||
if [ "$arg" = "--${OP}" ]
|
|
||||||
then
|
|
||||||
OP=$(echo $OP | tr 'a-z-' 'A-Z_')
|
|
||||||
local V="CFG_${OP}"
|
|
||||||
eval $V=1
|
|
||||||
putvar $V
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
if [ ! -z "$META" ]
|
|
||||||
then
|
|
||||||
OP="$OP=<$META>"
|
|
||||||
fi
|
|
||||||
printf " --%-30s %s\n" "$OP" "$DOC"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
validate_opt () {
|
|
||||||
for arg in $CFG_ARGS
|
|
||||||
do
|
|
||||||
isArgValid=0
|
|
||||||
for option in $BOOL_OPTIONS
|
|
||||||
do
|
|
||||||
if test --disable-$option = $arg
|
|
||||||
then
|
|
||||||
isArgValid=1
|
|
||||||
fi
|
|
||||||
if test --enable-$option = $arg
|
|
||||||
then
|
|
||||||
isArgValid=1
|
|
||||||
fi
|
|
||||||
if test --$option = $arg
|
|
||||||
then
|
|
||||||
isArgValid=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
for option in $VAL_OPTIONS
|
|
||||||
do
|
|
||||||
if echo "$arg" | grep -q -- "--$option="
|
|
||||||
then
|
|
||||||
isArgValid=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ "$arg" = "--help" ]
|
|
||||||
then
|
|
||||||
echo
|
|
||||||
echo "No more help available for Configure options,"
|
|
||||||
echo "check the Wiki or join our IRC channel"
|
|
||||||
break
|
|
||||||
else
|
|
||||||
if test $isArgValid -eq 0
|
|
||||||
then
|
|
||||||
err "Option '$arg' is not recognized"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
absolutify() {
|
|
||||||
FILE_PATH="${1}"
|
|
||||||
FILE_PATH_DIRNAME="$(dirname ${FILE_PATH})"
|
|
||||||
FILE_PATH_BASENAME="$(basename ${FILE_PATH})"
|
|
||||||
FILE_ABS_PATH="$(cd ${FILE_PATH_DIRNAME} && pwd)"
|
|
||||||
FILE_PATH="${FILE_ABS_PATH}/${FILE_PATH_BASENAME}"
|
|
||||||
# This is the return value
|
|
||||||
ABSOLUTIFIED="${FILE_PATH}"
|
|
||||||
}
|
|
||||||
|
|
||||||
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="$@"
|
|
||||||
|
|
||||||
HELP=0
|
|
||||||
if [ "$1" = "--help" ]
|
|
||||||
then
|
|
||||||
HELP=1
|
|
||||||
shift
|
|
||||||
echo
|
|
||||||
echo "Usage: $CFG_SELF [options]"
|
|
||||||
echo
|
|
||||||
echo "Options:"
|
|
||||||
echo
|
|
||||||
else
|
|
||||||
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=""
|
|
||||||
|
|
||||||
CFG_LIBDIR_RELATIVE=lib
|
|
||||||
|
|
||||||
flag uninstall "only uninstall from the installation prefix"
|
|
||||||
valopt destdir "" "set installation root"
|
|
||||||
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_DESTDIR}${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
|
|
||||||
valopt mandir "${CFG_DESTDIR}${CFG_PREFIX}/share/man" "install man pages in PATH"
|
|
||||||
|
|
||||||
|
|
||||||
if [ $HELP -eq 1 ]
|
|
||||||
then
|
|
||||||
echo
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
step_msg "validating $CFG_SELF args"
|
|
||||||
validate_opt
|
|
||||||
|
|
||||||
# OK, let's get installing ...
|
|
||||||
|
|
||||||
# Sanity check: can we run the binaries?
|
|
||||||
if [ -z "${CFG_DISABLE_VERIFY}" ]
|
|
||||||
then
|
|
||||||
# Don't do this if uninstalling. Failure here won't help in any way.
|
|
||||||
if [ -z "${CFG_UNINSTALL}" ]
|
|
||||||
then
|
|
||||||
msg "verifying platform can run binaries"
|
|
||||||
"${CFG_SRC_DIR}/bin/cargo" -V 2> /dev/null
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
err "can't execute cargo binary on this platform"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Sanity check: can we can write to the destination?
|
|
||||||
msg "verifying destination is writable"
|
|
||||||
umask 022 && mkdir -p "${CFG_LIBDIR}"
|
|
||||||
need_ok "can't write to destination. consider \`sudo\`."
|
|
||||||
touch "${CFG_LIBDIR}/rust-install-probe" > /dev/null
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
err "can't write to destination. consider \`sudo\`."
|
|
||||||
fi
|
|
||||||
rm -f "${CFG_LIBDIR}/rust-install-probe"
|
|
||||||
need_ok "failed to remove install probe"
|
|
||||||
|
|
||||||
# Sanity check: don't install to the directory containing the installer.
|
|
||||||
# That would surely cause chaos.
|
|
||||||
msg "verifying destination is not the same as source"
|
|
||||||
INSTALLER_DIR="$(cd $(dirname $0) && pwd)"
|
|
||||||
PREFIX_DIR="$(cd ${CFG_PREFIX} && pwd)"
|
|
||||||
if [ "${INSTALLER_DIR}" = "${PREFIX_DIR}" ]
|
|
||||||
then
|
|
||||||
err "can't install to same directory as installer"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Using an absolute path to libdir in a few places so that the status
|
|
||||||
# messages are consistently using absolute paths.
|
|
||||||
absolutify "${CFG_LIBDIR}"
|
|
||||||
ABS_LIBDIR="${ABSOLUTIFIED}"
|
|
||||||
|
|
||||||
# The file name of the manifest we're going to create during install
|
|
||||||
INSTALLED_MANIFEST="${ABS_LIBDIR}/cargo/manifest"
|
|
||||||
|
|
||||||
# First, uninstall from the installation prefix.
|
|
||||||
# Errors are warnings - try to rm everything in the manifest even if some fail.
|
|
||||||
if [ -f "${INSTALLED_MANIFEST}" ]
|
|
||||||
then
|
|
||||||
# Iterate through installed manifest and remove files
|
|
||||||
while read p; do
|
|
||||||
# The installed manifest contains absolute paths
|
|
||||||
msg "removing $p"
|
|
||||||
if [ -f "$p" ]
|
|
||||||
then
|
|
||||||
rm -f "$p"
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
warn "failed to remove $p"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
warn "supposedly installed file $p does not exist!"
|
|
||||||
fi
|
|
||||||
done < "${INSTALLED_MANIFEST}"
|
|
||||||
|
|
||||||
# If we fail to remove cargo below, then the installed manifest will
|
|
||||||
# still be full; the installed manifest needs to be empty before install.
|
|
||||||
msg "removing ${INSTALLED_MANIFEST}"
|
|
||||||
rm -f "${INSTALLED_MANIFEST}"
|
|
||||||
# For the above reason, this is a hard error
|
|
||||||
need_ok "failed to remove installed manifest"
|
|
||||||
|
|
||||||
# Remove 'rustlib' directory
|
|
||||||
msg "removing ${ABS_LIBDIR}/cargo"
|
|
||||||
rm -Rf "${ABS_LIBDIR}/cargo"
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
warn "failed to remove cargo"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# There's no manifest. If we were asked to uninstall, then that's a problem.
|
|
||||||
if [ -n "${CFG_UNINSTALL}" ]
|
|
||||||
then
|
|
||||||
err "unable to find installation manifest at ${CFG_LIBDIR}/cargo"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If we're only uninstalling then exit
|
|
||||||
if [ -n "${CFG_UNINSTALL}" ]
|
|
||||||
then
|
|
||||||
echo
|
|
||||||
echo " Cargo is uninstalled."
|
|
||||||
echo
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create the installed manifest, which we will fill in with absolute file paths
|
|
||||||
mkdir -p "${CFG_LIBDIR}/cargo"
|
|
||||||
need_ok "failed to create cargo"
|
|
||||||
touch "${INSTALLED_MANIFEST}"
|
|
||||||
need_ok "failed to create installed manifest"
|
|
||||||
|
|
||||||
# Now install, iterate through the new manifest and copy files
|
|
||||||
while read p; do
|
|
||||||
|
|
||||||
# Decide the destination of the file
|
|
||||||
FILE_INSTALL_PATH="${CFG_DESTDIR}${CFG_PREFIX}/$p"
|
|
||||||
|
|
||||||
if echo "$p" | grep "^lib/" > /dev/null
|
|
||||||
then
|
|
||||||
pp=`echo $p | sed 's/^lib\///'`
|
|
||||||
FILE_INSTALL_PATH="${CFG_LIBDIR}/$pp"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if echo "$p" | grep "^share/man/" > /dev/null
|
|
||||||
then
|
|
||||||
pp=`echo $p | sed 's/^share\/man\///'`
|
|
||||||
FILE_INSTALL_PATH="${CFG_MANDIR}/$pp"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make sure there's a directory for it
|
|
||||||
umask 022 && mkdir -p "$(dirname ${FILE_INSTALL_PATH})"
|
|
||||||
need_ok "directory creation failed"
|
|
||||||
|
|
||||||
# Make the path absolute so we can uninstall it later without
|
|
||||||
# starting from the installation cwd
|
|
||||||
absolutify "${FILE_INSTALL_PATH}"
|
|
||||||
FILE_INSTALL_PATH="${ABSOLUTIFIED}"
|
|
||||||
|
|
||||||
# Install the file
|
|
||||||
msg "${FILE_INSTALL_PATH}"
|
|
||||||
if echo "$p" | grep "^bin/\\|/cargo-" > /dev/null
|
|
||||||
then
|
|
||||||
install -m755 "${CFG_SRC_DIR}/$p" "${FILE_INSTALL_PATH}"
|
|
||||||
else
|
|
||||||
install -m644 "${CFG_SRC_DIR}/$p" "${FILE_INSTALL_PATH}"
|
|
||||||
fi
|
|
||||||
need_ok "file creation failed"
|
|
||||||
|
|
||||||
# Update the manifest
|
|
||||||
echo "${FILE_INSTALL_PATH}" >> "${INSTALLED_MANIFEST}"
|
|
||||||
need_ok "failed to update manifest"
|
|
||||||
|
|
||||||
# The manifest lists all files to install
|
|
||||||
done < "${CFG_SRC_DIR}/${CFG_LIBDIR_RELATIVE}/cargo/manifest.in"
|
|
||||||
|
|
||||||
# Sanity check: can we run the installed binaries?
|
|
||||||
if [ -z "${CFG_DISABLE_VERIFY}" ]
|
|
||||||
then
|
|
||||||
msg "verifying installed binaries are executable"
|
|
||||||
"${CFG_DESTDIR}${CFG_PREFIX}/bin/cargo" -V 2> /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}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo " Cargo is ready to roll."
|
|
||||||
echo
|
|
||||||
|
|
||||||
|
|
1
src/rust-installer
Submodule
1
src/rust-installer
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit aed73472416064642911af790b25d57c9390b6c7
|
Loading…
x
Reference in New Issue
Block a user