Initial import (#1356907)

This commit is contained in:
Josh Stone 2016-08-11 21:54:53 -07:00
parent 0bc08992db
commit 717ffe274a
6 changed files with 503 additions and 0 deletions

3
.gitignore vendored
View File

@ -0,0 +1,3 @@
/rustc-1.10.0-src.tar.gz
/rustc-1.9.0-i686-unknown-linux-gnu.tar.gz
/rustc-1.9.0-x86_64-unknown-linux-gnu.tar.gz

View File

@ -0,0 +1,30 @@
commit a3736a0a1907cbc8bf619708738815a5fd789c80 (from 4638c60dedfa581fd5fa7c6420d8f32274c9ca0b)
Merge: 4638c60dedfa 2c3e600653f4
Author: Alex Crichton <alex@alexcrichton.com>
Date: Tue May 31 10:51:47 2016 -0700
Merge pull request #6 from intelfx/patch-1
document.c: fix trigger of -Werror=misleading-indentation
diff --git a/src/document.c b/src/document.c
index e2731dab41a2..8cd7315b418c 100644
--- a/src/document.c
+++ b/src/document.c
@@ -1154,13 +1154,13 @@ char_link(hoedown_buffer *ob, hoedown_document *doc, uint8_t *data, size_t offse
while (i < size) {
if (data[i] == '\\') i += 2;
else if (data[i] == '(' && i != 0) {
- nb_p++; i++;
+ nb_p++;
}
else if (data[i] == ')') {
if (nb_p == 0) break;
- else nb_p--; i++;
+ else nb_p--;
} else if (i >= 1 && _isspace(data[i-1]) && (data[i] == '\'' || data[i] == '"')) break;
- else i++;
+ i++;
}
if (i >= size) goto cleanup;

View File

@ -0,0 +1,134 @@
commit dd6e8d45e183861d44ed91a99f0a50403b2776a3 (from 57ef015132ec09345b88d2ec20a9d9809b5d3dfc)
Merge: 57ef015132ec 0ca7d3dc1ffd
Author: bors <bors@rust-lang.org>
Date: Mon May 23 20:02:23 2016 -0700
Auto merge of #33787 - cuviper:local-rebuild, r=alexcrichton
Add --enable-local-rebuild to bootstrap from the current release
In Linux distributions, it is often necessary to rebuild packages for cases like applying new patches or linking against new system libraries. In this scenario, the rustc in the distro build environment may already match the current release that we're trying to rebuild. Thus we don't want to use the prior release's bootstrap key, nor `--cfg stage0` for the prior unstable features.
The new `configure --enable-local-rebuild` option specifies that we are rebuilding from the current release. The current bootstrap key is used for the local rustc, and current stage1 features are also assumed. Both the makefiles and rustbuild support this configuration.
Fixes #29556
r? @alexcrichton
diff --git a/configure b/configure
index 38f3e3b00c6d..b7053c5c54f5 100755
--- a/configure
+++ b/configure
@@ -599,6 +599,7 @@ opt debug-assertions 0 "build with debugging assertions"
opt fast-make 0 "use .gitmodules as timestamp for submodule deps"
opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds"
opt local-rust 0 "use an installed rustc rather than downloading a snapshot"
+opt local-rebuild 0 "use an installed rustc matching the current version, for rebuilds"
opt llvm-static-stdcpp 0 "statically link to libstdc++ for LLVM"
opt rpath 1 "build rpaths into rustc itself"
opt stage0-landing-pads 1 "enable landing pads during bootstrap with stage0"
@@ -847,6 +848,16 @@ then
BIN_SUF=.exe
fi
+# --enable-local-rebuild implies --enable-local-rust too
+if [ -n "$CFG_ENABLE_LOCAL_REBUILD" ]
+then
+ if [ -z "$CFG_ENABLE_LOCAL_RUST" ]
+ then
+ CFG_ENABLE_LOCAL_RUST=1
+ putvar CFG_ENABLE_LOCAL_RUST
+ fi
+fi
+
if [ -n "$CFG_ENABLE_LOCAL_RUST" ]
then
system_rustc=$(which rustc)
diff --git a/mk/main.mk b/mk/main.mk
index 493b61051331..6feb53ec7b17 100644
--- a/mk/main.mk
+++ b/mk/main.mk
@@ -34,7 +34,14 @@ CFG_FILENAME_EXTRA=$(shell printf '%s' $(CFG_RELEASE)$(CFG_EXTRA_FILENAME) | $(C
# intentionally not "secure" by any definition, this is largely just a deterrent
# from users enabling unstable features on the stable compiler.
CFG_BOOTSTRAP_KEY=$(CFG_FILENAME_EXTRA)
+
+# The stage0 compiler needs to use the previous key recorded in src/stage0.txt,
+# except for local-rebuild when it just uses the same current key.
+ifdef CFG_ENABLE_LOCAL_REBUILD
+CFG_BOOTSTRAP_KEY_STAGE0=$(CFG_BOOTSTRAP_KEY)
+else
CFG_BOOTSTRAP_KEY_STAGE0=$(shell grep 'rustc_key' $(S)src/stage0.txt | sed 's/rustc_key: '//)
+endif
ifeq ($(CFG_RELEASE_CHANNEL),stable)
# This is the normal semver version string, e.g. "0.12.0", "0.12.0-nightly"
@@ -526,6 +533,11 @@ ifneq ($(strip $(CFG_BUILD)),$(strip $(3)))
CFGFLAG$(1)_T_$(2)_H_$(3) = stage1
RPATH_VAR$(1)_T_$(2)_H_$(3) := $$(TARGET_RPATH_VAR1_T_$(2)_H_$$(CFG_BUILD))
+else
+ifdef CFG_ENABLE_LOCAL_REBUILD
+# Assume the local-rebuild rustc already has stage1 features too.
+CFGFLAG$(1)_T_$(2)_H_$(3) = stage1
+endif
endif
endif
diff --git a/src/bootstrap/build/config.rs b/src/bootstrap/build/config.rs
index 3c35b9a95169..fb1ad12d914f 100644
--- a/src/bootstrap/build/config.rs
+++ b/src/bootstrap/build/config.rs
@@ -67,6 +67,7 @@ pub struct Config {
pub target: Vec<String>,
pub rustc: Option<String>,
pub cargo: Option<String>,
+ pub local_rebuild: bool,
// libstd features
pub debug_jemalloc: bool,
@@ -315,6 +316,7 @@ impl Config {
("RPATH", self.rust_rpath),
("OPTIMIZE_TESTS", self.rust_optimize_tests),
("DEBUGINFO_TESTS", self.rust_debuginfo_tests),
+ ("LOCAL_REBUILD", self.local_rebuild),
}
match key {
diff --git a/src/bootstrap/build/mod.rs b/src/bootstrap/build/mod.rs
index ebc05c5f61c5..21d12d27d92e 100644
--- a/src/bootstrap/build/mod.rs
+++ b/src/bootstrap/build/mod.rs
@@ -510,6 +510,14 @@ impl Build {
.arg("-j").arg(self.jobs().to_string())
.arg("--target").arg(target);
+ let stage;
+ if compiler.stage == 0 && self.config.local_rebuild {
+ // Assume the local-rebuild rustc already has stage1 features.
+ stage = 1;
+ } else {
+ stage = compiler.stage;
+ }
+
// Customize the compiler we're running. Specify the compiler to cargo
// as our shim and then pass it some various options used to configure
// how the actual compiler itself is called.
@@ -518,7 +526,7 @@ impl Build {
// src/bootstrap/{rustc,rustdoc.rs}
cargo.env("RUSTC", self.out.join("bootstrap/debug/rustc"))
.env("RUSTC_REAL", self.compiler_path(compiler))
- .env("RUSTC_STAGE", compiler.stage.to_string())
+ .env("RUSTC_STAGE", stage.to_string())
.env("RUSTC_DEBUGINFO", self.config.rust_debuginfo.to_string())
.env("RUSTC_CODEGEN_UNITS",
self.config.rust_codegen_units.to_string())
@@ -744,7 +752,7 @@ impl Build {
// In stage0 we're using a previously released stable compiler, so we
// use the stage0 bootstrap key. Otherwise we use our own build's
// bootstrap key.
- let bootstrap_key = if compiler.is_snapshot(self) {
+ let bootstrap_key = if compiler.is_snapshot(self) && !self.config.local_rebuild {
&self.bootstrap_key_stage0
} else {
&self.bootstrap_key

View File

@ -0,0 +1,58 @@
commit 7bddce693cec4ae4eb6970ed91289815b316cff3 (from 17b6261cc41343b1f2b611ca12f1ccd2d4306ee5)
Merge: 17b6261cc413 6e9774f4bb70
Author: bors <bors@rust-lang.org>
Date: Fri May 27 14:49:10 2016 -0700
Auto merge of #33798 - locallycompact:lc/misleading-intentation, r=alexcrichton
Fix misleading intentation errors on gcc 6.0
Currently building with latest gcc results in the following error:
compile: x86_64-unknown-linux-gnu/rt/miniz.o
/home/lc/rust/src/rt/miniz.c: In function tinfl_decompress:
/home/lc/rust/src/rt/miniz.c:578:9: error: this for clause does not guard... [-Werror=misleading-indentation]
for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8;
^~~
/home/lc/rust/src/rt/miniz.c:578:47: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the for
for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8;
^~~
/home/lc/rust/src/rt/miniz.c: In function tdefl_find_match:
/home/lc/rust/src/rt/miniz.c:1396:5: error: this if clause does not guard... [-Werror=misleading-indentation]
if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break;
^~
/home/lc/rust/src/rt/miniz.c:1396:23: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the if
if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break;
^
This patch stops this.
diff --git a/src/rt/miniz.c b/src/rt/miniz.c
index 2b803b06d099..2daca9378a4a 100644
--- a/src/rt/miniz.c
+++ b/src/rt/miniz.c
@@ -575,7 +575,10 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_nex
{
mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i;
r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32);
- for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8;
+ for ( i = 0; i <= 143; ++i) *p++ = 8;
+ for ( ; i <= 255; ++i) *p++ = 9;
+ for ( ; i <= 279; ++i) *p++ = 7;
+ for ( ; i <= 287; ++i) *p++ = 8;
}
else
{
@@ -1393,7 +1396,10 @@ static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahe
if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) break;
TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
}
- if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break;
+ if (!dist) break;
+ p = s; q = d->m_dict + probe_pos;
+ for (probe_len = 0; probe_len < max_match_len; probe_len++)
+ if (*p++ != *q++) break;
if (probe_len > match_len)
{
*pMatch_dist = dist; if ((*pMatch_len = match_len = probe_len) == max_match_len) return;

275
rust.spec Normal file
View File

@ -0,0 +1,275 @@
# The channel can be stable, beta, or nightly
%{!?channel: %global channel stable}
# To bootstrap from scratch, set the channel and date from src/stage0.txt
# e.g. 1.10.0 wants rustc: 1.9.0-2016-05-24
# or nightly wants some beta-YYYY-MM-DD
%bcond_without bootstrap
%global bootstrap_channel 1.9.0
%global bootstrap_date 2016-05-24
# Use "rebuild" when building with a distro rustc of the same version.
# Turn this off when the distro has the prior release, matching bootstrap.
%bcond_without rebuild
# The script for minidebuginfo copies symbols and *notes* into a "mini"
# ELF object compressed into the .gnu_debugdata section. This includes our
# relatively large .note.rustc metadata, bloating every library. Eventually
# that metadata should be stripped beforehand -- see rust #23366 and #26764.
%undefine _include_minidebuginfo
Name: rust
Version: 1.10.0
Release: 3%{?dist}
Summary: The Rust Programming Language
License: (ASL 2.0 or MIT) and (BSD and ISC and MIT)
# ^ written as: (rust itself) and (bundled libraries)
URL: https://www.rust-lang.org
%if "%{channel}" == "stable"
%global rustc_package rustc-%{version}
%else
%global rustc_package rustc-%{channel}
%endif
Source0: https://static.rust-lang.org/dist/%{rustc_package}-src.tar.gz
%if %with bootstrap
%global bootstrap_base https://static.rust-lang.org/dist/%{bootstrap_date}/rustc-%{bootstrap_channel}
Source1: %{bootstrap_base}-x86_64-unknown-linux-gnu.tar.gz
Source2: %{bootstrap_base}-i686-unknown-linux-gnu.tar.gz
#Source3: %{bootstrap_base}-armv7-unknown-linux-gnueabihf.tar.gz
#Source4: %{bootstrap_base}-aarch64-unknown-linux-gnu.tar.gz
%endif
# Only x86_64 and i686 are Tier 1 platforms at this time.
# https://doc.rust-lang.org/stable/book/getting-started.html#tier-1
ExclusiveArch: x86_64 i686
#ExclusiveArch: x86_64 i686 armv7hl aarch64
%ifarch armv7hl
%global rust_triple armv7-unknown-linux-gnueabihf
%else
%define rust_triple %{_target_cpu}-unknown-linux-gnu
%endif
# merged for 1.11.0: https://github.com/rust-lang/rust/pull/33787
Patch1: rust-pr33787-enable-local-rebuild.patch
# merged for 1.11.0: https://github.com/rust-lang/rust/pull/33798
Patch2: rust-pr33798-miniz-misleading-indentation.patch
# merged for 1.11.0: https://github.com/rust-lang/hoedown/pull/6
# via https://github.com/rust-lang/rust/pull/33988
# (but eventually we should ditch this bundled hoedown)
Patch3: rust-hoedown-pr6-misleading-indentation.patch
BuildRequires: make
BuildRequires: cmake
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: llvm-devel
BuildRequires: zlib-devel
BuildRequires: python2
BuildRequires: curl
%if %without bootstrap
%if %with rebuild
BuildRequires: %{name} < %{version}-%{release}
BuildRequires: %{name} >= %{version}
%else
BuildRequires: %{name} < %{version}
BuildRequires: %{name} >= %{bootstrap_channel}
%endif
%endif
# make check: src/test/run-pass/wait-forked-but-failed-child.rs
BuildRequires: /usr/bin/ps
# TODO: work on unbundling these!
Provides: bundled(compiler-rt) = 3.8
Provides: bundled(hoedown) = 3.0.5
Provides: bundled(jquery) = 2.1.4
Provides: bundled(libbacktrace) = 6.1.0
Provides: bundled(miniz) = 1.14
# The C compiler is needed at runtime just for linking. Someday rustc might
# invoke the linker directly, and then we'll only need binutils.
# https://github.com/rust-lang/rust/issues/11937
Requires: gcc
# ALL Rust libraries are private, because they don't keep an ABI.
%global _privatelibs lib.*-[[:xdigit:]]{8}[.]so.*
%global __provides_exclude ^(%{_privatelibs})$
%global __requires_exclude ^(%{_privatelibs})$
%description
Rust is a systems programming language that runs blazingly fast, prevents
segfaults, and guarantees thread safety.
This package includes the Rust compiler, standard library, and documentation
generator.
%package gdb
Summary: GDB pretty printers for Rust
BuildArch: noarch
Requires: gdb
%description gdb
This package includes the rust-gdb script, which allows easier debugging of Rust
programs.
%package doc
Summary: Documentation for Rust
BuildArch: noarch
# Note, while docs are mostly noarch, some things do vary by target_arch.
# These are few though, so for now we won't worry about it. FWIW, upstream's
# doc.rust-lang.org is only generated on Linux x86_64.
%description doc
This package includes HTML documentation for the Rust programming language and
its standard library.
# TODO: consider a rust-std package containing .../rustlib/$target
# This might allow multilib cross-compilation to work naturally.
%prep
%setup -q -n %{rustc_package}
%patch1 -p1 -b .rebuild
%patch2 -p1 -b .miniz-indent
%patch3 -p1 -d src/rt/hoedown/ -b .hoedown-indent
# unbundle
rm -rf src/llvm/ src/jemalloc/
# extract bundled licenses for packaging
cp src/rt/hoedown/LICENSE src/rt/hoedown/LICENSE-hoedown
sed -e '/*\//q' src/libbacktrace/backtrace.h \
>src/libbacktrace/LICENSE-libbacktrace
# rust-gdb has hardcoded SYSROOT/lib -- let's make it noarch
sed -i.noarch -e 's#DIRECTORY=".*"#DIRECTORY="%{_datadir}/%{name}/etc"#' \
src/etc/rust-gdb
# These tests assume that alloc_jemalloc is present
sed -i.jemalloc -e '1i // ignore-test jemalloc is disabled' \
src/test/compile-fail/allocator-dylib-is-system.rs \
src/test/compile-fail/allocator-rust-dylib-is-jemalloc.rs \
src/test/run-pass/allocator-default.rs
# Fedora's LLVM doesn't support any mips targets -- see "llc -version"
sed -i.nomips -e '/target=mips/,+1s/^/# unsupported /' \
src/test/run-make/atomic-lock-free/Makefile
%if %without bootstrap
# The hardcoded stage0 "lib" is inappropriate when using Fedora's own rustc
sed -i.libdir -e '/^HLIB_RELATIVE/s/lib$/$$(CFG_LIBDIR_RELATIVE)/' mk/main.mk
%endif
%if %with bootstrap
mkdir -p dl/
cp -t dl/ %{SOURCE1} %{SOURCE2} # %{SOURCE3} %{SOURCE4}
%endif
%build
%configure --disable-option-checking \
--build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \
%{!?with_bootstrap:--enable-local-rust %{?with_rebuild:--enable-local-rebuild}} \
--llvm-root=/usr --disable-codegen-tests \
--disable-jemalloc \
--disable-rpath \
--enable-debuginfo \
--release-channel=%{channel}
%make_build VERBOSE=1
%install
%make_install VERBOSE=1
# Remove installer artifacts (manifests, uninstall scripts, etc.)
find %{buildroot}/%{_libdir}/rustlib/ -maxdepth 1 -type f -exec rm -v '{}' '+'
# We don't want to ship the target shared libraries for lack of any Rust ABI.
find %{buildroot}/%{_libdir}/rustlib/ -type f -name '*.so' -exec rm -v '{}' '+'
# The remaining shared libraries should be executable for debuginfo extraction.
find %{buildroot}/%{_libdir}/ -type f -name '*.so' -exec chmod -v +x '{}' '+'
# FIXME: __os_install_post will strip the rlibs
# -- should we find a way to preserve debuginfo?
# Remove unwanted documentation files (we already package them)
rm -f %{buildroot}/%{_docdir}/%{name}/README.md
rm -f %{buildroot}/%{_docdir}/%{name}/COPYRIGHT
rm -f %{buildroot}/%{_docdir}/%{name}/LICENSE-APACHE
rm -f %{buildroot}/%{_docdir}/%{name}/LICENSE-MIT
# Sanitize the HTML documentation
find %{buildroot}/%{_docdir}/%{name}/html -empty -delete
find %{buildroot}/%{_docdir}/%{name}/html -type f -exec chmod -v -x '{}' '+'
# Move rust-gdb's python scripts so they're noarch
mkdir -p %{buildroot}/%{_datadir}/%{name}
mv -v %{buildroot}/%{_libdir}/rustlib/etc %{buildroot}/%{_datadir}/%{name}/
%check
# Note, many of the tests execute in parallel threads,
# so it's better not to use a parallel make here.
make check-lite VERBOSE=1
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%license COPYRIGHT LICENSE-APACHE LICENSE-MIT
%license src/libbacktrace/LICENSE-libbacktrace
%license src/rt/hoedown/LICENSE-hoedown
%doc README.md
%{_bindir}/rustc
%{_bindir}/rustdoc
%{_mandir}/man1/rustc.1*
%{_mandir}/man1/rustdoc.1*
%{_libdir}/lib*
%dir %{_libdir}/rustlib
%{_libdir}/rustlib/%{rust_triple}
%files gdb
%{_bindir}/rust-gdb
%{_datadir}/%{name}
%files doc
%dir %{_docdir}/%{name}
%license %{_docdir}/%{name}/html/FiraSans-LICENSE.txt
%license %{_docdir}/%{name}/html/Heuristica-LICENSE.txt
%license %{_docdir}/%{name}/html/LICENSE-APACHE.txt
%license %{_docdir}/%{name}/html/LICENSE-MIT.txt
%license %{_docdir}/%{name}/html/SourceCodePro-LICENSE.txt
%license %{_docdir}/%{name}/html/SourceSerifPro-LICENSE.txt
%doc %{_docdir}/%{name}/html/
%changelog
* Thu Aug 11 2016 Josh Stone <jistone@redhat.com> - 1.10.0-3
- Initial import into Fedora (#1356907), bootstrapped
- Format license text as suggested in review.
- Make -doc noarch for now, despite small variations.
- Note how the tests already run in parallel.
- Undefine _include_minidebuginfo, because it duplicates ".note.rustc".
* Tue Jul 26 2016 Josh Stone <jistone@redhat.com> - 1.10.0-2
- Update -doc directory ownership, and mark its licenses.
- Package and declare licenses for libbacktrace and hoedown.
- Set bootstrap_base as a global.
- Explicitly require python2.
* Thu Jul 14 2016 Josh Stone <jistone@fedoraproject.org> - 1.10.0-1
- Initial package, bootstrapped

View File

@ -0,0 +1,3 @@
a48fef30353fc9daa70b484b690ce5db rustc-1.10.0-src.tar.gz
287d0f4838afa56abfab6be0805cf07a rustc-1.9.0-i686-unknown-linux-gnu.tar.gz
f1cf6d2fe15e4be18a08259f1540a4ae rustc-1.9.0-x86_64-unknown-linux-gnu.tar.gz