Import rustc_1.45.0+dfsg1-2.debian.tar.xz
authorXimin Luo <infinity0@debian.org>
Thu, 6 Aug 2020 20:11:39 +0000 (21:11 +0100)
committerXimin Luo <infinity0@debian.org>
Thu, 6 Aug 2020 20:11:39 +0000 (21:11 +0100)
[dgit import tarball rustc 1.45.0+dfsg1-2 rustc_1.45.0+dfsg1-2.debian.tar.xz]

87 files changed:
NEWS [new file with mode: 0644]
README.Debian [new file with mode: 0644]
README.source [new file with mode: 0644]
TODO [new file with mode: 0644]
architecture-test.mk [new file with mode: 0644]
architecture.mk [new file with mode: 0644]
bin/rust-lld [new file with mode: 0755]
cargo/.package-cache [new file with mode: 0644]
changelog [new file with mode: 0644]
check-orig-suspicious.sh [new file with mode: 0755]
config.toml.in [new file with mode: 0644]
control [new file with mode: 0644]
copyright [new file with mode: 0644]
docs [new file with mode: 0644]
ensure-patch [new file with mode: 0755]
gbp.conf [new file with mode: 0644]
get-stage0.py [new file with mode: 0755]
icons/rust-logo-32x32-blk.png [new file with mode: 0644]
libstd-rust-1.45.lintian-overrides [new file with mode: 0644]
libstd-rust-dev-wasm32-cross.lintian-overrides [new file with mode: 0644]
libstd-rust-dev.lintian-overrides [new file with mode: 0644]
lintian-to-copyright.sh [new file with mode: 0755]
llvm-upstream-patch.sh [new file with mode: 0755]
make_orig-stage0_tarball.sh [new file with mode: 0755]
patches/d-0000-ignore-removed-submodules.patch [new file with mode: 0644]
patches/d-0001-disable-miniz.patch [new file with mode: 0644]
patches/d-0002-pkg-config-no-special-snowflake.patch [new file with mode: 0644]
patches/d-0003-mdbook-strip-embedded-libs.patch [new file with mode: 0644]
patches/d-add-soname.patch [new file with mode: 0644]
patches/d-custom-debuginfo-path.patch [new file with mode: 0644]
patches/d-disable-cargo-vendor.patch [new file with mode: 0644]
patches/d-dont-download-stage0.patch [new file with mode: 0644]
patches/d-fix-mips64el-bootstrap.patch [new file with mode: 0644]
patches/d-host-duplicates.patch [new file with mode: 0644]
patches/d-i686-baseline.patch [new file with mode: 0644]
patches/d-ignore-avx-44056.patch [new file with mode: 0644]
patches/d-no-jemalloc.patch [new file with mode: 0644]
patches/d-prefer-dynamic.patch [new file with mode: 0644]
patches/d-read-beta-version-from-file.patch [new file with mode: 0644]
patches/d-rust-gdb-paths [new file with mode: 0644]
patches/d-rust-lldb-paths [new file with mode: 0644]
patches/d-use-local-css.patch [new file with mode: 0644]
patches/d-use-system-compiler-rt.patch [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/u-1629fed4c0bdc6d3246ea63a91f600bcb8874626.patch [new file with mode: 0644]
patches/u-1f0895162ba5a783d4d73d5c263552eaca9343b3.patch [new file with mode: 0644]
patches/u-249a46f56cbbb6ffecb726d07163741093da6406.patch [new file with mode: 0644]
patches/u-5ceff6b96af9a21e044545b9e064433feccaf659.patch [new file with mode: 0644]
patches/u-9abdb6db6f7d50761a701fe17d384d7ea49b015d.patch [new file with mode: 0644]
patches/u-allow-system-compiler-rt.patch [new file with mode: 0644]
patches/u-c0c3327ade8b0caa3043425ee45842c86fbd4f76.patch [new file with mode: 0644]
patches/u-fb9fa5ba3ee08171e7d2ff35d28ec0dd93b0287b.patch [new file with mode: 0644]
patches/u-fix-exec.patch [new file with mode: 0644]
patches/u-ignore-endian.patch [new file with mode: 0644]
patches/u-make-tests-work-without-rpath.patch [new file with mode: 0644]
patches/u-mips-fixes.diff [new file with mode: 0644]
patches/u-reproducible-build.patch [new file with mode: 0644]
patches/u-reproducible-dl-stage0.patch [new file with mode: 0644]
patches/u-rustc-llvm-cross-flags.patch [new file with mode: 0644]
patches/u-tests-ignore-arm.patch [new file with mode: 0644]
prune-checksums [new file with mode: 0755]
prune-unused-deps [new file with mode: 0755]
rules [new file with mode: 0755]
rust-doc.doc-base.book [new file with mode: 0644]
rust-doc.doc-base.reference [new file with mode: 0644]
rust-doc.docs [new file with mode: 0644]
rust-doc.install [new file with mode: 0644]
rust-doc.links [new file with mode: 0644]
rust-gdb.install [new file with mode: 0644]
rust-gdb.links [new file with mode: 0644]
rust-lldb.install [new file with mode: 0644]
rust-lldb.links [new file with mode: 0644]
rust-src.install.in [new file with mode: 0644]
rust-src.links.in [new file with mode: 0644]
rust-src.lintian-overrides [new file with mode: 0644]
rustc.install [new file with mode: 0644]
rustc.links [new file with mode: 0644]
rustc.manpages [new file with mode: 0644]
source/format [new file with mode: 0644]
source/include-binaries [new file with mode: 0644]
source/lintian-overrides [new file with mode: 0644]
source/options [new file with mode: 0644]
update-version.sh [new file with mode: 0755]
upstream-tarball-unsuspicious.txt [new file with mode: 0644]
upstream/signing-key.asc [new file with mode: 0644]
watch [new file with mode: 0644]
watch-beta.in [new file with mode: 0644]

diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..067259d
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,29 @@
+rustc (1.20.0+dfsg1-2) unstable; urgency=medium
+
+  Starting from version 1.20.0+dfsg1-1 (i.e. the previous version) the Debian
+  packages of rustc no longer fail their build if any tests fail. In other
+  words, some tests might have failed when building this and future versions of
+  the package. This is due to lack of maintainer time to investigate failures.
+
+  Many previous test failures were reported to upstream and did not receive a
+  timely response, suggesting the failures were not important. I was then
+  forced to patch out the test to make the build proceed, so several tests were
+  being ignored in practise anyway.
+
+  This brings the Debian package in line with the Fedora package which also
+  ignores all test failures. (Many other distributions don't run tests at all.)
+
+  If you think that the Debian rustc package is miscompiling your program in a
+  way that the upstream distributed compiler doesn't, you may check the test
+  failures here:
+
+  https://buildd.debian.org/status/package.php?p=rustc
+
+  If you can identify a relevant test failure as well as the patches needed to
+  fix it (either to rustc or LLVM), this will speed up the processing of any
+  bug reports on the Debian side.
+
+  We will also examine these failures ourselves on a best-effort basis and
+  attempt to fix the more serious-looking ones.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 16 Oct 2017 18:02:23 +0200
diff --git a/README.Debian b/README.Debian
new file mode 100644 (file)
index 0000000..577d773
--- /dev/null
@@ -0,0 +1,239 @@
+Architecture-specific notes
+===========================
+
+armhf armel mips mipsel powerpc powerpcspe
+------------------------------------------
+
+We only ship debuginfo for libstd and not the compiler itself, otherwise builds
+run out of memory on the Debian buildds, with non-obvious and random errors.
+
+See https://github.com/rust-lang/rust/issues/45854 for details.
+
+If all your armhf build machines have ~8GB memory or more, you can experiment
+with disabling this work-around (i.e. revert to normal) in d/rules.
+
+wasm32
+------
+
+We ship two different wasm32 targets - wasm32-unknown-unknown and wasm32-wasi -
+in the libstd-rust-dev-wasm32-cross package.
+
+wasm32-unknown-unknown is suitable for web stuff, where you typically will need
+to depending on the rust-wasm-bindgen, js-sys, and web-sys crates. Here, calls
+to libstd stuff (such as println!()) will silently do nothing, as defined in
+``src/libstd/sys/wasm/fs.rs`` and explained in upstream #48564.
+
+wasm32-wasi is suitable for non-web stuff, and is closer to a "normal" target
+where you expect libstd to be available, and for println!() to actually print
+to stdout. If you just want to cross-compile a regular non-wasm library or
+program to wasm for whatever reason, and only want to run it natively and not
+inside a web browser, use this target.
+
+To run the generated wasm, you will need a runtime:
+
+- https://github.com/bytecodealliance/wasmtime
+- https://github.com/bytecodealliance/lucet
+- https://github.com/wasmerio/wasmer
+- https://nodejs.org/api/wasi.html (sadly Debian's is too old, ATTOW)
+
+The first 3 are actually also all written in Rust, so one day some of them may
+even be packaged for Debian.
+
+
+Cross-compiling
+===============
+
+Rust uses LLVM, so cross-compiling works a bit differently from the GNU
+toolchain. The most important difference is that there are no "cross"
+compilers, every compiler is already a cross compiler. All you need to do is
+install the standard libraries for each target architecture you want to compile
+to. For rustc, this is libstd-rust-dev, so your debian/control would look
+something like this:
+
+    Build-Depends:
+     [..]
+     rustc:native    (>= $version),
+     libstd-rust-dev (>= $version),
+     [..]
+
+You need both, this is important. When Debian build toolchains satisfy the
+build-depends of a cross-build, (1) a "rustc:native" Build-Depends selects
+rustc for the native architecture, which is possible because it's "Multi-Arch:
+allowed", and this will implicitly pull in libstd-rust-dev also for the native
+architecture; and (2) a "libstd-rust-dev" Build-Depends implies libstd-rust-dev
+for the foreign architecture, since it's "Multi-Arch: same".
+
+You'll probably also want to add
+
+    include /usr/share/rustc/architecture.mk
+
+to your debian/rules. This sets some useful variables like DEB_HOST_RUST_TYPE.
+
+See the cargo package for an example.
+
+Terminology
+-----------
+
+The rust ecosystem generally uses the term "host" for the native architecture
+running the compiler, equivalent to DEB_BUILD_RUST_TYPE or "build" in GNU
+terminology, and "target" for the foreign architecture that the build products
+run on, equivalent to DEB_HOST_RUST_TYPE or "host" in GNU terminology. For
+example, rustc --version --verbose will output something like:
+
+    rustc 1.16.0
+    [..]
+    host: x86_64-unknown-linux-gnu
+
+And both rustc and cargo have --target flags:
+
+    $ rustc --help | grep '\-\-target'
+        --target TARGET     Target triple for which the code is compiled
+    $ cargo build --help | grep '\-\-target'
+        --target TRIPLE              Build for the target triple
+
+One major exception to this naming scheme is in CERTAIN PARTS OF the build
+scripts of cargo and rustc themselves, such as the `./configure` scripts and
+SOME PARTS of the `config.toml` files. Here, "build", "host" and "target" mean
+the same things they do in GNU toolchain terminology. However, IN OTHER PARTS
+OF the build scripts of cargo and rustc, as well as cargo and rustc's own
+output and logging messages, the term "host" and "target" mean as they do in
+the previous paragraph. Yes, it's a total mind fuck. :( Table for clarity:
+
+======================================= =============== ========================
+                                        Rust ecosystem, Some parts of the rustc
+GNU term / Debian envvar                rustc and cargo and cargo build scripts
+======================================= =============== ========================
+build   DEB_BUILD_{ARCH,RUST_TYPE}      host            build
+  the machine running the build
+--------------------------------------- --------------- ------------------------
+host    DEB_HOST_{ARCH,RUST_TYPE}       target          host(s)
+  the machine the build products run on
+--------------------------------------- --------------- ------------------------
+only relevant when building a compiler
+target  DEB_TARGET_{ARCH,RUST_TYPE}     N/A             target(s)
+  the one architecture that the built                     extra architectures
+  cross-compiler itself builds for                        to build "std" for
+--------------------------------------- --------------- ------------------------
+
+
+Porting to new architectures (on the same distro)
+=================================================
+
+As mentioned above, to cross-compile rust packages you need to install the rust
+standard library for each relevant foreign architecture. However, this is not
+needed when cross-compiling rustc itself; its build system will build any
+relevant foreign-architecture standard libraries automatically.
+
+Cross-build, in a schroot using sbuild
+--------------------------------------
+
+0. Set up an schroot for your native architecture, for sbuild:
+
+    sudo apt-get install sbuild
+    sudo sbuild-adduser $LOGNAME
+    newgrp sbuild # or log out and log back in
+    sudo sbuild-createchroot --include=eatmydata,ccache,gnupg unstable \
+      /srv/chroot/unstable-$(dpkg-architecture -qDEB_BUILD_ARCH)-sbuild \
+      http://deb.debian.org/debian
+
+   See https://wiki.debian.org/sbuild for more details.
+
+1. Build it:
+
+    sudo apt-get source --download-only rustc
+    sbuild --host=$new_arch rustc_*.dsc
+
+Cross-build, directly on your own system
+----------------------------------------
+
+0. Install the build-dependencies of rustc (including cargo and itself):
+
+    sudo dpkg --add-architecture $new_arch
+    sudo apt-get --no-install-recommends build-dep --host-architecture=$new_arch rustc
+
+1. Build it:
+
+    apt-get source --compile --host-architecture=$new_arch rustc
+
+Native-build using bundled upstream binary blobs
+------------------------------------------------
+
+Use the same instructions as given in "Bootstrapping" in debian/README.source
+in the source package, making sure to set the relevant architectures.
+
+Responsible distribution of cross-built binaries
+------------------------------------------------
+
+By nature, cross-builds do not run tests. These are important for rustc and
+many tests often fail on newly-supported architectures even if builds and
+cross-builds work fine. You should find some appropriate way to test your
+cross-built packages rather than blindly shipping them to users.
+
+For example, Debian experimental is an appropriate place to upload them, so
+that they can be installed and tested on Debian porter boxes, before being
+uploaded to unstable and distributed to users.
+
+
+Test failures
+=============
+
+Starting from version 1.20.0+dfsg1-1 the Debian packages of rustc no longer
+fail the overall build if > 0 tests fail. Instead, we allow up to around 5
+tests to fail. In other words, if you're reading this in a binary package,
+between 0 and 5 tests might have failed when building this.
+
+This is due to lack of maintainer time to investigate all failures. Many
+previous test failures were reported to upstream and did not receive a timely
+response, suggesting the failures were not important. I was then forced to
+patch out the test to make the build proceed, so several tests were being
+ignored in practise anyway.
+
+This brings the Debian package in line with the Fedora package which also
+ignores all test failures. (Many other distributions don't run tests at all.)
+
+If you think that the Debian rustc package is miscompiling your program in a
+way that the upstream distributed compiler doesn't, you may check the test
+failures here:
+
+https://buildd.debian.org/status/package.php?p=rustc
+
+If you can identify a relevant test failure, as well as the patches needed to
+fix it (either to rustc or LLVM), this will speed up the processing of any bug
+reports on the Debian side.
+
+We will also examine these failures ourselves on a best-effort basis and
+attempt to fix the more serious-looking ones.
+
+Uncommon architectures
+----------------------
+
+Debian release architectures armel and s390x currently have more test failures,
+being tracked by upstream here:
+
+- https://github.com/rust-lang/rust/issues/52493 armel
+- https://github.com/rust-lang/rust/issues/52491 s390x
+
+Ports architectures
+-------------------
+
+The number of allowed test failures on certain Debian ports architectures
+(currently powerpc, powerpcspe, sparc64, x32) is raised greatly to help unblock
+progress for porters. Of course, as a user this means you may run into more
+bugs than usual; as mentioned above bugs reports and patches are welcome.
+
+
+Shared libraries
+================
+
+For now, the shared libraries of Rust are private.
+The rational is the following:
+ * Upstream prefers static linking for now
+   - https://github.com/rust-lang/rust/issues/10209
+ * rust is still under heavy development. As far as we know, there is
+   no commitement from upstream to provide a stable ABI for now.
+   Until we know more, we cannot take the chance to have Rust-built packages
+   failing at each release of the compiler.
+ * Static builds are working out of the box just fine
+ * However, LD_LIBRARY_PATH has to be updated when -C prefer-dynamic is used
+
+ -- Sylvestre Ledru <sylvestre@debian.org>, Fri, 13 Feb 2015 15:08:43 +0100
diff --git a/README.source b/README.source
new file mode 100644 (file)
index 0000000..3495c25
--- /dev/null
@@ -0,0 +1,237 @@
+Document by Ximin Luo, Luca Bruno & Sylvestre Ledru
+
+This source package is unfortunately quite tricky and with several cutting
+edges, due to the complexity of rust-lang bootstrapping system and the high
+rate of language changes still ongoing.
+
+We try to describe here inner packaging details and the reasons behind them.
+
+If you are looking to help maintain this package, be sure to read the "Notes
+for package maintainers" section further below.
+
+
+Embedded libraries
+==================
+
+The upstream source package embeds many external libraries. We make a great
+effort to remove them and use system versions where possible, but there are a
+few more remaining:
+
+ * vendor/backtrace-sys, vendor/dlmalloc, vendor/walkdir
+
+   These are small C libraries designed to be statically linked; their upstream
+   does not support building them as a shared library and they are too small to
+   justify their own Debian package.
+
+
+Building from source
+====================
+
+The Debian rustc package will use the system rustc to bootstrap itself from.
+The system rustc has to be either the previous or the same version as the rustc
+being built; the build will fail if this is not the case.
+
+    sudo apt-get build-dep ./
+    dpkg-buildpackage
+    # Or, to directly use what's in the Debian FTP archive
+    sudo apt-get build-dep rustc
+    apt-get source --compile rustc
+
+Alternatively, you may give the "pkg.rustc.dlstage0" DEB_BUILD_PROFILE to
+instead use the process defined by Rust upstream. This downloads the "official"
+stage0 compiler for the version being built from rust-lang.org. At the time of
+writing "official" means "the previous stable version".
+
+    sudo apt-get build-dep -P pkg.rustc.dlstage0 ./
+    dpkg-buildpackage
+    # Or, to directly use what's in the Debian FTP archive
+    sudo apt-get build-dep -P pkg.rustc.dlstage0 rustc
+    apt-get source --compile -P pkg.rustc.dlstage0 rustc
+
+After [1] is fixed, both of these should in theory give identical results.
+
+If neither of these options are acceptable to you, e.g. because your distro
+does not have rustc already and your build process cannot access the network,
+see "Bootstrapping" below.
+
+[1] https://github.com/rust-lang/rust/issues/34902
+
+
+Bootstrapping
+=============
+
+To bootstrap rustc on a distro that does not have it or cargo available on any
+architecture (so cross-compiling is not an option) you can run `debian/rules
+source_orig-stage0`. This creates a .dsc that does not Build-Depend on rustc or
+cargo. Instead, it includes an extra orig-stage0 source tarball that contains
+the official stage0 compiler, pre-downloaded from rust-lang.org so that your
+build daemons don't need to access the network during the build.
+
+    debian/rules source_orig-stage0
+    # Follow the final manual instructions that it outputs. Then:
+    sbuild ../rustc_*.dsc && dput ../rustc_*.dsc
+
+To only bootstrap specific architectures, run this instead:
+
+    upstream_bootstrap_arch="arm64 armhf" debian/rules source_orig-stage0
+
+This way, other architectures will be omitted from the orig-stage0 tarball. You
+might want to do this e.g. if these other architectures are already present in
+your distro, but the $upstream_bootstrap_arch ones are not yet present.
+
+Notes
+-----
+
+The approach bundles the upstream bootstrapping binaries inside the Debian
+source package. This is a nasty hack that stretches the definition of "source
+package", but has a few advantages explained below.
+
+The traditional Debian way of bootstrapping compilers - and other distros have
+similar approaches - is some variant of the following:
+
+1. A developer locally installs some upstream bootstrapping binaries.
+2. They locally build a Debian package, using these binaries as undeclared
+   build dependencies.
+3. They upload these binary packages to Debian, which can be used as declared
+   Build-Depends in the future, including by the same package.
+
+The problem with this is, Debian does not have any policy nor infrastructure
+that can try to reproduce what this developer supposedly did.
+
+Using bootstrapping binary blobs *at some point of the process* is unavoidable.
+Rather than pretending we didn't do this, it is better to record *which blobs*
+we used, so it can be audited later. If we bundle non-Debian build-dependencies
+inside the source package, then we can do a *source-only upload*, and the
+building of the binary packages can be done by the normal build infrastructure.
+
+If the build process is reproducible [1] then we can be sure that *you* (as the
+developer that prepared the source-only upload) didn't backdoor the binaries,
+nor did the build daemons even if they were compromised during the build.
+
+The bootstrapping binaries may still have been backdoored, but this is true in
+both scenarios. So our arrangement is still a strict improvement in security,
+because it reduces the set of "things that may have been backdoored". Also,
+more people use the upstream binaries than the "magical original Debian
+package", so backdoors have a greater chance of being detected in the former.
+
+In the long run, this process is laying the foundations for doing Diverse
+Double-Compilation [2], where we use *many independent* bootstrapping binaries
+to reproduce bit-for-bit identical output compilers, giving confidence that
+nothing was backdoored along the way.
+
+[1] The build process for rustc is currently *not* reproducible but we're
+    working towards it. https://github.com/rust-lang/rust/issues/34902
+[2] http://www.dwheeler.com/trusting-trust/
+
+
+Maintaining this package
+========================
+
+Import of a new upstream version
+--------------------------------
+
+$ apt install equivs python3-magic
+$ sudo mk-build-deps -irt 'aptitude -R'
+$ uscan --verbose                       # or debian/rules source_orig-beta, for beta
+$ ver=UPDATE-ME                         # whatever it is, probably X.YY.Z or X.YY.Z~beta.N
+
+$ tar xf ../rustc-${ver/\~/-}-src.tar.xz && ( cd rustc-${ver/*~*/beta}-src/ && pwd && ../debian/prune-unused-deps ) && rm -rf rustc-${ver/*~*/beta}-src/
+# ^ If this fails, you probably need to refresh the patches used by debian/prune-unused-deps
+$ git diff
+# Review the diff. If it removes too much stuff, it could mean that rustc
+# pulled in new unnecessary dependencies in this newer version. See if you can
+# drop them by amending the patch "d-0000-ignore-removed-submodules.patch".
+# Rerun the above "tar ..." commands again and check that your patch works.
+# For example, there is absolutely no reason why rustc should need openssl.
+
+$ git commit -m "Update Files-Excluded for new upstream version ${ver/\~/-}" debian/copyright
+$ uscan --verbose                       # yes, again, to pick up the new Files-Excluded stuff
+                                        # or debian/rules source_orig-beta, for beta
+
+# Keep running this and follow its instructions, until it gives no output:
+$ debian/check-orig-suspicious.sh $ver
+# When you are satisfied with the above, proceed:
+
+$ git checkout debian/experimental
+$ gbp import-orig ../rustc_$ver+dfsg1.orig.tar.xz
+$ dch -v $ver+dfsg1-1~exp1 "New upstream release."
+$ debian/rules update-version
+# might also need to bump the version of the cargo Build-Depends
+# then refresh patches, etc etc
+# Use /usr/share/cargo/scripts/guess-crate-copyright to help update d/copyright quickly
+
+# If you need to repack again, bump the 'repacksuffix' in d/watch then run
+$ uscan --verbose --force-download
+# This will do a local repack using the new Files-Excluded rules, without
+# redownloading the orig tarball (despite the slightly misleading flag).
+
+
+Proceeding after build failure
+------------------------------
+
+If your build fails, don't run `./x.py` directly as that will detect it's being
+run with different settings, and run the build from scratch all over again.
+overwriting all intermediate files. Instead, do:
+
+$ debian/rules run_rustbuild X_CMD="build|test|install" X_FLAGS="whatever"
+
+Hopefully, this will directly proceed to the step that failed, without
+rebuilding everything in between.
+
+
+Comparing Debian rustc vs upstream rustc
+----------------------------------------
+
+This package does things the Debian way, which differs significantly from
+upstream practices. If you find a bug, you might want to check if it is present
+in the upstream package. Run "debian/rules debian/config.toml" to generate our
+config.toml that you can then use in an upstream directory **unpacked from the
+release tarball*. (It is more complex to get this working with their git repo.)
+
+This will configure it in a "halfway" style between upstream and Debian.
+Specifically, it will not build LLVM nor download stuff from crates.io, yet
+Debian patches are *not* applied. These specific settings were chosen as a
+tradeoff between convenience vs being close to what upstream does - so that the
+chances of a bug here being a genuine upstream issue rather than a Debian bug,
+is much higher. Also, with the exception of LLVM, these are non-default modes
+*supported by* upstream so they would be happy to receive bug reports about it
+even if your issue only occurs here.
+
+OTOH if you need to test a completely clean upstream build, including all the
+annoying stuff like building LLVM and downloading dependencies from crates.io,
+simply unpack the tarball and run `./configure && ./x.py build` etc as normal.
+This can be useful for confirming that an issue is caused by Debian's LLVM.
+
+If you need to test a LLVM patch, do something like this:
+
+# build your patched LLVM debs, then:
+$ mkdir -p llvm-destdir && cd llvm-destdir
+$ ver=4.0; VERSION=FIXME
+$ for i in llvm-$ver llvm-$ver-dev llvm-$ver-runtime llvm-$ver-tools libllvm$ver; do \
+    dpkg -x ../"$i"_*${VERSION}_*.deb .; done
+$ cd ../rustc
+$ debian/rules LLVM_DESTDIR=$PWD/../llvm-destdir build
+
+If you need to test a patch to the stage0 rustc, do something like this:
+
+# build your patched rustc debs or upstream rustc, then:
+$ mkdir -p rust-destdir && cd rust-destdir
+$ ver=1.20; VERSION=FIXME;
+$ for i in rustc libstd-rust-$ver libstd-rust-dev; do \
+    dpkg -x ../"$i"_*${VERSION}_*.deb .; done
+$ cd ../rustc
+$ debian/rules RUST_DESTDIR=$PWD/../rust-destdir build
+
+
+Useful links
+------------
+
+The Fedora rust team is more active than the Debian one. Here are their links:
+
+Source code
+https://src.fedoraproject.org/rpms/rust/tree/
+
+Binary packages and test logs
+https://kojipkgs.fedoraproject.org//packages/rust/
+If the same test fails both on Fedora and Debian it's a good indication that
+we're not Doing It Wrong and can file a valid bug upstream.
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..ed9f05b
--- /dev/null
+++ b/TODO
@@ -0,0 +1,12 @@
+Older backlog
+=============
+
+ * Use Compiler-rt package
+ * Improve the bootstrap (do the local build first on our systems, upload
+   to Debian and use the packages)
+ * Port on other archs
+ * Create a runtime package (rust-runtime)
+ * Move the runtime library into a public directory
+ * Package the various editors plugins (emacs, kate & vim)
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Tue, 20 Jan 2015 08:50:28 +0100
diff --git a/architecture-test.mk b/architecture-test.mk
new file mode 100644 (file)
index 0000000..e7aeaba
--- /dev/null
@@ -0,0 +1,16 @@
+# Used for testing architecture.mk, and for make_orig-stage0_tarball.sh.
+# Not for end users.
+#
+# Usage:
+# $ make -s --no-print-directory -f debian/architecture-test.mk rust-for-deb_arm64
+# arm64 aarch64-unknown-linux-gnu
+
+include debian/architecture.mk
+
+deb_arch_setvars = $(foreach var,ARCH ARCH_OS ARCH_CPU ARCH_BITS ARCH_ENDIAN GNU_CPU GNU_SYSTEM GNU_TYPE MULTIARCH,\
+  $(eval DEB_$(1)_$(var) = $(shell dpkg-architecture -a$(1) -qDEB_HOST_$(var) 2>/dev/null)))
+
+rust-for-deb_%:
+       $(eval $(call deb_arch_setvars,$*))
+       $(eval $(call rust_type_setvar,DEB_$*))
+       @echo $(DEB_$(*)_ARCH) $(DEB_$(*)_RUST_TYPE)
diff --git a/architecture.mk b/architecture.mk
new file mode 100644 (file)
index 0000000..dd027a1
--- /dev/null
@@ -0,0 +1,18 @@
+# This Makefile snippet defines DEB_*_RUST_TYPE triples based on DEB_*_GNU_TYPE
+
+include /usr/share/dpkg/architecture.mk
+
+rust_cpu = $(subst i586,i686,\
+$(if $(findstring -riscv64-,-$(2)-),$(subst riscv64,riscv64gc,$(1)),\
+$(if $(findstring -armhf-,-$(2)-),$(subst arm,armv7,$(1)),\
+$(if $(findstring -armel-,-$(2)-),$(subst arm,armv5te,$(1)),\
+$(1)))))
+rust_type_setvar = $(1)_RUST_TYPE ?= $(call rust_cpu,$($(1)_GNU_CPU),$($(1)_ARCH))-unknown-$($(1)_GNU_SYSTEM)
+
+$(foreach machine,BUILD HOST TARGET,\
+  $(eval $(call rust_type_setvar,DEB_$(machine))))
+
+# fallback for older dpkg versions
+ifeq ($(DEB_TARGET_RUST_TYPE),-unknown-)
+  DEB_TARGET_RUST_TYPE = $(DEB_HOST_RUST_TYPE)
+endif
diff --git a/bin/rust-lld b/bin/rust-lld
new file mode 100755 (executable)
index 0000000..90aae7c
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+# Wrapper around lld that strips away -Wl, which it doesn't recognise.
+# We need this for the wasm32 tests, where we have generic RUSTFLAGS that
+# includes LDFLAGS from dpkg-buildflags which assumes a GCC linker.
+#
+# However the tests fail for other reasons, namely we can't build rustdoc
+# (which runs the tests) in wasm32 yet. So this is just WIP at the moment,
+# it is not expect to work nor to be installed on user machines.
+exec /usr/bin/lld-10 "${@/#-Wl,/}"
diff --git a/cargo/.package-cache b/cargo/.package-cache
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..8bad867
--- /dev/null
+++ b/changelog
@@ -0,0 +1,1269 @@
+rustc (1.45.0+dfsg1-2) unstable; urgency=medium
+
+  * Add some more big-endian test patches.
+  * Backport some patches to fix some testsuite ICEs.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 06 Aug 2020 21:11:39 +0100
+
+rustc (1.45.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 05 Aug 2020 21:41:39 +0100
+
+rustc (1.45.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 27 Jul 2020 17:45:24 +0100
+
+rustc (1.44.1+dfsg1-3) unstable; urgency=medium
+
+  * Fix patch for line numbers on little-endian arches.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 28 Jul 2020 21:51:36 +0100
+
+rustc (1.44.1+dfsg1-2) unstable; urgency=medium
+
+  * Ignore tests that assume little-endian on big-endian arches.
+    See upstream #74829 for details.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 28 Jul 2020 21:20:24 +0100
+
+rustc (1.44.1+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Backport a typenum fix for i386.
+  * Work around upstream #74786 involving debuginfo maps.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 27 Jul 2020 13:15:20 +0100
+
+rustc (1.44.1+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 04 Jul 2020 18:04:42 +0100
+
+rustc (1.43.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Bump LLVM B-D version for some backported fixes affecting rustc.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 05 Jul 2020 15:06:52 +0100
+
+rustc (1.43.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * Drop sparc64 workaround. (Closes: #956413)
+  * Drop stack-gap workaround for old kernels and rust versions.
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 27 Apr 2020 13:09:20 +0100
+
+rustc (1.42.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 10 Apr 2020 11:33:25 +0100
+
+rustc (1.42.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  [ Fabian Grünbichler ]
+  * Team upload.
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 04 Apr 2020 16:06:03 +0100
+
+rustc (1.41.1+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 03 Apr 2020 23:41:11 +0100
+
+rustc (1.41.1+dfsg1-1~exp1) experimental; urgency=medium
+
+  [ Ximin Luo ]
+  * More python 2 -> 3 fixes.
+  * Enable the wasm32-wasi target for code that needs a "real" libstd.
+  * Don't strip static rlibs. This sometimes breaks wasm, and more generally
+    the stripped debuginfo is actually totally lost rather than being moved
+    into the -dbgsym packages. Shared libraries are unaffected and work.
+  * Allow 180 failing tests on riscv64, none were actually run last time.
+
+  [ Fabian Grünbichler ]
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 09 Mar 2020 00:31:34 +0000
+
+rustc (1.40.0+dfsg1-5) unstable; urgency=medium
+
+  * More python 2 -> 3 fixes.
+  * Allow 24 failing tests on riscv64.
+  * Reenable debuginfo for rustc, not just libstd.
+  * Reenable backtraces during tests.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 05 Jan 2020 13:35:46 +0000
+
+rustc (1.40.0+dfsg1-4) unstable; urgency=medium
+
+  * Experimental riscv64 support.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 04 Jan 2020 05:40:11 +0000
+
+rustc (1.40.0+dfsg1-3) unstable; urgency=medium
+
+  * Work around upstream #59264 again. :/
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 03 Jan 2020 22:05:16 +0000
+
+rustc (1.40.0+dfsg1-2) unstable; urgency=medium
+
+  * Fix more internal build scripts so they use python3.
+  * Don't add -L/usr/lib/llvm when cross-compiling. (Closes: #941783)
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 03 Jan 2020 20:18:46 +0000
+
+rustc (1.40.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Ignore new test failing on arm that also fails in previous versions.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 29 Dec 2019 22:17:04 +0000
+
+rustc (1.40.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 25 Dec 2019 00:09:24 +0000
+
+rustc (1.39.0+dfsg1-4) unstable; urgency=medium
+
+  * Update to LLVM 9. (Closes: #946886)
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 23 Dec 2019 03:21:02 +0000
+
+rustc (1.39.0+dfsg1-3) unstable; urgency=medium
+
+  * Fix mips patch involving mxgot for new RUSTFLAGS behaviour.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 06 Dec 2019 22:18:53 +0000
+
+rustc (1.39.0+dfsg1-2) unstable; urgency=medium
+
+  * Include reproducibility patch for compiler-builtins.
+  * Use python3 instead of python to run rustbuild. (Closes: #938422)
+  * Expand d-ignore-error-detail-diff.patch for unfixed upstream #53081.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 05 Dec 2019 22:51:41 +0000
+
+rustc (1.39.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 30 Nov 2019 22:20:48 +0000
+
+rustc (1.38.0+dfsg1-2) unstable; urgency=medium
+
+  * Fix building with rustc 1.38.0
+  * Fix building with cargo 0.40.0
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 29 Nov 2019 00:05:16 +0000
+
+rustc (1.38.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 26 Nov 2019 14:41:46 +0000
+
+rustc (1.37.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Fix a typo in debian/rules regex causing FTBFS on some arches.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 05 Sep 2019 00:06:23 -0700
+
+rustc (1.37.0+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Support cross-compiling to wasm32. (Closes: #903110)
+    To do that, install the libstd-rust-dev-wasm32-cross package and give
+    --target wasm32-unknown-unknown.
+  * Drop dependency on system compiler-rt, these new versions of rustc
+    actually don't need it at all.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 29 Aug 2019 09:00:03 -0700
+
+rustc (1.37.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Use system compiler-rt.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 25 Aug 2019 03:06:33 -0700
+
+rustc (1.36.0+dfsg1-2) unstable; urgency=medium
+
+  * Set CARGO_HOME to debian/cargo_home (instead of $HOME/.cargo) as newer
+    versions of cargo must take a file lock that has to exist.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 17 Jul 2019 18:25:06 -0700
+
+rustc (1.36.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 16 Jul 2019 20:27:55 -0700
+
+rustc (1.36.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 13 Jul 2019 12:42:05 -0700
+
+rustc (1.35.0+dfsg1-1) unstable; urgency=medium
+
+  * Add entry in 1.34.2+dfsg1-1 to note that it uses LLVM 7.
+  * Add entry in 1.35.0+dfsg1-1~exp2 to note that it uses LLVM 8.
+  * Fix ICE on sparc64 by including upstream PR #61881.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 13 Jul 2019 10:30:35 -0700
+
+rustc (1.35.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * Don't use system compiler-rt, it's not ready yet.
+  * Update to LLVM 8.
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 09 Jun 2019 23:20:52 -0700
+
+rustc (1.34.2+dfsg1-1) unstable; urgency=medium
+
+  * Don't use system compiler-rt, there are issues with that for now.
+  * Use LLVM 7 for the Debian buster release.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 29 May 2019 21:52:37 -0700
+
+rustc (1.34.2+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Fix doc build, add version 1 compat mode hack for mdBook 2.
+  * Use system compiler-rt from libclang-common-*-dev.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 24 May 2019 00:39:59 -0700
+
+rustc (1.34.2+dfsg1-1~exp1) experimental; urgency=medium
+
+  * Ensure Cargo.toml is in rust-src.
+  * New upstream release.
+  * Update to LLVM 8.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 19 May 2019 02:40:02 -0700
+
+rustc (1.33.0+dfsg1-2) unstable; urgency=medium
+
+  * Add Fedora patches.
+  * Bump i386 allowed test failures to 12.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 18 May 2019 12:18:25 -0700
+
+rustc (1.33.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Fix build on mips, flags needed whitespace massaging.
+  * Drop obsolete patches.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 17 May 2019 21:04:20 -0700
+
+rustc (1.33.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+  [ Hiroaki Nakamura ]
+  * Delete obsolete patch.
+
+  [ Sylvestre Ledru ]
+  * Update compiler-rt patch.
+  * Improve build-related docs a bit.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 29 Apr 2019 19:50:48 -0700
+
+rustc (1.32.0+dfsg1-3) unstable; urgency=medium
+
+  * Conditionally-apply u-compiletest.patch based on stage0 compiler.
+  * Fix syntax error in d/rules compiletest check.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 17 Mar 2019 16:40:05 -0700
+
+rustc (1.32.0+dfsg1-2) unstable; urgency=medium
+
+  * More verbose logging during builds.
+  * Fix compiletest compile error, and check log has at least 1 pass.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 17 Mar 2019 12:52:57 -0700
+
+rustc (1.32.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 27 Jan 2019 22:02:48 -0800
+
+rustc (1.32.0~beta.2+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Note that this upstream version already Closes: #917191.
+  * Backport other upstream fixes. (Closes: #916818, #917000, #917192).
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 01 Jan 2019 15:26:57 -0800
+
+rustc (1.32.0~beta.2+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Drop obsolete d-sparc64-dont-pack-spans.patch
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 16 Dec 2018 13:48:25 -0800
+
+rustc (1.31.0+dfsg1-2) unstable; urgency=medium
+
+  * Bump mips mipsel s390x allowed-failures to 24.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 16 Dec 2018 14:34:44 -0800
+
+rustc (1.31.0+dfsg1-1) unstable; urgency=medium
+
+  * Revert debuginfo patches, they're not ready yet.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 16 Dec 2018 09:58:06 -0800
+
+rustc (1.31.0+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Drop redundant patches.
+  * Fix line numbers in some test-case patches.
+  * Backport an updated patch for gdb 8.2.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 15 Dec 2018 13:52:26 -0800
+
+rustc (1.31.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 14 Dec 2018 21:30:56 -0800
+
+rustc (1.31.0~beta.19+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Filter LLVM build flags to not be stupid.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 01 Dec 2018 12:17:52 -0800
+
+rustc (1.31.0~beta.19+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 29 Nov 2018 22:29:16 -0800
+
+rustc (1.31.0~beta.4+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Merge changes from Debian unstable.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 06 Nov 2018 19:45:26 -0800
+
+rustc (1.31.0~beta.4+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Drop old maintainers from Uploaders.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 04 Nov 2018 19:00:16 -0800
+
+rustc (1.30.0+dfsg1-2) unstable; urgency=medium
+
+  * Increase FAILURES_ALLOWED for mips mipsel to 20.
+  * Set debuginfo-only-std = false for 32-bit powerpc architectures.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 02 Nov 2018 01:42:36 -0700
+
+rustc (1.30.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable. (Closes: #881845)
+  * Increase FAILURES_ALLOWED for mips architectures.
+  * Set debuginfo-only-std = false for mips architectures.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 01 Nov 2018 10:05:52 -0700
+
+rustc (1.30.0+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Disable debuginfo-gdb tests relating to enums. These will be fixed in an
+    upcoming version, see upstream #54614 for details.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 31 Oct 2018 00:02:25 -0700
+
+rustc (1.30.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * Actually don't build docs in an arch-only build.
+  * Add mips patch, hopefully closes #881845 but let's see.
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 30 Oct 2018 22:05:59 -0700
+
+rustc (1.30.0~beta.7+dfsg1-1~exp3) experimental; urgency=medium
+
+  * Do the necessary bookkeeping for the LLVM update.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 26 Sep 2018 23:29:18 -0700
+
+rustc (1.30.0~beta.7+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Tweak test failure rules: armel <= 8, ppc64 <= 12.
+  * Update to LLVM 7.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 26 Sep 2018 21:43:30 -0700
+
+rustc (1.30.0~beta.7+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 23 Sep 2018 10:40:30 -0700
+
+rustc (1.29.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Drop d-armel-disable-kernel-helpers.patch as a necessary part of the
+    fix to #906520, so it is actually fixed.
+  * Backport a patch to fix the rand crate on powerpc. (Closes: #909400)
+  * Lower the s390x allowed failures back to 25.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 23 Sep 2018 10:16:53 -0700
+
+rustc (1.29.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Include patch for armel atomics. (Closes: #906520)
+  * Update to latest Standards-Version; no changes required.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 20 Sep 2018 22:33:20 -0700
+
+rustc (1.28.0+dfsg1-3) unstable; urgency=medium
+
+  * Team upload.
+
+  [ Ximin Luo ]
+  * More sparc64 fixes, and increase allowed-test-failures there to 180.
+
+  [ Julien Cristau ]
+  * Don't use pentium4 as i686 baseline (closes: #908561)
+
+ -- Julien Cristau <jcristau@debian.org>  Tue, 11 Sep 2018 15:54:27 +0200
+
+rustc (1.28.0+dfsg1-2) unstable; urgency=medium
+
+  * Switch on verbose-tests to restore the old pre-1.28 behaviour, and restore
+    old failure-counting logic.
+  * Allow 50 test failures on s390x, restored failure-counting logic avoids
+    more double-counts.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 05 Aug 2018 02:18:10 -0700
+
+rustc (1.28.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Add patches from Fedora to fix some test failures.
+  * Ignore a failure testing specific error output, under investigation.
+  * Allow 100 test failures on s390x, should be reducible later with LLVM 7.
+  * Temporary fix for mips64el bootstrap.
+  * Be even more verbose during the build.
+  * Update to latest Standards-Version.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 04 Aug 2018 23:04:41 -0700
+
+rustc (1.28.0~beta.14+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Update test-failure counting logic.
+  * Fix version constraints for Recommends: cargo.
+  * Add patch to fix sparc64 CABI.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 27 Jul 2018 04:26:52 -0700
+
+rustc (1.28.0~beta.14+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Update to latest Standards-Version; no changes required.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 25 Jul 2018 03:11:11 -0700
+
+rustc (1.27.2+dfsg1-1) unstable; urgency=medium
+
+  [ Sylvestre Ledru ]
+  * Update of the alioth ML address.
+
+  [ Ximin Luo ]
+  * Fail the build if our version contains ~exp and we are not releasing to
+    experimental, this has happened by accident a few times already.
+  * Allow 36 and 44 test failures on armel and s390x respectively.
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 24 Jul 2018 21:35:56 -0700
+
+rustc (1.27.1+dfsg1-1~exp4) experimental; urgency=medium
+
+  * Unconditonally prune crate checksums to avoid having to manually prune them
+    whenever we patch the vendored crates.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 19 Jul 2018 14:49:18 -0700
+
+rustc (1.27.1+dfsg1-1~exp3) experimental; urgency=medium
+
+  * Add patch from Fedora to fix rebuild against same version.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 19 Jul 2018 08:52:03 -0700
+
+rustc (1.27.1+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Fix some failing tests.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 18 Jul 2018 09:06:44 -0700
+
+rustc (1.27.1+dfsg1-1~exp1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 13 Jul 2018 22:58:02 -0700
+
+rustc (1.26.2+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Stop ignoring tests that now pass.
+  * Don't ignore tests that still fail, instead raise FAILURES_ALLOWED.
+    This allows us to see the test failures in the build logs, rather than
+    hiding them.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 16 Jun 2018 12:39:59 -0700
+
+rustc (1.26.1+dfsg1-3) unstable; urgency=medium
+
+  * Fix build-dep version range to build against myself.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 31 May 2018 09:25:17 -0700
+
+rustc (1.26.1+dfsg1-2) unstable; urgency=medium
+
+  * Also ignore test_loading_cosine on ppc64el.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 30 May 2018 20:58:46 -0700
+
+rustc (1.26.1+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 30 May 2018 08:18:04 -0700
+
+rustc (1.26.0+dfsg1-1~exp4) experimental; urgency=medium
+
+  * Try alternative patch to ignore x86 stdsimd tests suggested by upstream.
+  * Bump up allowed-test-failures to 8 to account for the fact that we're now
+    double-counting some failures.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 29 May 2018 20:36:56 -0700
+
+rustc (1.26.0+dfsg1-1~exp3) experimental; urgency=medium
+
+  * Ignore some irrelevant tests on ppc64 and non-x86 platforms.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 29 May 2018 09:32:38 -0700
+
+rustc (1.26.0+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Add Breaks+Replaces for older libstd-rust-dev with codegen-backends.
+    (Closes: #899180)
+  * Backport some test and packaging fixes from Ubuntu.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 22 May 2018 22:00:53 -0700
+
+rustc (1.26.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Update to latest Standards-Version; no changes required.
+  * Update doc-base files. (Closes: #876831)
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 20 May 2018 03:11:45 -0700
+
+rustc (1.25.0+dfsg1-2) unstable; urgency=medium
+
+  * Add patches for LLVM's compiler-rt to fix bugs on sparc64 and mips64.
+    (Closes: #898982)
+  * Install codegen-backends into rustc rather than libstd-rust-dev.
+    (Closes: #899087)
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 19 May 2018 13:10:33 -0700
+
+rustc (1.25.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Allow up to 15 test failures on s390x.
+  * Set CARGO_INCREMENTAL=0 on sparc64.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 18 May 2018 01:11:15 -0700
+
+rustc (1.25.0+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Install missing codegen-backends.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 06 Apr 2018 14:05:36 -0700
+
+rustc (1.25.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Update to LLVM 6.0.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 01 Apr 2018 15:59:47 +0200
+
+rustc (1.24.1+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Raise allowed-test-failures to 160 on some non-release arches: powerpc,
+    powerpcspe, sparc64, x32.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 07 Mar 2018 20:07:27 +0100
+
+rustc (1.24.1+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Steal some patches from Fedora to fix some test failures.
+  * Update debian/patches/u-make-tests-work-without-rpath.patch to try to fix
+    some more test failures.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 05 Mar 2018 16:25:26 +0100
+
+rustc (1.24.1+dfsg1-1~exp1) experimental; urgency=medium
+
+  * More sparc64 CABI fixes. (Closes: #888757)
+  * New upstream release.
+  * Note that s390x baseline was updated in the meantime. (Closes: #851150)
+  * Include Debian-specific patch to disable kernel helpers on armel.
+    (Closes: #891902)
+  * Include missing build-dependencies for pkg.rustc.dlstage0 build profile.
+    (Closes: #891022)
+  * Add architecture.mk mapping for armel => armv5te-unknown-linux-gnueabi.
+    (Closes: #891913)
+  * Enable debuginfo-only-std on armel as well. (Closes: #891961)
+  * Backport upstream patch to support powerpcspe. (Closes: #891542)
+  * Disable full-bootstrap again to work around upstream #48319.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 03 Mar 2018 14:23:29 +0100
+
+rustc (1.23.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 19 Jan 2018 11:49:31 +0100
+
+rustc (1.23.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Update to latest Standards-Version; no changes required.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 14 Jan 2018 00:08:17 +0100
+
+rustc (1.22.1+dfsg1-2) unstable; urgency=medium
+
+  * Fix B-D rustc version so this package can be built using itself.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 01 Jan 2018 14:27:19 +0100
+
+rustc (1.22.1+dfsg1-1) unstable; urgency=medium
+
+  [ Ximin Luo ]
+  * Remove unimportant files that autoload remote resources from rust-src.
+  * Fix more symlinks in rust-doc.
+  * On armhf, only generate debuginfo for libstd and not the compiler itself.
+    This works around buildds running out of memory, see upstream #45854.
+  * Update to latest Standards-Version; no changes required.
+
+  [ Chris Coulson ]
+  * Fix some test failures that occur because we build rust without an rpath.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 18 Dec 2017 19:46:25 +0100
+
+rustc (1.22.1+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release.
+  * Fix symlink target. (Closes: #877276)
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 25 Nov 2017 22:29:12 +0100
+
+rustc (1.21.0+dfsg1-3) unstable; urgency=medium
+
+  * Add/fix detection for sparc64, thanks to John Paul Adrian Glaubitz.
+  * Workaround FTBFS when building docs. (Closes: #880262)
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 06 Nov 2017 10:03:32 +0100
+
+rustc (1.21.0+dfsg1-2) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Fix bootstrapping using 1.21.0, which is more strict about redundant &mut
+    previously used in u-output-failed-commands.patch.
+  * Only allow up to 5 test failures.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 25 Oct 2017 20:27:30 +0200
+
+rustc (1.21.0+dfsg1-1) experimental; urgency=medium
+
+  * New upstream release.
+  * Fix the "install" target for cross-compilations; cross-compiling with
+    sbuild --host=$foreign-arch should work again.
+  * Update to latest Standards-Version; changes:
+    - Priority changed to optional from extra.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 17 Oct 2017 00:42:54 +0200
+
+rustc (1.20.0+dfsg1-3) unstable; urgency=medium
+
+  * Disable jemalloc to fix FTBFS with 1.21 on armhf.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 25 Oct 2017 12:01:19 +0200
+
+rustc (1.20.0+dfsg1-2) unstable; urgency=medium
+
+  * Update changelog entry for 1.20.0+dfsg1-1 to reflect that it was actually
+    and accidentally uploaded to unstable. No harm, no foul.
+  * We are no longer failing the build when tests fail, see NEWS or
+    README.Debian for details.
+  * Bump LLVM requirement to fix some failing tests.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 21 Oct 2017 14:20:17 +0200
+
+rustc (1.20.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 15 Oct 2017 23:30:35 +0200
+
+rustc (1.19.0+dfsg3-4) unstable; urgency=medium
+
+  * Bump LLVM requirement to pull in a fix for a FTBFS on ppc64el.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 15 Oct 2017 21:31:03 +0200
+
+rustc (1.19.0+dfsg3-3) unstable; urgency=medium
+
+  * Fix a trailing whitespace for tidy.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 19 Sep 2017 16:09:41 +0200
+
+rustc (1.19.0+dfsg3-2) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Add a patch to print extra information when tests fail.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 19 Sep 2017 12:32:03 +0200
+
+rustc (1.19.0+dfsg3-1) experimental; urgency=medium
+
+  * New upstream release.
+  * Upgrade to LLVM 4.0. (Closes: #873421)
+  * rust-src: install Debian patches as well
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 15 Sep 2017 04:02:09 +0200
+
+rustc (1.18.0+dfsg1-4) unstable; urgency=medium
+
+  * Support gperf 3.1. (Closes: #869610)
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 25 Jul 2017 23:19:47 +0200
+
+rustc (1.18.0+dfsg1-3) unstable; urgency=medium
+
+  * Upload to unstable.
+  * Disable failing run-make test on armhf.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 22 Jul 2017 20:30:25 +0200
+
+rustc (1.18.0+dfsg1-2) experimental; urgency=medium
+
+  * Update to latest Standards-Version; no changes required.
+  * Change rustc to Multi-Arch: allowed and update Build-Depends with :native
+    annotations. Multi-Arch: foreign is typically for arch-indep packages that
+    might need to satisfy dependency chains of different architectures. Also
+    update instructions on cross-compiling to match this newer situation.
+  * Build debugging symbols for non-libstd parts of rustc.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 17 Jul 2017 23:04:03 +0200
+
+rustc (1.18.0+dfsg1-1) experimental; urgency=medium
+
+  * New upstream release.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 27 Jun 2017 12:51:22 +0200
+
+rustc (1.17.0+dfsg2-8) unstable; urgency=medium
+
+  * Workaround for linux #865549, fix FTBFS on ppc64el.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 17 Jul 2017 13:41:59 +0200
+
+rustc (1.17.0+dfsg2-7) unstable; urgency=medium
+
+  * Show exception traceback in bootstrap.py to examine ppc64el build failure.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 21 Jun 2017 10:46:27 +0200
+
+rustc (1.17.0+dfsg2-6) unstable; urgency=medium
+
+  * Upload to unstable.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 21 Jun 2017 00:24:22 +0200
+
+rustc (1.17.0+dfsg2-5) experimental; urgency=medium
+
+  * More work-arounds for armhf test failures.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 16 Jun 2017 13:27:45 +0200
+
+rustc (1.17.0+dfsg2-4) experimental; urgency=medium
+
+  * Fix arch-indep and arch-dep tests.
+  * Bump the LLVM requirement to fix FTBFS on armhf.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 14 Jun 2017 21:37:16 +0200
+
+rustc (1.17.0+dfsg2-3) experimental; urgency=medium
+
+  * Try to force the real gdb package. Some resolvers like aspcud will select
+    gdb-minimal under some circumstances, but this causes the debuginfo-gdb
+    tests to break.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 14 Jun 2017 00:48:37 +0200
+
+rustc (1.17.0+dfsg2-2) experimental; urgency=medium
+
+  * Support and document cross-compiling of rustc itself.
+  * Document cross-compiling other rust packages such as cargo.
+  * Work around upstream #39015 by disabling those tests rather than by
+    disabling optimisation, which causes FTBFS on 1.17.0 ppc64el. See
+    upstream #42476 and #42532 for details.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 13 Jun 2017 21:13:31 +0200
+
+rustc (1.17.0+dfsg2-1) experimental; urgency=medium
+
+  [ Sylvestre Ledru ]
+  * New upstream release
+
+  [ Ximin Luo ]
+  * Adapt packaging for rustbuild, the new upstream cargo-based build system.
+
+  [ Matthijs van Otterdijk ]
+  * Add a binary package, rust-src. (Closes: #846177)
+  * Link to local Debian web resources in the docs, instead of remote ones.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 16 May 2017 18:00:53 +0200
+
+rustc (1.16.0+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable so we have something to build 1.17 with.
+  * Update u-ignoretest-powerpc.patch for 1.16.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 19 Apr 2017 22:47:18 +0200
+
+rustc (1.16.0+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Don't ignore test failures on Debian unstable.
+  * Re-fix ignoring armhf test, accidentally reverted in previous version.
+  * Try to fix buildd failure by swapping B-D alternatives.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 16 Apr 2017 15:05:47 +0200
+
+rustc (1.16.0+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release
+  * u-ignoretest-jemalloc.patch removed (applied upstream)
+
+  [ Matthias Klose ]
+  * Bootstrap using the rustc version in the archive, on all architectures.
+  * Work around a GCC 4.8 ICE on AArch64.
+  * Use alternative build dependencies on cmake3 and binutils-2.26 for
+    builds on 14.04 LTS (trusty).
+  * debian/make_orig*dl_tarball.sh: Include all Ubuntu architectures.
+  * debian/rules: Ignore test results for now.
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Thu, 13 Apr 2017 15:24:03 +0200
+
+rustc (1.15.1+dfsg1-1) unstable; urgency=medium
+
+  * Upload to unstable so we have something to build 1.16 with.
+  * Try to fix ignoring atomic-lock-free tests on armhf.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 22 Mar 2017 00:13:27 +0100
+
+rustc (1.15.1+dfsg1-1~exp3) experimental; urgency=medium
+
+  * Ignore atomic-lock-free tests on armhf.
+  * Update ignoretest-armhf_03.patch for newer 1.15.1 behaviour.
+  * Tidy up some other patches to do with ignoring tests.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 12 Mar 2017 04:15:33 +0100
+
+rustc (1.15.1+dfsg1-1~exp2) experimental; urgency=medium
+
+  * Update armhf ignoretest patch.
+  * Bootstrap armhf. (Closes: #809316, #834003)
+  * Bootstrap ppc4el. (Closes: #839643)
+  * Fix rust-lldb symlink. (Closes: #850639)
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 02 Mar 2017 23:01:26 +0100
+
+rustc (1.15.1+dfsg1-1~exp1) experimental; urgency=medium
+
+  * New upstream release (won't probably be in stretch).
+    see the 1.4 git branch for the follow up for stable
+  * Call to the test renamed from check-notidy => check
+  * d/p/u-destdir-support.diff: Apply upstream patch to support
+    destdir in the make install (for rustbuild, in later versions)
+  * Overrides the 'binary-or-shlib-defines-rpath' lintian warnings.
+    We need them for now
+  * Refresh of the patches
+
+  [ Sven Joachim ]
+  * Drop Pre-Depends on multiarch-support. (Closes: #856109)
+
+  [ Erwan Prioul ]
+  * Fix test and build failures for ppc64el. (Closes: #839643)
+
+  [ Ximin Luo ]
+  * Disable rustbuild for the time being (as it was in 1.14) and instead
+    bootstrap two new arches, armhf and ppc64el.
+  * Switch back to debhelper 9 to make backporting easier.
+  * Switch Build-Depends on binutils-multiarch back to binutils, the former is
+    no longer needed by the upstream tests.
+
+  [ Matthias Klose ]
+  * Compatibility fixes and improvements to help work better on Ubuntu.
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Sun, 26 Feb 2017 21:12:27 +0100
+
+rustc (1.14.0+dfsg1-3) unstable; urgency=medium
+
+  * Fix mips64 Makefile patches.
+  * Don't run arch-dep tests in a arch-indep build.
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 04 Jan 2017 21:34:56 +0100
+
+rustc (1.14.0+dfsg1-2) unstable; urgency=medium
+
+  * Update README.Debian, the old one was way out of date.
+  * Detect mips CPUs in ./configure and fill in mips Makefile rules.
+  * Work around jemalloc-related problems in the upstream bootstrapping
+    binaries for arm64, ppc64el, s390x.
+  * Disable jemalloc on s390x - upstream already disable it for some other
+    arches.
+  * Disable jemalloc tests for arches where jemalloc is disabled.
+  * We still expect the following failures:
+    * arm64 should be fixed (i.e. no failures) compared to the previous upload.
+    * armhf will FTBFS due to 'Illegal instruction' and this can only be fixed
+      with the next stable rustc release.
+    * mips mipsel mips64el ppc64 ppc64el s390x will FTBFS due to yet other
+      test failures beyond the ones I fixed above; this upload is only to save
+      me manual work in producing nice reports that exhibit these failures.
+
+ -- Ximin Luo <infinity0@debian.org>  Thu, 29 Dec 2016 23:00:47 +0100
+
+rustc (1.14.0+dfsg1-1) unstable; urgency=medium
+
+  [ Sylvestre Ledru ]
+  * New upstream release
+  * Update debian/watch
+
+  [ Ximin Luo ]
+  * Try to bootstrap armhf ppc64 ppc64el s390x mips mipsel mips64el.
+    (Closes: #809316, #834003, #839643)
+  * Make rust-gdb and rust-lldb arch:all packages.
+  * Switch to debhelper 10.
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 24 Dec 2016 18:03:03 +0100
+
+rustc (1.13.0+dfsg1-2) unstable; urgency=high
+
+  * Skip macro-stepping test on arm64, until
+    https://github.com/rust-lang/rust/issues/37225 is resolved.
+
+ -- Luca Bruno <lucab@debian.org>  Sat, 26 Nov 2016 23:40:14 +0000
+
+rustc (1.13.0+dfsg1-1) unstable; urgency=medium
+
+  [ Sylvestre Ledru ]
+  * New upstream release.
+
+  [ Ximin Luo ]
+  * Use Debian system jquery instead of upstream's embedded copy.
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Fri, 11 Nov 2016 13:35:23 +0100
+
+rustc (1.12.1+dfsg1-1) unstable; urgency=medium
+
+  [ Sylvestre Ledru ]
+  * New (minor) upstream release
+  * Missing dependency from rust-lldb to python-lldb-3.8 (Closes: #841833)
+  * Switch to llvm 3.9. (Closes: #841834)
+
+  [ Ximin Luo ]
+  * Dynamically apply rust-boot-1.12.1-from-1.12.0.diff.
+    This allows us to bootstrap from either 1.11.0 or 1.12.0.
+  * Bump LLVM Build-Depends version to get the backported patches for LLVM
+    #30402 and #29163.
+  * Install debugger_pretty_printers_common to rust-gdb and rust-lldb.
+    (Closes: #841835)
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 07 Nov 2016 14:15:14 +0100
+
+rustc (1.12.0+dfsg1-2) unstable; urgency=medium
+
+  * Ignore test run-make/no-duplicate-libs. Fails on i386
+  * Ignore test run-pass-valgrind/down-with-thread-dtors.rs . Fails on arm64
+  * I am not switching to llvm 3.9 now because a test freezes. The plan is
+    to silent the warning breaking the build and upload 1.12.1 after
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Wed, 05 Oct 2016 10:48:01 +0200
+
+rustc (1.12.0+dfsg1-1) unstable; urgency=medium
+
+  * new upstream release
+    - Rebase of the patches and removal of deprecated patches
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Thu, 29 Sep 2016 20:45:04 +0200
+
+rustc (1.11.0+dfsg1-3) unstable; urgency=medium
+
+  * Fix separate build-arch and build-indep builds.
+
+ -- Ximin Luo <infinity0@debian.org>  Tue, 13 Sep 2016 12:30:41 +0200
+
+rustc (1.11.0+dfsg1-2) unstable; urgency=medium
+
+  * Fix rebuilding against the current version, by backporting a patch I wrote
+    that was already applied upstream. Should fix the FTBFS that was observed
+    by tests.reproducible-builds.org.
+  * Ignore a failing stdcall test on arm64; should fix the FTBFS there.
+  * Backport a doctest fix I wrote, already applied upstream.
+
+ -- Ximin Luo <infinity0@debian.org>  Mon, 12 Sep 2016 17:40:12 +0200
+
+rustc (1.11.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+  * Add versioned binutils dependency. (Closes: #819475, #823540)
+
+ -- Ximin Luo <infinity0@debian.org>  Wed, 07 Sep 2016 10:31:57 +0200
+
+rustc (1.10.0+dfsg1-3) unstable; urgency=medium
+
+  * Rebuild with LLVM 3.8, same as what upstream are using
+  * Dynamically link against LLVM. (Closes: #832565)
+
+ -- Ximin Luo <infinity0@debian.org>  Sat, 30 Jul 2016 22:36:41 +0200
+
+rustc (1.10.0+dfsg1-2) unstable; urgency=medium
+
+  * Tentatively support ARM architectures
+  * Include upstream arm64,armel,armhf stage0 compilers (i.e. 1.9.0 stable)
+    in a orig-dl tarball, like how we previously did for amd64,i386.
+
+ -- Ximin Luo <infinity0@debian.org>  Fri, 22 Jul 2016 15:54:51 +0200
+
+rustc (1.10.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+  * Add myself to uploaders
+  * Update our build process to bootstrap from the previous Debian rustc stable
+    version by default. See README.Debian for other options.
+  * Update to latest Standards-Version; no changes required.
+
+ -- Ximin Luo <infinity0@debian.org>  Sun, 17 Jul 2016 03:40:49 +0200
+
+rustc (1.9.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release (Closes: #825752)
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Sun, 29 May 2016 17:57:38 +0200
+
+rustc (1.8.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+
+  [ Ximin Luo ]
+  * Fix using XZ for the orig tarball: needs explicit --repack in debian/watch
+  * Drop wno-error patch; applied upstream.
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Fri, 15 Apr 2016 12:01:45 +0200
+
+rustc (1.7.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Thu, 03 Mar 2016 22:41:24 +0100
+
+rustc (1.6.0+dfsg1-3) unstable; urgency=medium
+
+  * Apply upstream fix to silent a valgrind issue in the test suite
+    (Closes: ##812825)
+  * Add gcc & libc-dev as dependency of rustc to make sure it works
+    out of the box
+
+  [ Ximin Luo ]
+  * Work around rust bug https://github.com/rust-lang/rust/issues/31529
+  * Enable optional tests, and add verbosity/backtraces to tests
+  * Use XZ instead of GZ compression (will apply to the next new upload)
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Tue, 02 Feb 2016 15:08:11 +0100
+
+rustc (1.6.0+dfsg1-2) unstable; urgency=medium
+
+  * mk/rt.mk: Modify upstream code to append -Wno-error rather than trying
+    to remove the string "-Werror".  (Closes: #812448)
+  * Disable new gcc-6 "-Wmisleading-indentation" warning, which triggers
+    (incorrectly) on src/rt/miniz.c.  (Closes: #811573)
+  * Guard arch-dependent dh_install commands appropriately, fixing
+    arch-indep-only builds.  (Closes: #809124)
+
+ -- Angus Lees <gus@debian.org>  Tue, 26 Jan 2016 05:40:14 +1100
+
+rustc (1.6.0+dfsg1-1) unstable; urgency=medium
+
+  * new upstream release
+
+  [ Ximin Luo ]
+  * Use secure links for Vcs-* fields.
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Fri, 22 Jan 2016 10:56:08 +0100
+
+rustc (1.5.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+    - We believe that we should let rust transit to testing
+      (Closes: #786836)
+  * Move away from hash to the same rust naming schema
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Thu, 10 Dec 2015 17:23:32 +0100
+
+rustc (1.4.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+    198068b3 => 1bf6e69c
+  * Update the download url in debian/watch
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Fri, 30 Oct 2015 09:36:02 +0100
+
+rustc (1.3.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+    62abc69f => 198068b3
+  * jquery updated from 2.1.0 to 2.1.4
+
+  [ Ximin Luo ]
+  * Use LLVM 3.7 as upstream does, now that it's released. (Closes: #797626)
+  * Fix debian/copyright syntax mistakes.
+  * Don't Replace/Break previous versions of libstd-rust-*
+  * Check that the libstd-rust-* name in d/control matches upstream.
+  * Several other minor build tweaks.
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Sat, 19 Sep 2015 14:39:35 +0200
+
+rustc (1.2.0+dfsg1-1) unstable; urgency=medium
+
+  * New upstream release
+    libstd-rust-7d23ff90 => libstd-rust-62abc69f
+  * Add llvm-3.6-tools to the build dep as it is
+    now needed for tests
+  * Fix the Vcs-Browser value
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Sat, 08 Aug 2015 23:13:44 +0200
+
+rustc (1.1.0+dfsg1-3) unstable; urgency=medium
+
+  * rust-{gdb,lldb} now Replaces pre-split rustc package.
+    Closes: #793433.
+  * Several minor lintian cleanups.
+
+ -- Angus Lees <gus@debian.org>  Fri, 24 Jul 2015 17:47:48 +1000
+
+rustc (1.1.0+dfsg1-2) unstable; urgency=medium
+
+  [ Angus Lees ]
+  * Replace remote Rust logo with local file in HTML docs.
+  * Symlink rust-{gdb,lldb}.1 to {gdb,lldb}.1 manpages.
+    Note that gdb.1 requires the gdb-doc package, and that lldb.1 doesn't
+    exist yet (see #792908).
+  * Restore "Architecture: amd64 i386" filter, mistakenly removed in
+    previous version.  Unfortunately the toolchain bootstrap isn't ready
+    to support all Debian archs yet.  Closes: #793147.
+
+ -- Angus Lees <gus@debian.org>  Wed, 22 Jul 2015 09:51:08 +1000
+
+rustc (1.1.0+dfsg1-1) unstable; urgency=low
+
+  [ Angus Lees ]
+  * Set SONAME when building dylibs
+  * Split out libstd-rust, libstd-rust-dev, rust-gdb, rust-lldb from rustc
+    - libs are now installed into multiarch-friendly locations
+    - rpath is no longer required to use dylibs (but talk to Debian Rust
+      maintainers before building a package that depends on the dylibs)
+  * Install /usr/share/rustc/architecture.mk, which declares Rust arch
+    triples for Debian archs and is intended to help future Rust packaging
+    efforts.  Warning: it may not be complete/accurate yet.
+  * New upstream release (1.1)
+
+ -- Angus Lees <gus@debian.org>  Thu, 16 Jul 2015 14:23:47 +1000
+
+rustc (1.0.0+dfsg1-1) unstable; urgency=medium
+
+  [ Angus Lees ]
+  * New upstream release (1.0!)
+
+  [ Sylvestre Ledru ]
+  * Fix the watch file
+  * Update of the repack to remove llvm sources
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Sat, 16 May 2015 08:24:32 +1000
+
+rustc (1.0.0~beta.4-1~exp1) experimental; urgency=low
+
+  [ Angus Lees ]
+  * New upstream release (beta 3)
+    - Drop manpage patch - now included upstream
+  * Replace duplicated compile-time dylibs with symlinks to run-time libs
+    (reduces installed size by ~68MB)
+
+  [ Sylvestre Ledru ]
+  * New upstream release (beta 4)
+  * Replace two more occurrences of jquery by the package
+  * Repack upstream to remove an LLVM file with a non-DFSG license
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Wed, 06 May 2015 11:14:30 +0200
+
+rustc (1.0.0~alpha.2-1~exp1) experimental; urgency=low
+
+  [ Angus Lees ]
+  * Patch upstream manpages to address minor troff issues
+  * Make 'debian/rules clean' also clean LLVM source
+  * Rename primary 'rust' binary package to 'rustc'
+  * Fix potential FTBFS: rust-doc requires texlive-fonts-recommended (for
+    pzdr.tfm)
+  * Build against system LLVM
+
+  [ Sylvestre Ledru ]
+  * New testing release
+  * Renaming of the source package
+  * Set a minimal version for dpkg-dev and debhelper (for profiles)
+  * For now, disable build profiles as they are not supported in Debian
+  * Introduce some changes by Angus Lees
+    - Introduction of build stages
+    - Disable the parallel execution of tests
+    - Improving of the parallel syntax
+    - Use override_dh_auto_build-arch
+    - Use override_dh_auto_build-indep
+    - Better declarations of the doc
+    - Update of the description
+    - Watch file updated (with key check)
+
+  [ Luca Bruno ]
+  * rules: respect 'nocheck' DEB_BUILD_OPTIONS
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Sat, 07 Mar 2015 09:25:47 +0100
+
+rust (1.0.0~alpha-0~exp1) experimental; urgency=low
+
+  * Initial package (Closes: #689207)
+    Work done by Luca Bruno, Jordan Justen and Sylvestre Ledru
+
+ -- Sylvestre Ledru <sylvestre@debian.org>  Fri, 23 Jan 2015 15:47:37 +0100
diff --git a/check-orig-suspicious.sh b/check-orig-suspicious.sh
new file mode 100755 (executable)
index 0000000..b0bf28c
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+set -e
+
+ver="$1"
+test -n "$ver" || exit 2
+
+SUS_WHITELIST=$(find "${PWD}/debian" -name upstream-tarball-unsuspicious.txt -type f)
+
+rm -rf rustc-${ver/*~*/beta}-src/
+tar xf ../rustc_$ver+dfsg1.orig.tar.xz && cd rustc-${ver/*~*/beta}-src/
+
+/usr/share/cargo/scripts/audit-vendor-source \
+  "$SUS_WHITELIST" \
+  "Files-Excluded: in debian/copyright and run a repack."
+
+echo "Artifacts left in rustc-$ver-src, please remove them yourself."
diff --git a/config.toml.in b/config.toml.in
new file mode 100644 (file)
index 0000000..2651d7a
--- /dev/null
@@ -0,0 +1,64 @@
+[build]
+submodules = false
+vendor = true
+locked-deps = false
+verbose = 2
+
+rustc = "RUST_DESTDIR/usr/bin/rustc"
+cargo = "RUST_DESTDIR/usr/bin/cargo"
+
+build = "DEB_BUILD_RUST_TYPE"
+host = ["DEB_HOST_RUST_TYPE"]
+target = ["DEB_TARGET_RUST_TYPE"]
+
+#full-bootstrap = true
+# originally needed to work around #45317 but no longer necessary
+# currently we have to omit it because it breaks #48319
+
+# this might get changed later by override_dh_auto_configure-indep
+# we do it this way to avoid spurious rebuilds
+docs = false
+
+[install]
+prefix = "/usr"
+
+[target.DEB_BUILD_RUST_TYPE]
+llvm-config = "LLVM_DESTDIR/usr/lib/llvm-LLVM_VERSION/bin/llvm-config"
+linker = "DEB_BUILD_GNU_TYPE-gcc"
+
+ifelse(DEB_BUILD_RUST_TYPE,DEB_HOST_RUST_TYPE,,
+[target.DEB_HOST_RUST_TYPE]
+llvm-config = "LLVM_DESTDIR/usr/lib/llvm-LLVM_VERSION/bin/llvm-config"
+linker = "DEB_HOST_GNU_TYPE-gcc"
+
+)dnl
+ifelse(DEB_BUILD_RUST_TYPE,DEB_TARGET_RUST_TYPE,,DEB_HOST_RUST_TYPE,DEB_TARGET_RUST_TYPE,,
+[target.DEB_TARGET_RUST_TYPE]
+llvm-config = "LLVM_DESTDIR/usr/lib/llvm-LLVM_VERSION/bin/llvm-config"
+linker = "DEB_TARGET_GNU_TYPE-gcc"
+
+)dnl
+[target.wasm32-wasi]
+wasi-root = "/usr"
+
+[llvm]
+link-shared = true
+
+[rust]
+jemalloc = false
+optimize = MAKE_OPTIMISATIONS
+dist-src = false
+
+channel = "RELEASE_CHANNEL"
+
+# parallel codegen interferes with reproducibility, see
+# https://github.com/rust-lang/rust/issues/34902#issuecomment-319463586
+#codegen-units = 0
+debuginfo-level = 2
+debuginfo-level-std = 2
+rpath = false
+# see also d-custom-debuginfo-path.patch
+remap-debuginfo = true
+
+verbose-tests = true
+backtrace-on-ice = true
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..3d0a87f
--- /dev/null
+++ b/control
@@ -0,0 +1,216 @@
+Source: rustc
+Section: devel
+Priority: optional
+Maintainer: Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
+Uploaders:
+ Ximin Luo <infinity0@debian.org>,
+ Sylvestre Ledru <sylvestre@debian.org>
+# :native annotations are to support cross-compiling, see README.Debian
+Build-Depends: debhelper (>= 9),
+               debhelper-compat (= 12),
+               dpkg-dev (>= 1.17.14),
+               python3:native,
+               cargo:native (>= 0.40.0)      <!pkg.rustc.dlstage0>,
+               rustc:native (>= 1.44.0+dfsg) <!pkg.rustc.dlstage0>,
+               rustc:native (<= 1.45.0++)    <!pkg.rustc.dlstage0>,
+               llvm-10-dev:native,
+               llvm-10-tools:native,
+               libllvm10,
+               cmake (>= 3.0) | cmake3,
+# needed by some vendor crates
+               pkg-config,
+# this is sometimes needed by rustc_llvm
+               zlib1g-dev:native,
+               zlib1g-dev,
+# used by rust-installer
+               liblzma-dev:native,
+# test dependencies:
+               binutils (>= 2.26) <!nocheck> | binutils-2.26 <!nocheck>,
+               git <!nocheck>,
+               procps <!nocheck>,
+# below are optional tools even for 'make check'
+               gdb (>= 7.12) <!nocheck>,
+# Extra build-deps needed for x.py to download stuff in pkg.rustc.dlstage0.
+               curl <pkg.rustc.dlstage0>,
+               ca-certificates <pkg.rustc.dlstage0>,
+Build-Depends-Indep:
+ wasi-libc (>= 0.0~git20200319.9efc2f4~~) <!nowasm>,
+ wasi-libc (<= 0.0~git20200319.9efc2f4++) <!nowasm>,
+Build-Conflicts: gdb-minimal <!nocheck>
+Standards-Version: 4.2.1
+Homepage: http://www.rust-lang.org/
+Vcs-Git: https://salsa.debian.org/rust-team/rust.git
+Vcs-Browser: https://salsa.debian.org/rust-team/rust
+
+Package: rustc
+Architecture: any
+Multi-Arch: allowed
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends}, ${misc:Depends}, libstd-rust-dev (= ${binary:Version}),
+ gcc, libc-dev, binutils (>= 2.26)
+Recommends: cargo (>= 0.46.0~~), cargo (<< 0.47.0~~), rust-gdb | rust-lldb
+Suggests: rust-doc, rust-src, lld-10
+Replaces: libstd-rust-dev (<< 1.25.0+dfsg1-2~~)
+Breaks: libstd-rust-dev (<< 1.25.0+dfsg1-2~~)
+Description: Rust systems programming language
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+
+Package: libstd-rust-1.45
+Section: libs
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Rust standard libraries
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+ .
+ This package contains the standard Rust libraries, built as dylibs.
+
+Package: libstd-rust-dev
+Section: libdevel
+Architecture: any
+Multi-Arch: same
+Depends: ${shlibs:Depends}, ${misc:Depends}, libstd-rust-1.45 (= ${binary:Version})
+Description: Rust standard libraries - development files
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+ .
+ This package contains development files necessary to use the standard
+ Rust libraries.
+
+Package: libstd-rust-dev-wasm32-cross
+Section: libdevel
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, lld-10
+# Embeds wasi-libc so doesn't need to depend on it
+# None of its licenses require source redistrib, so no need for Built-Using
+Build-Profiles: <!nowasm>
+Description: Rust standard libraries - development files
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+ .
+ This package contains development files necessary to use the standard
+ Rust libraries, for cross-compiling to the wasm32-unknown-unknown target.
+
+Package: rust-gdb
+Architecture: all
+Depends: gdb, ${misc:Depends}
+Suggests: gdb-doc
+Replaces: rustc (<< 1.1.0+dfsg1-1)
+Description: Rust debugger (gdb)
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+ .
+ This package contains pretty printers and a wrapper script for
+ invoking gdb on rust binaries.
+
+Package: rust-lldb
+Architecture: all
+# When updating, also update rust-lldb.links
+Depends: lldb-10, ${misc:Depends}, python3-lldb-10
+Replaces: rustc (<< 1.1.0+dfsg1-1)
+Description: Rust debugger (lldb)
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+ .
+ This package contains pretty printers and a wrapper script for
+ invoking lldb on rust binaries.
+
+Package: rust-doc
+Section: doc
+Architecture: all
+Build-Profiles: <!nodoc>
+Depends: ${misc:Depends},
+ libjs-jquery, libjs-highlight.js, libjs-mathjax,
+ fonts-open-sans, fonts-font-awesome
+Recommends: cargo-doc
+Description: Rust systems programming language - Documentation
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+ .
+ This package contains the Rust tutorial, language reference and
+ standard library documentation.
+
+Package: rust-src
+Architecture: all
+Depends: ${misc:Depends}
+Description: Rust systems programming language - source code
+ Rust is a curly-brace, block-structured expression language.  It
+ visually resembles the C language family, but differs significantly
+ in syntactic and semantic details.  Its design is oriented toward
+ concerns of "programming in the large", that is, of creating and
+ maintaining boundaries - both abstract and operational - that
+ preserve large-system integrity, availability and concurrency.
+ .
+ It supports a mixture of imperative procedural, concurrent actor,
+ object-oriented and pure functional styles.  Rust also supports
+ generic programming and meta-programming, in both static and dynamic
+ styles.
+ .
+ This package contains sources of the Rust compiler and standard
+ libraries, useful for IDEs and code analysis tools such as Racer.
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..a58d180
--- /dev/null
+++ b/copyright
@@ -0,0 +1,1842 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: rust
+Source: https://www.rust-lang.org
+Files-Excluded:
+ *.min.js
+ src/llvm-emscripten
+ src/llvm-project
+ vendor/jemalloc-sys
+ vendor/mdbook/src/theme/FontAwesome
+ vendor/mdbook/src/theme/highlight.js
+ vendor/mdbook/src/theme/highlight.css
+# Exclude submodules https://github.com/rust-lang/rust/tree/master/src/tools
+# We prefer to do them in different Debian packages so they can have their own
+# version numbers. If upstream merges them "properly" (i.e. unify the version
+# numbers) then we can merge the packages in Debian. Note that cargotest here
+# does actually belong to rustc, it is an integration test suite for rustc to
+# check that certain popular crates continue to compile. It is not the same as
+# cargo's own test suite (in its own package) also called cargotest.
+# NB: don't exclude rust-installer, it's needed for "install" functionality
+ src/tools/cargo
+ src/tools/clippy
+ src/tools/rls
+ src/tools/remote-test-client
+ src/tools/remote-test-server
+ src/tools/rustfmt
+ src/tools/miri
+# Embedded C libraries
+ vendor/libz-sys/src/zlib*
+ vendor/lzma-sys*/xz-*
+# Embedded binary blobs
+ vendor/winapi-*/*/*.a
+ vendor/mdbook/src/theme/playpen_editor
+# Embedded proprietary doc formats
+ src/doc/book/nostarch/docx
+# unused dependencies, generated by debian/prune-unused-deps
+# DO NOT EDIT below, AUTOGENERATED
+ vendor/adler32
+ vendor/arc-swap
+ vendor/argon2rs
+ vendor/base64
+ vendor/bitmaps
+ vendor/blake2-rfc
+ vendor/bytecount
+ vendor/bytes
+ vendor/bytesize
+ vendor/cargo_metadata-0.8.0
+ vendor/colored
+ vendor/commoncrypto
+ vendor/commoncrypto-sys
+ vendor/compiletest_rs
+ vendor/constant_time_eq
+ vendor/cookie
+ vendor/cookie_store
+ vendor/core-foundation-0.6.3
+ vendor/core-foundation
+ vendor/core-foundation-sys-0.6.2
+ vendor/core-foundation-sys
+ vendor/crypto-hash
+ vendor/curl
+ vendor/curl-sys
+ vendor/derive_more
+ vendor/derive-new
+ vendor/directories
+ vendor/dirs
+ vendor/dirs-sys
+ vendor/dtoa
+ vendor/dunce
+ vendor/encoding_rs
+ vendor/foreign-types
+ vendor/foreign-types-shared
+ vendor/fst
+ vendor/fuchsia-cprng
+ vendor/futures
+ vendor/futures-cpupool
+ vendor/fwdansi
+ vendor/git2
+ vendor/git2-curl
+ vendor/glob
+ vendor/h2
+ vendor/hex-0.3.2
+ vendor/hex
+ vendor/home
+ vendor/httparse
+ vendor/http-body
+ vendor/http
+ vendor/humantime
+ vendor/hyper
+ vendor/hyper-tls
+ vendor/idna-0.1.5
+ vendor/if_chain
+ vendor/im-rc
+ vendor/iovec
+ vendor/json
+ vendor/jsonrpc-client-transports
+ vendor/jsonrpc-core
+ vendor/jsonrpc-core-client
+ vendor/jsonrpc-derive
+ vendor/jsonrpc-ipc-server
+ vendor/jsonrpc-pubsub
+ vendor/jsonrpc-server-utils
+ vendor/kernel32-sys
+ vendor/lazycell
+ vendor/libgit2-sys
+ vendor/libnghttp2-sys
+ vendor/libssh2-sys
+ vendor/linked-hash-map
+ vendor/lsp-codec
+ vendor/lsp-types
+ vendor/mdbook-linkcheck
+ vendor/mime
+ vendor/mime_guess
+ vendor/miniz_oxide
+ vendor/mio
+ vendor/mio-named-pipes
+ vendor/mio-uds
+ vendor/miow-0.2.1
+ vendor/native-tls
+ vendor/net2
+ vendor/openssl
+ vendor/openssl-probe
+ vendor/openssl-src
+ vendor/openssl-sys
+ vendor/ordslice
+ vendor/packed_simd
+ vendor/parity-tokio-ipc
+ vendor/percent-encoding-1.0.1
+ vendor/pretty_env_logger
+ vendor/proc-macro-crate
+ vendor/proc-macro-error
+ vendor/publicsuffix
+ vendor/quine-mc_cluskey
+ vendor/racer
+ vendor/rand_core-0.4.0
+ vendor/rand_os
+ vendor/rand_xoshiro
+ vendor/rdrand
+ vendor/redox_users
+ vendor/reqwest
+ vendor/rls-analysis
+ vendor/rls-vfs
+ vendor/rustc-ap-arena
+ vendor/rustc-ap-graphviz
+ vendor/rustc-ap-rustc_ast
+ vendor/rustc-ap-rustc_ast_passes
+ vendor/rustc-ap-rustc_ast_pretty
+ vendor/rustc-ap-rustc_attr
+ vendor/rustc-ap-rustc_data_structures
+ vendor/rustc-ap-rustc_errors
+ vendor/rustc-ap-rustc_expand
+ vendor/rustc-ap-rustc_feature
+ vendor/rustc-ap-rustc_fs_util
+ vendor/rustc-ap-rustc_index
+ vendor/rustc-ap-rustc_lexer
+ vendor/rustc-ap-rustc_macros
+ vendor/rustc-ap-rustc_parse
+ vendor/rustc-ap-rustc_session
+ vendor/rustc-ap-rustc_span
+ vendor/rustc-ap-rustc_target
+ vendor/rustc-ap-serialize
+ vendor/rustc_tools_util
+ vendor/schannel
+ vendor/scoped_threadpool
+ vendor/security-framework
+ vendor/security-framework-sys
+ vendor/semver
+ vendor/serde_ignored
+ vendor/serde_repr
+ vendor/serde_urlencoded
+ vendor/shell-escape
+ vendor/signal-hook
+ vendor/sized-chunks
+ vendor/slab
+ vendor/string
+ vendor/strip-ansi-escapes
+ vendor/structopt
+ vendor/structopt-derive
+ vendor/term
+ vendor/tester
+ vendor/thiserror
+ vendor/thiserror-impl
+ vendor/tokio-buf
+ vendor/tokio
+ vendor/tokio-codec
+ vendor/tokio-current-thread
+ vendor/tokio-executor
+ vendor/tokio-fs
+ vendor/tokio-io
+ vendor/tokio-named-pipes
+ vendor/tokio-process
+ vendor/tokio-reactor
+ vendor/tokio-service
+ vendor/tokio-signal
+ vendor/tokio-sync
+ vendor/tokio-tcp
+ vendor/tokio-threadpool
+ vendor/tokio-timer
+ vendor/tokio-udp
+ vendor/tokio-uds
+ vendor/try_from
+ vendor/try-lock
+ vendor/unicode_categories
+ vendor/url-1.7.2
+ vendor/utf8parse
+ vendor/uuid
+ vendor/vergen
+ vendor/vte
+ vendor/want
+ vendor/winapi-0.2.8
+ vendor/winapi-build
+ vendor/winreg
+ vendor/ws2_32-sys
+ vendor/yaml-merge-keys
+ vendor/yaml-rust
+# DO NOT EDIT above, AUTOGENERATED
+
+Files: C*.md
+       R*.md
+       Cargo.lock
+       Cargo.toml
+       COPYRIGHT
+       LICENSE*
+       configure
+       config.toml.example
+       git-commit-hash
+       src/README.md
+       src/bootstrap/*
+       src/build_helper/*
+       src/ci/*
+       src/doc/*
+       src/etc/*
+       src/lib*
+       src/rt*
+       src/rust*
+       src/stage0.txt
+       src/stdarch/*
+       src/tools/*
+       src/test/*
+       version
+       x.py
+Copyright: 2006-2009 Graydon Hoare
+           2009-2012 Mozilla Foundation
+           2012-2017 The Rust Project Developers (see AUTHORS.txt)
+License: MIT or Apache-2.0
+
+Files: vendor/compiler_builtins/*
+Copyright: 2016-2019 Jorge Aparicio <japaricious@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/rust-lang-nursery/compiler-builtins
+
+Files: src/librustdoc/html/static/FiraSans*
+Copyright: 2014, Mozilla Foundation, 2014, Telefonica S.A.
+License: SIL-OPEN-FONT
+
+Files: src/librustdoc/html/static/SourceCodePro*
+Copyright: 2010, 2012 Adobe Systems Incorporated
+License: SIL-OPEN-FONT
+
+Files: src/librustdoc/html/static/SourceSerifPro*
+Copyright: 2014 Adobe Systems Incorporated
+License: SIL-OPEN-FONT
+
+Files: src/librustdoc/html/static/main.js
+Copyright: 2014 The Rust Project Developers
+License: MIT or Apache-2.0
+
+Files: src/libstd/memchr.rs
+Copyright: 2015 Andrew Gallant, bluss and Nicolas Koch
+License: MIT or Apache-2.0
+
+Files: src/libstd/sync/mpsc/mpsc_queue.rs
+       src/libstd/sync/mpsc/spsc_queue.rs
+Copyright: 2010-2011 Dmitry Vyukov
+License: BSD-2-Clause
+
+Files:
+ vendor/bitflags/*
+ vendor/cc/*
+ vendor/cmake/*
+ vendor/env_logger/*
+ vendor/env_logger-0*/*
+ vendor/getopts/*
+ vendor/libc/*
+ vendor/log/*
+ vendor/regex/*
+ vendor/regex-syntax/*
+ vendor/rustc-hash/*
+ vendor/time/*
+Copyright: 2010-2018 The Rust Project Developers
+License: MIT or Apache-2.0
+Comment:
+ This is a collection of external crates embedded here to bootstrap cargo.
+ Most of them come from the original upstream Rust project, thus share the
+ same MIT/Apache-2.0 dual-license. See https://github.com/rust-lang.
+ Exceptions are noted below.
+
+Files: vendor/num-integer/*
+       vendor/num-traits/*
+Copyright: 2014-2018 The Rust Project Developers
+License: MIT or Apache-2.0
+Comment: see https://github.com/rust-num/num
+
+Files:
+ vendor/string_cache/*
+ vendor/string_cache_codegen/*
+ vendor/string_cache_shared/*
+ vendor/unicode-bidi/*
+Copyright: 2015-2017 Alex Crichton <alex@alexcrichton.com>
+           2015-2017 Keegan McAllister <kmcallister@mozilla.com>
+           2015-2017 Chris Morgan <me@chrismorgan.info>
+           2014-2017 The html5ever Project Developers
+           2014-2017 The Servo Project Developers
+           2013-2017 Simon Sapin <simon.sapin@exyr.org>
+License: MIT or Apache-2.0
+Comment: see https://github.com/servo/
+
+Files:
+ vendor/getrandom/*
+ vendor/rand/*
+ vendor/rand-0*/*
+ vendor/rand_chacha/*
+ vendor/rand_chacha-0*/*
+ vendor/rand_core/*
+ vendor/rand_core-0*/*
+ vendor/rand_hc/*
+ vendor/rand_hc-0*/*
+ vendor/rand_isaac/*
+ vendor/rand_pcg/*
+ vendor/rand_xorshift/*
+ vendor/rand_xorshift-0*/*
+Copyright: 2010-2019 The Rand Project Developers
+           2010-2019 The Rust Project Developers
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/rust-random/getrandom
+ see https://github.com/rust-random/rand
+ see https://github.com/rust-random/small-rngs
+
+Files:
+ vendor/backtrace/*
+ vendor/backtrace-sys/*
+ vendor/cfg-if/*
+ vendor/filetime/*
+ vendor/flate2/*
+ vendor/fnv/*
+ vendor/jobserver/*
+ vendor/libz-sys/*
+ vendor/lzma-sys/*
+ vendor/miow/*
+ vendor/pkg-config/*
+ vendor/proc-macro2/*
+ vendor/proc-macro2-0*/*
+ vendor/rustc-demangle/*
+ vendor/scoped-tls/*
+ vendor/socket2/*
+ vendor/tar/*
+ vendor/toml/*
+ vendor/xz2/*
+Copyright: 2014-2019 Alex Crichton <alex@alexcrichton.com>
+           2015-2017 The Rust Project Developers
+License: MIT or Apache-2.0
+Comment: see https://github.com/alexcrichton/
+
+Files: vendor/dlmalloc/*
+Copyright: 2017-2019 Alex Crichton <alex@alexcrichton.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/alexcrichton/dlmalloc-rs
+
+Files: vendor/dlmalloc/src/dlmalloc.c
+Copyright: 2000-2012 Doug Lea <dl@cs.oswego.edu>
+License: CC0-1.0
+
+Files: vendor/backtrace-sys/src/libbacktrace/*
+Copyright: 2012-2016 Free Software Foundation, Inc.
+License: BSD-3-Clause
+Comment: written by Ian Lance Taylor, Google.
+
+Files:
+ vendor/backtrace-sys/src/libbacktrace/filenames.h
+ vendor/backtrace-sys/src/libbacktrace/ltmain.sh
+Copyright: 2000, 2001, 2007, 2010 Free Software Foundation, Inc.
+License: GPL-2+
+
+Files: vendor/ammonia/*
+Copyright: 2015-2018 Michael Howell <michael@notriddle.com>
+License: MIT  or  Apache-2.0
+Comment: see https://github.com/notriddle/ammonia
+
+Files: vendor/annotate-snippets/*
+Copyright: 2018-2019 Zibi Braniecki <gandalf@mozilla.com>
+License: Apache-2.0 or MIT
+Comment: see https://github.com/zbraniecki/annotate-snippets-rs
+
+Files: vendor/ansi_term/*
+Copyright: 2014-2016 ogham@bsago.me
+           2014-2016 Ryan Scheel (Havvy) <ryan.havvy@gmail.com>
+License: MIT
+Comment: see https://github.com/ogham/rust-ansi-term
+
+Files: vendor/aho-corasick/*
+       vendor/memchr/*
+       vendor/utf8-ranges/*
+Copyright: 2015 Andrew Gallant <jamslam@gmail.com>
+           2015-2018 bluss
+License: MIT or Unlicense
+Comment: see upstream projects,
+ * https://github.com/docopt/docopt.rs
+ * https://github.com/BurntSushi/aho-corasick
+ * https://github.com/BurntSushi/rust-memchr
+ * https://github.com/BurntSushi/utf8-ranges
+
+Files: vendor/arrayref/*
+Copyright: 2015-2018 David Roundy <roundyd@physics.oregonstate.edu>
+License: BSD-2-Clause
+Comment: see https://github.com/droundy/arrayref
+
+Files:
+ vendor/autocfg/*
+ vendor/autocfg-0*/*
+Copyright: 2018-2020 Josh Stone <cuviper@gmail.com>
+License: Apache-2.0 or MIT
+
+Files: vendor/atty/*
+Copyright: 2015-2017 softprops <d.tangren@gmail.com>
+License: MIT
+Comment: see https://github.com/softprops/atty
+
+Files:
+ vendor/block-buffer/*
+ vendor/block-padding/*
+ vendor/byte-tools/*
+ vendor/digest/*
+ vendor/fake-simd/*
+ vendor/md-5/*
+ vendor/opaque-debug/*
+ vendor/sha-1/*
+Copyright: 2016-2020 RustCrypto Developers
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/RustCrypto/hashes
+ see https://github.com/RustCrypto/traits
+ see https://github.com/RustCrypto/utils
+
+Files:
+ vendor/byteorder/*
+ vendor/globset/*
+ vendor/ignore/*
+ vendor/same-file/*
+ vendor/termcolor/*
+ vendor/walkdir/*
+ vendor/winapi-util/*
+ vendor/wincolor/*
+Copyright: 2015-2018 Andrew Gallant <jamslam@gmail.com>
+License: Unlicense or MIT
+Comment:
+ see https://github.com/BurntSushi/byteorder
+ see https://github.com/BurntSushi/same-file
+ see https://github.com/BurntSushi/walkdir
+ see https://github.com/BurntSushi/winapi-util
+ see https://github.com/BurntSushi/ripgrep/tree/master/globset
+ see https://github.com/BurntSushi/ripgrep/tree/master/ignore
+ see https://github.com/BurntSushi/ripgrep/tree/master/termcolor
+ see https://github.com/BurntSushi/ripgrep/tree/master/wincolor
+
+Files:
+ vendor/cargo_metadata/*
+ vendor/log_settings/*
+Copyright: 2016-2020 Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
+License: MIT
+Comment:
+ see https://github.com/oli-obk/log_settings
+ see https://github.com/oli-obk/cargo_metadata
+
+Files:
+ vendor/c2-chacha/*
+ vendor/ppv-lite86/*
+Copyright: 2019-2019 The CryptoCorrosion Contributors
+License: MIT or Apache-2.0
+Comment: see https://github.com/cryptocorrosion/cryptocorrosion
+
+Files:
+ vendor/chalk-derive/*
+ vendor/chalk-engine/*
+ vendor/chalk-ir/*
+ vendor/chalk-macros/*
+ vendor/chalk-rust-ir/*
+ vendor/chalk-solve/*
+Copyright:
+ 2015-2020 Rust Compiler Team
+ 2015-2020 Chalk developers
+License: Apache-2.0 or MIT
+Comment: see https://github.com/rust-lang-nursery/chalk
+
+Files: vendor/chrono/*
+Copyright: 2014-2018 Kang Seonghoon <public+rust@mearie.org>
+License: MIT or Apache-2.0
+Comment: see https://github.com/chronotope/chrono
+
+Files: vendor/clap/*
+Copyright: 2015-2017 Kevin K. <kbknapp@gmail.com>
+License: MIT
+Comment: see https://github.com/kbknapp/clap-rs.git
+
+Files: vendor/cloudabi/*
+Copyright: 2016-2018 Nuxi (https://nuxi.nl/) and contributors
+License: BSD-2-Clause
+Comment: see https://github.com/nuxinl/cloudabi
+
+Files: vendor/crc32fast/*
+Copyright: 2018-2019 Sam Rijs <srijs@airpost.net>
+           2018-2019 Alex Crichton <alex@alexcrichton.com>
+License: MIT OR Apache-2.0
+Comment: see https://github.com/srijs/rust-crc32fast
+
+Files:
+ vendor/crossbeam-channel/*
+ vendor/crossbeam-deque/*
+ vendor/crossbeam-epoch/*
+ vendor/crossbeam-queue/*
+ vendor/crossbeam-utils/*
+ vendor/crossbeam-utils-0.6.5/*
+Copyright: 2015-2020 The Crossbeam Project Developers
+License: MIT or Apache-2.0
+Comment: see https://github.com/crossbeam-rs
+
+Files: vendor/codespan/*
+Copyright: 2018-2020 Brendan Zabarauskas <bjzaba@yahoo.com.au>
+License: Apache-2.0
+Comment: see https://github.com/brendanzab/codespan
+
+Files: vendor/codespan-reporting/*
+Copyright: 2018-2020 Brendan Zabarauskas <bjzaba@yahoo.com.au>
+License: Apache-2.0
+Comment: see https://github.com/brendanzab/codespan
+
+Files: vendor/ctor/*
+Copyright: 2018-2020 Matt Mastracci <matthew@mastracci.com>
+License: Apache-2.0 OR MIT
+Comment: see https://github.com/mmastrac/rust-ctor
+
+Files:
+ vendor/darling/*
+ vendor/darling_core/*
+ vendor/darling_macro/*
+Copyright: 2017-2019 Ted Driggs <ted.driggs@outlook.com>
+License: MIT
+
+Files: vendor/datafrog/*
+Copyright:
+ 2018 Frank McSherry <fmcsherry@me.com>
+ 2018 The Rust Project Developers
+ 2018 Datafrog Developers
+License: Apache-2.0 or MIT
+Comment: see https://github.com/rust-lang-nursery/datafrog
+
+Files: vendor/diff/*
+Copyright: 2015-2017 Utkarsh Kukreti <utkarshkukreti@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/utkarshkukreti/diff.rs
+
+Files:
+ vendor/anyhow/*
+ vendor/itoa/*
+ vendor/quote/*
+ vendor/quote-0*/*
+ vendor/syn/*
+ vendor/syn-0*/*
+Copyright: 2016-2020 David Tolnay <dtolnay@gmail.com>
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/dtolnay/anyhow
+ see https://github.com/dtolnay/itoa
+ see https://github.com/dtolnay/quote
+ see https://github.com/dtolnay/syn
+ see https://github.com/dtolnay/synom
+
+Files:
+ vendor/arrayvec/*
+ vendor/either/*
+ vendor/fixedbitset/*
+ vendor/itertools/*
+ vendor/itertools-0*/*
+ vendor/maplit/*
+ vendor/nodrop/*
+ vendor/ordermap/*
+ vendor/scopeguard/*
+Copyright: 2014-2020 bluss
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/bluss/rust-itertools
+ see https://github.com/bluss/either
+ see https://github.com/bluss/arrayvec
+ see https://github.com/bluss/fixedbitset
+ see https://github.com/bluss/maplit
+ see https://github.com/bluss/ordermap
+ see https://github.com/bluss/scopeguard
+
+Files: vendor/difference/*
+Copyright: 2015-2018 Johann Hofmann <mail@johann-hofmann.com>
+License: MIT
+Comment: see https://github.com/johannhof/difference.rs
+
+Files: vendor/elasticlunr-rs/*
+Copyright: 2017-2018 Matt Ickstadt <mattico8@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/mattico/elasticlunr-rs
+
+Files:
+ vendor/ena-0*/*
+ vendor/ena/*
+Copyright: 2015-2020 Niko Matsakis <niko@alum.mit.edu>
+License: MIT or Apache-2.0
+Comment: see https://github.com/nikomatsakis/ena
+
+Files:
+ vendor/error-chain/*
+Copyright: 2016-2017 Brian Anderson <banderson@mozilla.com>
+           2016-2017 Paul Colomiets <paul@colomiets.name>
+           2016-2017 Colin Kiegel <kiegel@gmx.de>
+           2016-2017 Yamakaky <yamakaky@yamaworld.fr>
+License: MIT or Apache-2.0
+Comment: see https://github.com/brson/error-chain
+
+Files:
+ vendor/failure/*
+ vendor/failure_derive/*
+Copyright: 2017-2018 Without Boats <boats@mozilla.com>
+License: MIT OR Apache-2.0
+Comment:
+ see https://github.com/withoutboats/failure
+ see https://github.com/withoutboats/failure_derive
+
+Files: vendor/fortanix-sgx-abi/*
+Copyright: 2015-2019 Jethro Beekman <jethro@fortanix.com>
+License: MPL-2.0
+Comment: see https://github.com/fortanix/rust-sgx
+
+Files: vendor/fs_extra/*
+Copyright: 2017-2018 Denis Kurilenko <webdesus@gmail.com>
+License: MIT
+Comment: see https://github.com/webdesus/fs_extra
+
+Files:
+ vendor/fuchsia-zircon/*
+ vendor/fuchsia-zircon-sys/*
+Copyright: 2014-2018 Raph Levien <raph@google.com>
+License: BSD-3-Clause
+Comment: see https://fuchsia.googlesource.com/garnet/
+
+Files: vendor/futf/*
+Copyright: 2015-2018 Keegan McAllister <kmcallister@mozilla.com>
+License: MIT  or  Apache-2.0
+Comment: see https://github.com/servo/futf
+
+Files: vendor/generic-array/*
+Copyright: 2015-2019 Bartłomiej Kamiński <fizyk20@gmail.com>
+License: MIT
+Comment: see https://github.com/fizyk20/generic-array.git
+
+Files: vendor/handlebars/*
+Copyright: 2014-2017 Ning Sun <sunng@about.me>
+License: MIT
+Comment: see https://github.com/sunng87/handlebars-rust
+
+Files: vendor/heck/*
+Copyright: 2017-2018 Without Boats <woboats@gmail.com>
+License: MIT OR Apache-2.0
+Comment: see https://github.com/withoutboats/heck
+
+Files: vendor/hermit-abi/*
+Copyright: 2019-2019 Stefan Lankes
+License: MIT or Apache-2.0
+Comment: see https://github.com/hermitcore/hermit-abi
+
+Files:
+ vendor/html5ever/*
+ vendor/markup5ever/*
+Copyright: 2014-2018 The html5ever Project Developers
+License: MIT  or  Apache-2.0
+Comment: see https://github.com/servo/html5ever
+
+Files: vendor/humantime/*
+Copyright: 2016-2018 Paul Colomiets <paul@colomiets.name>
+License: MIT or Apache-2.0
+Comment: see https://github.com/tailhook/humantime
+
+Files: vendor/ident_case/*
+Copyright: 2017-2019 Ted Driggs <ted.driggs@outlook.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/TedDriggs/ident_case
+
+Files:
+ vendor/idna/*
+ vendor/idna-0.1.5/*
+ vendor/percent-encoding/*
+ vendor/percent-encoding-1*/*
+ vendor/url/*
+Copyright: 2013-2020 The rust-url developers
+License: MIT or Apache-2.0
+Comment: see https://github.com/servo/rust-url/
+
+Files: vendor/indexmap/*
+Copyright: 2016-2019 bluss
+           2016-2019 Josh Stone <cuviper@gmail.com>
+License: Apache-2.0 or MIT
+Comment: see https://github.com/bluss/indexmap
+
+Files: vendor/is-match/*
+       vendor/toml-query/*
+Copyright: 2017-2018 Matthias Beyer <mail@beyermatthias.de>
+License: MPL-2.0
+Comment: see https://github.com/matthiasbeyer/is-match
+         see https://github.com/matthiasbeyer/toml-query
+
+Files: vendor/matches/*
+Copyright: 2014-2017 Simon Sapin <simon.sapin@exyr.org>
+License: MIT
+Comment: see https://github.com/SimonSapin
+
+Files:
+ vendor/lazy_static/*
+ vendor/lazy_static-0*/*
+Copyright: 2014-2018 Marvin Löbel <loebel.marvin@gmail.com>
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/rust-lang-nursery/lazy-static.rs
+ see https://github.com/Kimundi/owning-ref-rs
+
+Files: vendor/mdbook/*
+Copyright: 2015-2017 Mathieu David <mathieudavid@mathieudavid.org>
+License: MPL-2.0
+Comment: see https://github.com/azerupi/mdBook
+
+Files: vendor/measureme/*
+Copyright: 2019-2019 Wesley Wiser <wwiser@gmail.com>
+           2019-2019 Michael Woerister <michaelwoerister@posteo>
+License: MIT OR Apache-2.0
+Comment: see https://github.com/rust-lang/measureme
+
+Files: vendor/memmap/*
+Copyright: 2015-2018 Dan Burkert <dan@danburkert.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/danburkert/memmap-rs
+
+Files:
+ vendor/memoffset/*
+ vendor/memoffset-0*/*
+Copyright: 2017-2019 Gilad Naaman <gilad.naaman@gmail.com>
+License: MIT
+Comment: see https://github.com/Gilnaa/memoffset
+
+Files:
+ vendor/macro-utils/*
+ vendor/minifier/*
+Copyright: 2017-2018 Guillaume Gomez <guillaume1.gomez@gmail.com>
+License: MIT
+Comment:
+ see https://github.com/GuillaumeGomez/macro_utils
+ see https://github.com/GuillaumeGomez/minifier-rs
+
+Files: vendor/new_debug_unreachable/*
+Copyright: 2014-2018 Matt Brubeck <mbrubeck@limpet.net>
+           2014-2018 Jonathan Reem <jonathan.reem@gmail.com>
+License: MIT
+Comment: see https://github.com/mbrubeck/rust-debug-unreachable
+
+Files: vendor/num_cpus/*
+Copyright: 2015 Sean McArthur <sean.monstar@gmail.com>
+License: MIT
+Comment: see https://github.com/seanmonstar/num_cpus
+
+Files: vendor/open/*
+Copyright: 2015-2017 Sebastian Thiel <byronimo@gmail.com>
+License: MIT
+Comment: see https://github.com/Byron/open-rs
+
+Files: vendor/opener/*
+Copyright: 2018-2020 Brian Bowman <seeker14491@gmail.com>
+License: MIT OR Apache-2.0
+Comment: see https://github.com/Seeker14491/opener
+
+Files: vendor/once_cell/*
+Copyright: 2018-2019 Aleksey Kladov <aleksey.kladov@gmail.com>
+License: MIT OR Apache-2.0
+Comment: see https://github.com/matklad/once_cell
+
+Files: vendor/output_vt100/*
+Copyright: 2019-2019 Phuntsok Drak-pa <phundrak@phundrak.fr>
+License: MIT
+Comment: see https://github.com/Phundrak/output-vt100-rs
+
+Files:
+ vendor/hashbrown/*
+ vendor/hashbrown-0*/*
+ vendor/lock_api/*
+ vendor/lock_api-0*/*
+ vendor/thread_local/*
+ vendor/thread_local-0*/*
+ vendor/parking_lot/*
+ vendor/parking_lot-0*/*
+ vendor/parking_lot_core/*
+ vendor/parking_lot_core-0*/*
+Copyright: 2016-2019 Amanieu d'Antras <amanieu@gmail.com>
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/rust-lang/hashbrown
+ see https://github.com/Amanieu/thread_local-rs
+ see https://github.com/Amanieu/parking_lot
+
+Files:
+ vendor/pest/*
+ vendor/pest_derive/*
+ vendor/pest_generator/*
+ vendor/pest_meta/*
+Copyright: 2016-2019 Dragoș Tiselice <dragostiselice@gmail.com>
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/dragostis/pest
+ see https://github.com/pest-parser/pest
+
+Files: vendor/polonius-engine/*
+Copyright: 2018-2018 The Rust Project Developers
+           2018-2018 Polonius Developers
+License: Apache-2.0 or MIT
+Comment: see https://github.com/rust-lang-nursery/polonius
+
+Files: vendor/petgraph/*
+Copyright: 2014-2018 bluss
+           2014-2018 mitchmindtree
+License: MIT or Apache-2.0
+Comment: see https://github.com/bluss/petgraph
+
+Files:
+ vendor/phf/*
+ vendor/phf_codegen/*
+ vendor/phf_generator/*
+ vendor/phf_shared/*
+Copyright: 2014-2018 Steven Fackler <sfackler@gmail.com>
+License: MIT
+Comment: see https://github.com/sfackler/rust-phf
+
+Files: vendor/precomputed-hash/*
+Copyright: 2017-2017 Emilio Cobos Álvarez <emilio@crisal.io>
+License: MIT
+Comment: see https://github.com/emilio/precomputed-hash
+
+Files: vendor/pretty_assertions/*
+Copyright: 2017-2018 Colin Kiegel <kiegel@gmx.de>
+           2017-2018 Florent Fayolle <florent.fayolle69@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/colin-kiegel/rust-pretty-assertions
+
+Files: vendor/psm/*
+Copyright: 2015-2020 Simonas Kazlauskas <git@kazlauskas.me>
+License: MIT or Apache-2.0
+Comment: see https://github.com/rust-lang/stacker/
+
+Files:
+ vendor/pulldown-cmark/*
+ vendor/pulldown-cmark-0*/*
+Copyright: 2015-2017 Raph Levien <raph@google.com>
+License: MIT
+Comment: see https://github.com/google/pulldown-cmark
+
+Files: vendor/punycode/*
+Copyright: 2015-2019 mcarton <cartonmartin+git@gmail.com>
+License: MIT
+Comment: see https://github.com/mcarton/rust-punycode.git
+
+Files: vendor/quick-error/*
+Copyright: 2015-2017 Paul Colomiets <paul@colomiets.name>
+           2015-2017 Colin Kiegel <kiegel@gmx.de>
+License: MIT or Apache-2.0
+Comment: see http://github.com/tailhook/quick-error
+
+Files:
+ vendor/rayon/*
+ vendor/rayon-core/*
+ vendor/rustc-rayon/*
+ vendor/rustc-rayon-core/*
+Copyright: 2014-2018 Niko Matsakis <niko@alum.mit.edu>
+           2014-2018 Josh Stone <cuviper@gmail.com>
+License: Apache-2.0 or MIT
+Comment:
+ see https://github.com/rayon-rs/rayon
+ see https://github.com/Zoxc/rayon/tree/rustc
+
+Files: vendor/redox_syscall/*
+       vendor/redox_termios/*
+Copyright: 2016-2017 Jeremy Soller <jackpot51@gmail.com>
+License: MIT
+Comment: see https://github.com/redox-os/syscall
+         see https://github.com/redox-os/termios
+
+Files: vendor/remove_dir_all/*
+Copyright: 2017-2018 Aaronepower <theaaronepower@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/Aaronepower/remove_dir_all.git
+
+Files: vendor/rls-data/*
+       vendor/rls-span/*
+Copyright: 2016-2017 Nick Cameron <ncameron@mozilla.com>
+License: Apache-2.0 or MIT
+Comment: see https://github.com/nrc/rls-span
+         see https://github.com/nrc/rls-data
+
+Files: vendor/rustc_version/*
+Copyright: 2015-2018 Marvin Löbel <loebel.marvin@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/Kimundi/rustc-version-rs
+
+Files: vendor/rustfix/*
+Copyright: 2016-2018 Pascal Hertleif <killercup@gmail.com>
+           2016-2018 Oliver Schneider <oli-obk@users.noreply.github.com>
+License: Apache-2.0 or MIT
+Comment: see https://github.com/killercup/rustfix
+
+Files: vendor/ryu/*
+Copyright: 2018-2018 David Tolnay <dtolnay@gmail.com>
+License: Apache-2.0 or BSL-1.0
+Comment: see https://github.com/dtolnay/ryu
+
+Files:
+ vendor/semver-0.9.0/*
+ vendor/semver/*
+ vendor/semver-parser/*
+Copyright:
+ 2014-2020 Steve Klabnik <steve@steveklabnik.com>
+ 2014-2020 The Rust Project Developers
+License: MIT or Apache-2.0
+Comment: see https://github.com/steveklabnik/semver
+
+Files: vendor/serde/*
+       vendor/serde_json/*
+Copyright: 2014-2017 Erick Tryzelaar <erick.tryzelaar@gmail.com>
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/serde-rs/serde
+ see https://github.com/serde-rs/json
+
+Files: vendor/serde_derive/*
+Copyright: 2014-2017 Erick Tryzelaar <erick.tryzelaar@gmail.com>
+           2016-2017 David Tolnay <dtolnay@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/serde-rs/serde
+
+Files: vendor/siphasher/*
+Copyright: 2016-2018 Frank Denis <github@pureftpd.org>
+License: MIT or Apache-2.0
+Comment: see https://github.com/jedisct1/rust-siphash
+
+Files: vendor/shlex/*
+Copyright: 2015-2015 comex <comexk@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/comex/rust-shlex
+
+Files:
+ vendor/smallvec-0.6.10/*
+ vendor/smallvec/*
+Copyright: 2015-2020 Simon Sapin <simon.sapin@exyr.org>
+License: MPL-2.0
+Comment: see https://github.com/servo/rust-smallvec
+
+Files: vendor/stable_deref_trait/*
+Copyright: 2017-2017 Robert Grosse <n210241048576@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/storyyeller/stable_deref_trait
+
+Files: vendor/stacker/*
+Copyright: 2015-2020 Alex Crichton <alex@alexcrichton.com>
+           2015-2020 Simonas Kazlauskas <git@kazlauskas.me>
+License: MIT or Apache-2.0
+Comment: see https://github.com/rust-lang/stacker
+
+Files: vendor/strsim/*
+Copyright: 2015 Danny Guo <dannyguo91@gmail.com>
+License: MIT
+Comment: see https://github.com/dguo/strsim-rs
+
+Files:
+ vendor/strum/*
+ vendor/strum_macros/*
+Copyright: 2015-2018 Peter Glotfelty <peglotfe@microsoft.com>
+License: MIT
+
+Files:
+ vendor/synstructure/*
+ vendor/synstructure-0*/*
+Copyright:
+ 2016-2019 Nika Layzell <nika@thelayzells.com>
+License: MIT
+Comment: see https://github.com/mystor/synstructure
+
+Files: vendor/tempfile/*
+Copyright: 2015-2018 Steven Allen <steven@stebalien.com>
+           2015-2018 The Rust Project Developers
+           2015-2018 Ashley Mannix <ashleymannix@live.com.au>
+           2015-2018 Jason White <jasonaw0@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/Stebalien/tempfile
+
+Files: vendor/tendril/*
+Copyright: 2015-2017 Keegan McAllister <mcallister.keegan@gmail.com>
+           2015-2017 Simon Sapin <simon.sapin@exyr.org>
+           2015-2017 Chris Morgan <me@chrismorgan.info>
+License: MIT or Apache-2.0
+Comment: see https://github.com/servo/tendril
+
+Files: vendor/termion/*
+Copyright: 2016-2017 ticki <Ticki@users.noreply.github.com>
+           2016-2017 gycos <alexandre.bury@gmail.com>
+           2016-2017 IGI-111 <igi-111@protonmail.com>
+License: MIT
+Comment: see https://github.com/ticki/termion
+
+Files: vendor/termize/*
+Copyright: 2016-2020 Yuki Okushi <huyuumi.dev@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/JohnTitor/termize
+
+Files: vendor/term_size/*
+Copyright: 2016-2018 Kevin K. <kbknapp@gmail.com>
+           2016-2018 Benjamin Sago <ogham@bsago.me>
+License: MIT or Apache-2.0
+Comment: see https://github.com/kbknapp/term_size-rs.git
+
+Files: vendor/textwrap/*
+Copyright: 2016-2017 Martin Geisler <martin@geisler.net>
+License: MIT
+Comment: see https://github.com/mgeisler/textwrap
+
+Files: vendor/toml-query_derive/*
+Copyright: 2017-2019 Matthias Beyer <mail@beyermatthias.de>
+License: MPL-2.0
+Comment: see https://github.com/matthiasbeyer/toml-query
+
+Files: vendor/typenum/*
+Copyright: 2015-2019 Paho Lurie-Gregg <paho@paholg.com>
+           2015-2019 Andre Bogus <bogusandre@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/paholg/typenum
+
+Files:
+ vendor/version_check/*
+ vendor/version_check-0.1.5/*
+Copyright: 2017-2019 Sergio Benitez <sb@sergio.bz>
+License: MIT or Apache-2.0
+Comment: see https://github.com/SergioBenitez/version_check
+
+Files:
+ vendor/ucd-parse/*
+ vendor/ucd-trie/*
+ vendor/ucd-util/*
+Copyright: 2017-2020 Andrew Gallant <jamslam@gmail.com>
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/BurntSushi/rucd
+ see https://github.com/BurntSushi/ucd-generate
+
+Files: vendor/unicase/*
+Copyright: 2014-2019 Sean McArthur <sean@seanmonstar.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/seanmonstar/unicase
+
+Files:
+ vendor/unicode-normalization/*
+ vendor/unicode-segmentation/*
+ vendor/unicode-width/*
+Copyright: 2015-2019 kwantam <kwantam@gmail.com>
+License: MIT or Apache-2.0
+Comment:
+ see https://github.com/unicode-rs/unicode-normalization
+ see https://github.com/unicode-rs/unicode-segmentation
+ see https://github.com/unicode-rs/unicode-width
+
+Files:
+ vendor/unicode-xid/*
+ vendor/unicode-xid-0*/*
+Copyright: 2015-2017 erick.tryzelaar <erick.tryzelaar@gmail.com>
+           2015-2017 kwantam <kwantam@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/unicode-rs/unicode-xid
+
+Files: vendor/vcpkg/*
+Copyright: 2017-2019 Jim McGrath <jimmc2@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/mcgoo/vcpkg-rs
+
+Files: vendor/vec_map/*
+Copyright: 2015-2017 Alexis Beingessner <a.beingessner@gmail.com>
+           2015-2017 Andrew Paseltiner <apaseltiner@gmail.com>
+           2015-2017 contain-rs developers
+           2015-2017 The Rust Project Developers
+License: MIT or Apache-2.0
+Comment: see https://github.com/contain-rs/vec-map
+
+Files:
+ vendor/mac/*
+Copyright: 2014-2017 Jonathan Reem <jonathan.reem@gmail.com>
+License: MIT
+Comment:
+ see https://github.com/reem/rust-mac.git
+ see https://github.com/reem/rust-unreachable.git
+ see https://github.com/reem/rust-void.git
+
+Files: vendor/utf-8/*
+Copyright: 2015-2018 Simon Sapin <simon.sapin@exyr.org>
+License: MIT OR Apache-2.0
+Comment: see https://github.com/SimonSapin/rust-utf8
+
+Files:
+ vendor/wasi-0*/*
+ vendor/wasi/*
+Copyright: 2019-2020 The Cranelift Project Developers
+License: Apache-2.0 with LLVM exception or Apache-2.0 or MIT
+Comment: see https://github.com/CraneStation/rust-wasi
+
+Files:
+ vendor/kernel32-sys/*
+ vendor/winapi/*
+ vendor/winapi-0*/*
+ vendor/winapi-build/*
+Copyright:
+ 2014-2019 Peter Atashian <retep998@gmail.com>
+ 2014-2019 winapi-rs developers
+License: MIT
+Comment: see https://github.com/retep998/winapi-rs
+
+Files: vendor/winapi-*-pc-windows-gnu/*
+Copyright: 2014-2018 Peter Atashian <retep998@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/retep998/winapi-rs
+
+Files: vendor/xattr/*
+Copyright: 2015-2017 Steven Allen <steven@stebalien.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/Stebalien/xattr
+
+Files:
+ vendor/yaml-rust-0*/*
+ vendor/yaml-rust/*
+Copyright: 2015-2020 Yuheng Chen <yuhengchen@sensetime.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/chyh1990/yaml-rust
+
+Files: vendor/bstr/*
+Copyright: 2018-2020 Andrew Gallant <jamslam@gmail.com>
+License: MIT OR Apache-2.0
+Comment: see https://github.com/BurntSushi/bstr
+
+Files: vendor/humantime-1.3.0/*
+Copyright:
+ 2016-2018 Paul Colomiets <paul@colomiets.name>
+ 2016 The humantime Developers
+ 2016 Pyfisch
+ 2005-2013 Rich Felker
+License: MIT or Apache-2.0
+
+Files: vendor/unicode-script/*
+Copyright: 2020-2020 Manish Goregaokar <manishsmail@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/unicode-rs/unicode-script
+
+Files: vendor/unicode-security/*
+Copyright: 2020-2020 Charles Lew <crlf0710@gmail.com>
+           2020-2020 Manish Goregaokar <manishsmail@gmail.com>
+License: MIT or Apache-2.0
+Comment: see https://github.com/unicode-rs/unicode-security
+
+Files: debian/*
+Copyright: 2013-2018 Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
+License: MIT or Apache-2.0
+
+Files: debian/icons/rust-logo-32x32-blk.png
+Copyright: Mozilla Foundation
+License: CC-BY
+Comment:
+ Relevant discussion in https://github.com/rust-lang/rust/issues/11562
+
+License: Apache-2.0
+ On Debian systems, the full text of the Apache License Version 2.0
+ can be found in the file `/usr/share/common-licenses/Apache-2.0'.
+
+License: Apache-2.0 with LLVM exception
+ On Debian systems, the full text of the Apache License Version 2.0
+ can be found in the file `/usr/share/common-licenses/Apache-2.0'.
+ Additionally, the LLVM exception is as follows:
+ .
+ As an exception, if, as a result of your compiling your source code, portions
+ of this Software are embedded into an Object form of such source code, you
+ may redistribute such embedded portions in such Object form without complying
+ with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+ .
+ In addition, if you combine or link compiled forms of this Software with
+ software that is licensed under the GPLv2 ("Combined Software") and if a
+ court of competent jurisdiction determines that the patent provision (Section
+ 3), the indemnity provision (Section 9) or other Section of the License
+ conflicts with the conditions of the GPLv2, you may retroactively and
+ prospectively choose to deem waived or otherwise exclude such Section(s) of
+ the License, but only in their entirety and only with respect to the Combined
+ Software.
+
+License: BSD-2-clause
+ Redistribution and use in source and binary forms, with
+ or without modification, are permitted provided that the
+ following conditions are met:
+ .
+ 1. Redistributions of source code must retain the above
+    copyright notice, this list of conditions and the
+    following disclaimer.
+ 2. Redistributions in binary form must reproduce the
+    above copyright notice, this list of conditions and
+    the following disclaimer in the documentation and/or
+    other materials provided with the distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License: CC0-1.0
+ On Debian systems, the full text of the CC0 1.0 Universal
+ License can be found in the file
+ `/usr/share/common-licenses/CC0-1.0'.
+
+License: MIT
+ Permission is hereby granted, free of charge, to any
+ person obtaining a copy of this software and associated
+ documentation files (the "Software"), to deal in the
+ Software without restriction, including without
+ limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software
+ is furnished to do so, subject to the following
+ conditions:
+ .
+ The above copyright notice and this permission notice
+ shall be included in all copies or substantial portions
+ of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+
+License: BSL-1.0
+ Permission is hereby granted, free of charge, to any person or organization
+ obtaining a copy of the software and accompanying documentation covered by
+ this license (the "Software") to use, reproduce, display, distribute,
+ execute, and transmit the Software, and to prepare derivative works of the
+ Software, and to permit third-parties to whom the Software is furnished to
+ do so, all subject to the following:
+ .
+ The copyright notices in the Software and this entire statement, including
+ the above license grant, this restriction and the following disclaimer,
+ must be included in all copies of the Software, in whole or in part, and
+ all derivative works of the Software, unless such copies or derivative
+ works are solely in the form of machine-executable object code generated by
+ a source language processor.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+ SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+ FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+
+License: BSD-3-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the organization nor the names of its contributors
+    may be used to endorse or promote products derived from this software
+    without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+License: Unlicense
+ This is free and unencumbered software released into the public domain.
+ .
+ Anyone is free to copy, modify, publish, use, compile, sell, or
+ distribute this software, either in source code form or as a compiled
+ binary, for any purpose, commercial or non-commercial, and by any
+ means.
+ .
+ In jurisdictions that recognize copyright laws, the author or authors
+ of this software dedicate any and all copyright interest in the
+ software to the public domain. We make this dedication for the
+ benefit of the public at large and to the detriment of our heirs and
+ successors. We intend this dedication to be an overt act of
+ relinquishment in perpetuity of all present and future rights to this
+ software under copyright law.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ .
+ For more information, please refer to <http://unlicense.org/>
+
+License: SIL-OPEN-FONT
+ This Font Software is licensed under the SIL Open Font License,
+ Version 1.1.
+ .
+ This license is copied below, and is also available with a FAQ at:
+ http://scripts.sil.org/OFL
+ .
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+ .
+ PREAMBLE The goals of the Open Font License (OFL) are to stimulate
+ worldwide development of collaborative font projects, to support the font
+ creation efforts of academic and linguistic communities, and to provide
+ a free and open framework in which fonts may be shared and improved in
+ partnership with others.
+ .
+ The OFL allows the licensed fonts to be used, studied, modified and
+ redistributed freely as long as they are not sold by themselves.
+ The fonts, including any derivative works, can be bundled, embedded,
+ redistributed and/or sold with any software provided that any reserved
+ names are not used by derivative works.  The fonts and derivatives,
+ however, cannot be released under any other type of license.  The
+ requirement for fonts to remain under this license does not apply to
+ any document created using the fonts or their derivatives.
+ .
+ DEFINITIONS
+ "Font Software" refers to the set of files released by the Copyright
+ Holder(s) under this license and clearly marked as such.
+ This may include source files, build scripts and documentation.
+ .
+ "Reserved Font Name" refers to any names specified as such after the
+ copyright statement(s).
+ .
+ "Original Version" refers to the collection of Font Software components
+ as distributed by the Copyright Holder(s).
+ .
+ "Modified Version" refers to any derivative made by adding to, deleting,
+ or substituting ? in part or in whole ?
+ any of the components of the Original Version, by changing formats or
+ by porting the Font Software to a new environment.
+ .
+ "Author" refers to any designer, engineer, programmer, technical writer
+ or other person who contributed to the Font Software.
+ .
+ PERMISSION & CONDITIONS
+ .
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of the Font Software, to use, study, copy, merge, embed, modify,
+ redistribute, and sell modified and unmodified copies of the Font
+ Software, subject to the following conditions:
+ .
+ 1) Neither the Font Software nor any of its individual components,in
+    Original or Modified Versions, may be sold by itself.
+ .
+ 2) Original or Modified Versions of the Font Software may be bundled,
+    redistributed and/or sold with any software, provided that each copy
+    contains the above copyright notice and this license. These can be
+    included either as stand-alone text files, human-readable headers or
+    in the appropriate machine-readable metadata fields within text or
+    binary files as long as those fields can be easily viewed by the user.
+ .
+ 3) No Modified Version of the Font Software may use the Reserved Font
+    Name(s) unless explicit written permission is granted by the
+    corresponding Copyright Holder. This restriction only applies to the
+    primary font name as presented to the users.
+ .
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+    Software shall not be used to promote, endorse or advertise any
+    Modified Version, except to acknowledge the contribution(s) of the
+    Copyright Holder(s) and the Author(s) or with their explicit written
+    permission.
+ 5) The Font Software, modified or unmodified, in part or in whole, must
+    be distributed entirely under this license, and must not be distributed
+    under any other license. The requirement for fonts to remain under
+    this license does not apply to any document created using the Font
+    Software.
+ .
+ TERMINATION
+ This license becomes null and void if any of the above conditions are not met.
+ .
+ DISCLAIMER
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT.  IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF THE USE OR INABILITY
+
+License: GPL-2+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ .
+ On Debian systems, see /usr/share/common-licenses/GPL-2 for the full
+ text of the GPL version 2.
+
+License: CC-BY
+ Attribution 4.0 International
+ .
+ =======================================================================
+ .
+ Creative Commons Corporation ("Creative Commons") is not a law firm and
+ does not provide legal services or legal advice. Distribution of
+ Creative Commons public licenses does not create a lawyer-client or
+ other relationship. Creative Commons makes its licenses and related
+ information available on an "as-is" basis. Creative Commons gives no
+ warranties regarding its licenses, any material licensed under their
+ terms and conditions, or any related information. Creative Commons
+ disclaims all liability for damages resulting from their use to the
+ fullest extent possible.
+ .
+ Using Creative Commons Public Licenses
+ .
+ Creative Commons public licenses provide a standard set of terms and
+ conditions that creators and other rights holders may use to share
+ original works of authorship and other material subject to copyright
+ and certain other rights specified in the public license below. The
+ following considerations are for informational purposes only, are not
+ exhaustive, and do not form part of our licenses.
+ .
+      Considerations for licensors: Our public licenses are
+      intended for use by those authorized to give the public
+      permission to use material in ways otherwise restricted by
+      copyright and certain other rights. Our licenses are
+      irrevocable. Licensors should read and understand the terms
+      and conditions of the license they choose before applying it.
+      Licensors should also secure all rights necessary before
+      applying our licenses so that the public can reuse the
+      material as expected. Licensors should clearly mark any
+      material not subject to the license. This includes other CC-
+      licensed material, or material used under an exception or
+      limitation to copyright. More considerations for licensors:
+      wiki.creativecommons.org/Considerations_for_licensors
+ .
+      Considerations for the public: By using one of our public
+      licenses, a licensor grants the public permission to use the
+      licensed material under specified terms and conditions. If
+      the licensor's permission is not necessary for any reason--for
+      example, because of any applicable exception or limitation to
+      copyright--then that use is not regulated by the license. Our
+      licenses grant only permissions under copyright and certain
+      other rights that a licensor has authority to grant. Use of
+      the licensed material may still be restricted for other
+      reasons, including because others have copyright or other
+      rights in the material. A licensor may make special requests,
+      such as asking that all changes be marked or described.
+      Although not required by our licenses, you are encouraged to
+      respect those requests where reasonable. More_considerations
+      for the public:
+     wiki.creativecommons.org/Considerations_for_licensees
+ .
+ =======================================================================
+ .
+ Creative Commons Attribution 4.0 International Public License
+ .
+ By exercising the Licensed Rights (defined below), You accept and agree
+ to be bound by the terms and conditions of this Creative Commons
+ Attribution 4.0 International Public License ("Public License"). To the
+ extent this Public License may be interpreted as a contract, You are
+ granted the Licensed Rights in consideration of Your acceptance of
+ these terms and conditions, and the Licensor grants You such rights in
+ consideration of benefits the Licensor receives from making the
+ Licensed Material available under these terms and conditions.
+ .
+ .
+ Section 1 -- Definitions.
+ .
+   a. Adapted Material means material subject to Copyright and Similar
+      Rights that is derived from or based upon the Licensed Material
+      and in which the Licensed Material is translated, altered,
+      arranged, transformed, or otherwise modified in a manner requiring
+      permission under the Copyright and Similar Rights held by the
+      Licensor. For purposes of this Public License, where the Licensed
+      Material is a musical work, performance, or sound recording,
+      Adapted Material is always produced where the Licensed Material is
+      synched in timed relation with a moving image.
+ .
+   b. Adapter's License means the license You apply to Your Copyright
+      and Similar Rights in Your contributions to Adapted Material in
+      accordance with the terms and conditions of this Public License.
+ .
+   c. Copyright and Similar Rights means copyright and/or similar rights
+      closely related to copyright including, without limitation,
+      performance, broadcast, sound recording, and Sui Generis Database
+      Rights, without regard to how the rights are labeled or
+      categorized. For purposes of this Public License, the rights
+      specified in Section 2(b)(1)-(2) are not Copyright and Similar
+      Rights.
+ .
+   d. Effective Technological Measures means those measures that, in the
+      absence of proper authority, may not be circumvented under laws
+      fulfilling obligations under Article 11 of the WIPO Copyright
+      Treaty adopted on December 20, 1996, and/or similar international
+      agreements.
+ .
+   e. Exceptions and Limitations means fair use, fair dealing, and/or
+      any other exception or limitation to Copyright and Similar Rights
+      that applies to Your use of the Licensed Material.
+ .
+   f. Licensed Material means the artistic or literary work, database,
+      or other material to which the Licensor applied this Public
+      License.
+ .
+   g. Licensed Rights means the rights granted to You subject to the
+      terms and conditions of this Public License, which are limited to
+      all Copyright and Similar Rights that apply to Your use of the
+      Licensed Material and that the Licensor has authority to license.
+ .
+   h. Licensor means the individual(s) or entity(ies) granting rights
+      under this Public License.
+ .
+   i. Share means to provide material to the public by any means or
+      process that requires permission under the Licensed Rights, such
+      as reproduction, public display, public performance, distribution,
+      dissemination, communication, or importation, and to make material
+      available to the public including in ways that members of the
+      public may access the material from a place and at a time
+      individually chosen by them.
+ .
+   j. Sui Generis Database Rights means rights other than copyright
+      resulting from Directive 96/9/EC of the European Parliament and of
+      the Council of 11 March 1996 on the legal protection of databases,
+      as amended and/or succeeded, as well as other essentially
+      equivalent rights anywhere in the world.
+ .
+   k. You means the individual or entity exercising the Licensed Rights
+      under this Public License. Your has a corresponding meaning.
+ .
+ .
+ Section 2 -- Scope.
+ .
+   a. License grant.
+ .
+     1. Subject to the terms and conditions of this Public License,
+        the Licensor hereby grants You a worldwide, royalty-free,
+        non-sublicensable, non-exclusive, irrevocable license to
+        exercise the Licensed Rights in the Licensed Material to:
+ .
+          a. reproduce and Share the Licensed Material, in whole or
+         in part; and
+ .
+          b. produce, reproduce, and Share Adapted Material.
+ .
+     2. Exceptions and Limitations. For the avoidance of doubt, where
+        Exceptions and Limitations apply to Your use, this Public
+        License does not apply, and You do not need to comply with
+        its terms and conditions.
+ .
+     3. Term. The term of this Public License is specified in Section
+        6(a).
+ .
+     4. Media and formats; technical modifications allowed. The
+        Licensor authorizes You to exercise the Licensed Rights in
+        all media and formats whether now known or hereafter created,
+        and to make technical modifications necessary to do so. The
+        Licensor waives and/or agrees not to assert any right or
+        authority to forbid You from making technical modifications
+        necessary to exercise the Licensed Rights, including
+        technical modifications necessary to circumvent Effective
+        Technological Measures. For purposes of this Public License,
+        simply making modifications authorized by this Section 2(a)
+        (4) never produces Adapted Material.
+ .
+     5. Downstream recipients.
+ .
+          a. Offer from the Licensor -- Licensed Material. Every
+         recipient of the Licensed Material automatically
+         receives an offer from the Licensor to exercise the
+         Licensed Rights under the terms and conditions of this
+         Public License.
+ .
+          b. No downstream restrictions. You may not offer or impose
+         any additional or different terms or conditions on, or
+         apply any Effective Technological Measures to, the
+         Licensed Material if doing so restricts exercise of the
+         Licensed Rights by any recipient of the Licensed
+         Material.
+ .
+     6. No endorsement. Nothing in this Public License constitutes or
+        may be construed as permission to assert or imply that You
+        are, or that Your use of the Licensed Material is, connected
+        with, or sponsored, endorsed, or granted official status by,
+        the Licensor or others designated to receive attribution as
+        provided in Section 3(a)(1)(A)(i).
+ .
+   b. Other rights.
+ .
+     1. Moral rights, such as the right of integrity, are not
+        licensed under this Public License, nor are publicity,
+        privacy, and/or other similar personality rights; however, to
+        the extent possible, the Licensor waives and/or agrees not to
+        assert any such rights held by the Licensor to the limited
+        extent necessary to allow You to exercise the Licensed
+        Rights, but not otherwise.
+ .
+     2. Patent and trademark rights are not licensed under this
+        Public License.
+ .
+     3. To the extent possible, the Licensor waives any right to
+        collect royalties from You for the exercise of the Licensed
+        Rights, whether directly or through a collecting society
+        under any voluntary or waivable statutory or compulsory
+        licensing scheme. In all other cases the Licensor expressly
+        reserves any right to collect such royalties.
+ .
+ .
+ Section 3 -- License Conditions.
+ .
+ Your exercise of the Licensed Rights is expressly made subject to the
+ following conditions.
+ .
+   a. Attribution.
+ .
+     1. If You Share the Licensed Material (including in modified
+        form), You must:
+ .
+          a. retain the following if it is supplied by the Licensor
+         with the Licensed Material:
+ .
+           i. identification of the creator(s) of the Licensed
+              Material and any others designated to receive
+              attribution, in any reasonable manner requested by
+              the Licensor (including by pseudonym if
+              designated);
+ .
+          ii. a copyright notice;
+ .
+         iii. a notice that refers to this Public License;
+ .
+          iv. a notice that refers to the disclaimer of
+              warranties;
+ .
+           v. a URI or hyperlink to the Licensed Material to the
+              extent reasonably practicable;
+ .
+          b. indicate if You modified the Licensed Material and
+         retain an indication of any previous modifications; and
+ .
+          c. indicate the Licensed Material is licensed under this
+         Public License, and include the text of, or the URI or
+         hyperlink to, this Public License.
+ .
+     2. You may satisfy the conditions in Section 3(a)(1) in any
+        reasonable manner based on the medium, means, and context in
+        which You Share the Licensed Material. For example, it may be
+        reasonable to satisfy the conditions by providing a URI or
+        hyperlink to a resource that includes the required
+        information.
+ .
+     3. If requested by the Licensor, You must remove any of the
+        information required by Section 3(a)(1)(A) to the extent
+        reasonably practicable.
+ .
+     4. If You Share Adapted Material You produce, the Adapter's
+        License You apply must not prevent recipients of the Adapted
+        Material from complying with this Public License.
+ .
+ .
+ Section 4 -- Sui Generis Database Rights.
+ .
+ Where the Licensed Rights include Sui Generis Database Rights that
+ apply to Your use of the Licensed Material:
+ .
+   a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+      to extract, reuse, reproduce, and Share all or a substantial
+      portion of the contents of the database;
+ .
+   b. if You include all or a substantial portion of the database
+      contents in a database in which You have Sui Generis Database
+      Rights, then the database in which You have Sui Generis Database
+      Rights (but not its individual contents) is Adapted Material; and
+ .
+   c. You must comply with the conditions in Section 3(a) if You Share
+      all or a substantial portion of the contents of the database.
+ .
+ For the avoidance of doubt, this Section 4 supplements and does not
+ replace Your obligations under this Public License where the Licensed
+ Rights include other Copyright and Similar Rights.
+ .
+ .
+ Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+ .
+   a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+      EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+      AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+      ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+      IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+      WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+      PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+      ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+      KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+      ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+ .
+   b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+      TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+      NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+      INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+      COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+      USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+      ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+      DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+      IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+ .
+   c. The disclaimer of warranties and limitation of liability provided
+      above shall be interpreted in a manner that, to the extent
+      possible, most closely approximates an absolute disclaimer and
+      waiver of all liability.
+ .
+ .
+ Section 6 -- Term and Termination.
+ .
+   a. This Public License applies for the term of the Copyright and
+      Similar Rights licensed here. However, if You fail to comply with
+      this Public License, then Your rights under this Public License
+      terminate automatically.
+ .
+   b. Where Your right to use the Licensed Material has terminated under
+      Section 6(a), it reinstates:
+ .
+     1. automatically as of the date the violation is cured, provided
+        it is cured within 30 days of Your discovery of the
+        violation; or
+ .
+     2. upon express reinstatement by the Licensor.
+ .
+      For the avoidance of doubt, this Section 6(b) does not affect any
+      right the Licensor may have to seek remedies for Your violations
+      of this Public License.
+ .
+   c. For the avoidance of doubt, the Licensor may also offer the
+      Licensed Material under separate terms or conditions or stop
+      distributing the Licensed Material at any time; however, doing so
+      will not terminate this Public License.
+ .
+   d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+      License.
+ .
+ .
+ Section 7 -- Other Terms and Conditions.
+ .
+   a. The Licensor shall not be bound by any additional or different
+      terms or conditions communicated by You unless expressly agreed.
+ .
+   b. Any arrangements, understandings, or agreements regarding the
+      Licensed Material not stated herein are separate from and
+      independent of the terms and conditions of this Public License.
+ .
+ .
+ Section 8 -- Interpretation.
+ .
+   a. For the avoidance of doubt, this Public License does not, and
+      shall not be interpreted to, reduce, limit, restrict, or impose
+      conditions on any use of the Licensed Material that could lawfully
+      be made without permission under this Public License.
+ .
+   b. To the extent possible, if any provision of this Public License is
+      deemed unenforceable, it shall be automatically reformed to the
+      minimum extent necessary to make it enforceable. If the provision
+      cannot be reformed, it shall be severed from this Public License
+      without affecting the enforceability of the remaining terms and
+      conditions.
+ .
+   c. No term or condition of this Public License will be waived and no
+      failure to comply consented to unless expressly agreed to by the
+      Licensor.
+ .
+   d. Nothing in this Public License constitutes or may be interpreted
+      as a limitation upon, or waiver of, any privileges and immunities
+      that apply to the Licensor or You, including from the legal
+      processes of any jurisdiction or authority.
+ .
+ .
+ =======================================================================
+ .
+ Creative Commons is not a party to its public licenses.
+ Notwithstanding, Creative Commons may elect to apply one of its public
+ licenses to material it publishes and in those instances will be
+ considered the "Licensor." Except for the limited purpose of indicating
+ that material is shared under a Creative Commons public license or as
+ otherwise permitted by the Creative Commons policies published at
+ creativecommons.org/policies, Creative Commons does not authorize the
+ use of the trademark "Creative Commons" or any other trademark or logo
+ of Creative Commons without its prior written consent including,
+ without limitation, in connection with any unauthorized modifications
+ to any of its public licenses or any other arrangements,
+ understandings, or agreements concerning use of licensed material. For
+ the avoidance of doubt, this paragraph does not form part of the public
+ licenses.
+ .
+ Creative Commons may be contacted at creativecommons.org.
+
+License: MPL-2.0
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ .
+ On Debian systems, see /usr/share/common-licenses/MPL-2.0 for the full
+ text of the MPL version 2.0.
diff --git a/docs b/docs
new file mode 100644 (file)
index 0000000..b43bf86
--- /dev/null
+++ b/docs
@@ -0,0 +1 @@
+README.md
diff --git a/ensure-patch b/ensure-patch
new file mode 100755 (executable)
index 0000000..b8562f2
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -e
+
+case "$1" in
+"-N") fwd=-N; rev=-R; verb="applied";;
+"-R") fwd=-R; rev=-N; verb="reversed";;
+*) echo >&2 "Usage: $0 <-N|-R> <patch-file>"; exit 2;;
+esac
+
+if patch --dry-run -F0 -f $rev -p1 < "$2" >/dev/null; then
+       echo >&2 "patch already $verb: $2"
+       exit 0
+fi
+patch --dry-run -F0 -f $fwd -p1 < "$2"
+patch -F0 -f $fwd -p1 < "$2"
diff --git a/gbp.conf b/gbp.conf
new file mode 100644 (file)
index 0000000..d568e69
--- /dev/null
+++ b/gbp.conf
@@ -0,0 +1,7 @@
+[DEFAULT]
+pristine-tar = True
+ignore-branch = True
+
+[import-orig]
+upstream-branch = upstream/experimental
+debian-branch = debian/experimental
diff --git a/get-stage0.py b/get-stage0.py
new file mode 100755 (executable)
index 0000000..1f55c53
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/python3
+# Sometimes this might fail due to upstream changes.
+# In that case, you probably just need to override the failing step in our
+# DownloadOnlyRustBuild class below.
+
+import sys
+
+import bootstrap
+from bootstrap import RustBuild
+
+class DownloadOnlyRustBuild(RustBuild):
+    triple = None
+    def build_bootstrap(self):
+        pass
+    def run(self, *args):
+        pass
+    def build_triple(self):
+        return self.triple
+    def update_submodules(self):
+        pass
+    def bootstrap_binary(self):
+        return "true"
+
+def main(argv):
+    triple = argv.pop(1)
+    DownloadOnlyRustBuild.triple = triple
+    bootstrap.RustBuild = DownloadOnlyRustBuild
+    bootstrap.bootstrap(False)
+
+if __name__ == '__main__':
+    main(sys.argv)
diff --git a/icons/rust-logo-32x32-blk.png b/icons/rust-logo-32x32-blk.png
new file mode 100644 (file)
index 0000000..9cc1452
Binary files /dev/null and b/icons/rust-logo-32x32-blk.png differ
diff --git a/libstd-rust-1.45.lintian-overrides b/libstd-rust-1.45.lintian-overrides
new file mode 100644 (file)
index 0000000..f64f7a6
--- /dev/null
@@ -0,0 +1,13 @@
+# "libstd" just seemed too generic
+libstd-rust-1.45 binary: package-name-doesnt-match-sonames
+libstd-rust-1.45 binary: sharedobject-in-library-directory-missing-soname
+
+# Rust doesn't use dev shlib symlinks nor any of the other shlib support stuff
+libstd-rust-1.45 binary: dev-pkg-without-shlib-symlink
+libstd-rust-1.45 binary: shlib-without-versioned-soname
+libstd-rust-1.45 binary: unused-shlib-entry-in-control-file
+
+# Libraries that use libc symbols (libterm, libstd, etc) *are* linked
+# to libc.  Lintian gets upset that some Rust libraries don't need
+# libc, boo hoo.
+libstd-rust-1.45 binary: library-not-linked-against-libc
diff --git a/libstd-rust-dev-wasm32-cross.lintian-overrides b/libstd-rust-dev-wasm32-cross.lintian-overrides
new file mode 100644 (file)
index 0000000..3a770a2
--- /dev/null
@@ -0,0 +1,3 @@
+# wasm object files count as arch-independent for now,
+# at least until we starting offering Debian in wasm
+libstd-rust-dev-wasm32-cross binary: arch-independent-package-contains-binary-or-object usr/lib/rustlib/wasm32-*/lib/lib*.rlib
diff --git a/libstd-rust-dev.lintian-overrides b/libstd-rust-dev.lintian-overrides
new file mode 100644 (file)
index 0000000..2e7ca28
--- /dev/null
@@ -0,0 +1,8 @@
+# I assure you, dear lintian, that "/usr/lib/rustlib/x86_64-unknown-linux-gnu/"
+# is indeed an arch-specific directory.
+libstd-rust-dev binary: arch-dependent-file-not-in-arch-specific-directory
+
+# See debhelper bug #875780. This override is commented out because it's not
+# always needed, but we want it here for documentation purposes. Basically,
+# if you see it then you probably don't need to worry about it.
+#libstd-rust-dev binary: unstripped-static-library usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/lib*.rlib(*)
diff --git a/lintian-to-copyright.sh b/lintian-to-copyright.sh
new file mode 100755 (executable)
index 0000000..9a766da
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+# Pipe the output of lintian into this.
+sed -ne 's/.* file-without-copyright-information //p' | cut -d/ -f1-2 | sort -u | while read x; do
+       /usr/share/cargo/scripts/guess-crate-copyright "$x"
+done
diff --git a/llvm-upstream-patch.sh b/llvm-upstream-patch.sh
new file mode 100755 (executable)
index 0000000..fc87971
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Run this on https://github.com/llvm-mirror/llvm
+# Or another repo where the above is the "upstream" remote
+set -e
+head=$(git rev-parse --verify -q remotes/upstream/master || git rev-parse --verify -q remotes/origin/master)
+test -n "$head"
+for i in "$@"; do
+       git show $(git rev-list "$head" -n1 --grep='git-svn-id: .*@'"$i") > rL"$i".patch
+done
diff --git a/make_orig-stage0_tarball.sh b/make_orig-stage0_tarball.sh
new file mode 100755 (executable)
index 0000000..c6593f2
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+# See README.Debian "Bootstrapping" for details.
+#
+# You may want to use `debian/rules source_orig-stage0` instead of calling this
+# directly.
+
+set -e
+
+upstream_version="$(dpkg-parsechangelog -SVersion | sed -e 's/\(.*\)-.*/\1/g')"
+upstream_bootstrap_arch="${upstream_bootstrap_arch:-amd64 arm64 armhf i386 mips64 mips64el powerpc ppc64 ppc64el s390x}"
+
+rm -f stage0/*/*.sha256
+mkdir -p stage0 build && ln -sf ../stage0 build/cache
+if [ -n "$(find stage0/ -type f)" ]; then
+       echo >&2 "$0: NOTE: extra artifacts in stage0/ will be included:"
+       find stage0/ -type f
+fi
+for deb_host_arch in $upstream_bootstrap_arch; do
+       make -s --no-print-directory -f debian/architecture-test.mk "rust-for-deb_${deb_host_arch}" | {
+       read deb_host_arch rust_triplet
+       PYTHONPATH=src/bootstrap debian/get-stage0.py "${rust_triplet}"
+       rm -rf "${rust_triplet}"
+       }
+done
+
+echo >&2 "building stage0 tar file now, this will take a while..."
+stamp=@${SOURCE_DATE_EPOCH:-$(date +%s)}
+touch --date="$stamp" stage0/dpkg-source-dont-rename-parent-directory
+tar --mtime="$stamp" --clamp-mtime \
+  --owner=root --group=root \
+  -cJf "../rustc_${upstream_version}.orig-stage0.tar.xz" \
+  --transform "s/^stage0\///" \
+  stage0/*
+
+rm -f src/bootstrap/bootstrap.pyc
+
+cat <<eof
+================================================================================
+orig-stage0 bootstrapping tarball created in ../rustc_${upstream_version}.orig-stage0.tar.xz
+containing the upstream compilers for $upstream_bootstrap_arch
+
+You *probably* now want to do the following steps:
+
+1. Add [$(echo $upstream_bootstrap_arch | sed -e 's/\S*/!\0/g')] to the rustc/cargo Build-Depends in d/control
+2. Update d/changelog
+3. Run \`dpkg-source -b .\` to generate a .dsc that includes this tarball.
+================================================================================
+eof
diff --git a/patches/d-0000-ignore-removed-submodules.patch b/patches/d-0000-ignore-removed-submodules.patch
new file mode 100644 (file)
index 0000000..360db2c
--- /dev/null
@@ -0,0 +1,203 @@
+Description: Ignore submodules that we're not building, or that are unused like
+ mdbook-linkcheck that pull in a ton of dependencies that are unneeded.
+Author: Ximin Luo <infinity0@debian.org>
+Forwarded: not-needed
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -6,7 +6,6 @@ members = [
+   "src/libtest",
+   "src/librustc_codegen_llvm",
+   "src/tools/cargotest",
+-  "src/tools/clippy",
+   "src/tools/compiletest",
+   "src/tools/error_index_generator",
+   "src/tools/linkchecker",
+@@ -14,18 +14,10 @@ members = [
+   "src/tools/unstable-book-gen",
+   "src/tools/tidy",
+   "src/tools/build-manifest",
+-  "src/tools/remote-test-client",
+-  "src/tools/remote-test-server",
+   "src/tools/rust-installer",
+-  "src/tools/cargo",
+   "src/tools/rustdoc",
+-  "src/tools/rls",
+-  "src/tools/rustfmt",
+-  "src/tools/miri",
+-  "src/tools/miri/cargo-miri",
+   "src/tools/rustdoc-themes",
+   "src/tools/unicode-table-generator",
+-  "src/tools/expand-yaml-anchors",
+ ]
+ exclude = [
+   "build",
+@@ -47,29 +40,10 @@ debug-assertions = false
+ debug = false
+ debug-assertions = false
+-# We want the RLS to use the version of Cargo that we've got vendored in this
+-# repository to ensure that the same exact version of Cargo is used by both the
+-# RLS and the Cargo binary itself. The RLS depends on Cargo as a git repository
+-# so we use a `[patch]` here to override the github repository with our local
+-# vendored copy.
+-[patch."https://github.com/rust-lang/cargo"]
+-cargo = { path = "src/tools/cargo" }
+-
+ [patch.crates-io]
+-# Similar to Cargo above we want the RLS to use a vendored version of `rustfmt`
+-# that we're shipping as well (to ensure that the rustfmt in RLS and the
+-# `rustfmt` executable are the same exact version).
+-rustfmt-nightly = { path = "src/tools/rustfmt" }
+-
+-# See comments in `src/tools/rustc-workspace-hack/README.md` for what's going on
+-# here
+-rustc-workspace-hack = { path = 'src/tools/rustc-workspace-hack' }
+ # See comments in `tools/rustc-std-workspace-core/README.md` for what's going on
+ # here
+ rustc-std-workspace-core = { path = 'src/tools/rustc-std-workspace-core' }
+ rustc-std-workspace-alloc = { path = 'src/tools/rustc-std-workspace-alloc' }
+ rustc-std-workspace-std = { path = 'src/tools/rustc-std-workspace-std' }
+-
+-[patch."https://github.com/rust-lang/rust-clippy"]
+-clippy_lints = { path = "src/tools/clippy/clippy_lints" }
+--- a/src/bootstrap/bootstrap.py
++++ b/src/bootstrap/bootstrap.py
+@@ -705,10 +705,6 @@ class RustBuild(object):
+                 os.path.join(self.rust_root, "src/bootstrap/Cargo.toml")]
+         for _ in range(1, self.verbose):
+             args.append("--verbose")
+-        if self.use_locked_deps:
+-            args.append("--locked")
+-        if self.use_vendored_sources:
+-            args.append("--frozen")
+         run(args, env=env, verbose=self.verbose)
+     def build_triple(self):
+--- a/src/bootstrap/builder.rs
++++ b/src/bootstrap/builder.rs
+@@ -417,7 +417,6 @@ impl<'a> Builder<'a> {
+                 doc::RustdocBook,
+                 doc::RustByExample,
+                 doc::RustcBook,
+-                doc::CargoBook,
+                 doc::EmbeddedBook,
+                 doc::EditionGuide,
+             ),
+@@ -439,7 +439,5 @@ impl<'a> Builder<'a> {
+                 dist::Miri,
+                 dist::LlvmTools,
+-                dist::Extended,
+-                dist::HashSign
+             ),
+             Kind::Install => describe!(
+                 install::Docs,
+@@ -1177,10 +1175,7 @@ impl<'a> Builder<'a> {
+             }
+         }
+-        if self.config.locked_deps {
+-            cargo.arg("--locked");
+-        }
+-        if self.config.vendor || self.is_sudo {
++        if self.is_sudo {
+             cargo.arg("--frozen");
+         }
+--- a/src/bootstrap/doc.rs
++++ b/src/bootstrap/doc.rs
+@@ -60,7 +60,6 @@ macro_rules! book {
+ // NOTE: When adding a book here, make sure to ALSO build the book by
+ // adding a build step in `src/bootstrap/builder.rs`!
+ book!(
+-    CargoBook, "src/tools/cargo/src/doc", "cargo";
+     EditionGuide, "src/doc/edition-guide", "edition-guide";
+     EmbeddedBook, "src/doc/embedded-book", "embedded-book";
+     Nomicon, "src/doc/nomicon", "nomicon";
+--- a/src/doc/index.md
++++ b/src/doc/index.md
+@@ -87,7 +87,7 @@ accomplishing various tasks.
+ ## The Cargo Book
+-[The Cargo Book](cargo/index.html) is a guide to Cargo, Rust's build tool and dependency manager.
++[The Cargo Book](../../cargo-doc/doc/index.html) is a guide to Cargo, Rust's build tool and dependency manager.
+ ## The Rustdoc Book
+--- a/src/bootstrap/test.rs
++++ b/src/bootstrap/test.rs
+@@ -1472,14 +1472,7 @@ impl Step for RustcGuide {
+     }
+     fn run(self, builder: &Builder<'_>) {
+-        let src = builder.src.join("src/doc/rustc-dev-guide");
+-        let mut rustbook_cmd = builder.tool_cmd(Tool::Rustbook);
+-        let toolstate = if try_run(builder, rustbook_cmd.arg("linkcheck").arg(&src)) {
+-            ToolState::TestPass
+-        } else {
+-            ToolState::TestFail
+-        };
+-        builder.save_toolstate("rustc-dev-guide", toolstate);
++        builder.save_toolstate("rustc-dev-guide", ToolState::TestPass);
+     }
+ }
+--- a/src/bootstrap/tool.rs
++++ b/src/bootstrap/tool.rs
+@@ -273,14 +273,14 @@ pub fn prepare_tool_cargo(
+ }
+ fn rustbook_features() -> Vec<String> {
+-    let mut features = Vec::new();
++    let features = Vec::new();
+     // Due to CI budged and risk of spurious failures we want to limit jobs running this check.
+     // At same time local builds should run it regardless of the platform.
+     // `CiEnv::None` means it's local build and `CHECK_LINKS` is defined in x86_64-gnu-tools to
+     // explicitly enable it on single job
+     if CiEnv::current() == CiEnv::None || env::var("CHECK_LINKS").is_ok() {
+-        features.push("linkcheck".to_string());
++    //    features.push("linkcheck".to_string());
+     }
+     features
+--- a/src/tools/rustbook/Cargo.toml
++++ b/src/tools/rustbook/Cargo.toml
+@@ -6,22 +6,16 @@ license = "MIT OR Apache-2.0"
+ edition = "2018"
+ [features]
+-linkcheck = ["mdbook-linkcheck", "codespan-reporting", "codespan"]
++linkcheck = []
+ [dependencies]
+ clap = "2.25.0"
+ failure = "0.1"
+-mdbook-linkcheck = { version = "0.5.0", optional = true }
+ # Keep in sync with mdbook-linkcheck.
+ codespan = { version = "0.5", optional = true }
+ codespan-reporting = { version = "0.5", optional = true }
+-# A noop dependency that changes in the Rust repository, it's a bit of a hack.
+-# See the `src/tools/rustc-workspace-hack/README.md` file in `rust-lang/rust`
+-# for more information.
+-rustc-workspace-hack = "1.0.0"
+-
+ [dependencies.mdbook]
+ version = "0.3.7"
+ default-features = false
+--- a/src/tools/tidy/src/deps.rs
++++ b/src/tools/tidy/src/deps.rs
+@@ -406,8 +406,8 @@ fn check_crate_duplicate(resolve: &Resol
+         // These two crates take quite a long time to build, so don't allow two versions of them
+         // to accidentally sneak into our dependency graph, in order to ensure we keep our CI times
+         // under control.
+-        "cargo",
+-        "rustc-ap-rustc_ast",
++        //"cargo",
++        //"rustc-ap-rustc_ast",
+     ];
+     for &name in FORBIDDEN_TO_HAVE_DUPLICATES {
diff --git a/patches/d-0001-disable-miniz.patch b/patches/d-0001-disable-miniz.patch
new file mode 100644 (file)
index 0000000..3627962
--- /dev/null
@@ -0,0 +1,32 @@
+--- a/vendor/flate2/Cargo.toml
++++ b/vendor/flate2/Cargo.toml
+@@ -40,14 +40,6 @@ version = "0.2"
+ version = "1.0"
+ optional = true
+-[dependencies.miniz-sys]
+-version = "0.1.11"
+-optional = true
+-
+-[dependencies.miniz_oxide]
+-version = "0.3.2"
+-optional = true
+-
+ [dependencies.tokio-io]
+ version = "0.1.11"
+ optional = true
+@@ -71,12 +63,10 @@ version = "0.1.3"
+ version = "0.1.10"
+ [features]
+-default = ["rust_backend"]
+-rust_backend = ["miniz_oxide"]
++default = ["zlib"]
++rust_backend = ["zlib"]
+ tokio = ["tokio-io", "futures"]
+ zlib = ["libz-sys"]
+-[target."cfg(all(target_arch = \"wasm32\", not(target_os = \"emscripten\")))".dependencies.miniz_oxide]
+-version = "0.3.2"
+ [badges.appveyor]
+ repository = "alexcrichton/flate2-rs"
diff --git a/patches/d-0002-pkg-config-no-special-snowflake.patch b/patches/d-0002-pkg-config-no-special-snowflake.patch
new file mode 100644 (file)
index 0000000..4f29930
--- /dev/null
@@ -0,0 +1,99 @@
+--- a/vendor/pkg-config/src/lib.rs
++++ b/vendor/pkg-config/src/lib.rs
+@@ -9,8 +9,6 @@
+ //! A number of environment variables are available to globally configure how
+ //! this crate will invoke `pkg-config`:
+ //!
+-//! * `PKG_CONFIG_ALLOW_CROSS` - if this variable is not set, then `pkg-config`
+-//!   will automatically be disabled for all cross compiles.
+ //! * `FOO_NO_PKG_CONFIG` - if set, this will disable running `pkg-config` when
+ //!   probing for the library named `foo`.
+ //!
+@@ -106,9 +104,8 @@ pub enum Error {
+     /// Contains the name of the responsible environment variable.
+     EnvNoPkgConfig(String),
+-    /// Cross compilation detected.
+-    ///
+-    /// Override with `PKG_CONFIG_ALLOW_CROSS=1`.
++    /// Cross compilation detected. Kept for compatibility;
++    /// the Debian package never emits this.
+     CrossCompilation,
+     /// Failed to run `pkg-config`.
+@@ -130,13 +127,9 @@ impl error::Error for Error {
+     fn description(&self) -> &str {
+         match *self {
+             Error::EnvNoPkgConfig(_) => "pkg-config requested to be aborted",
+-            Error::CrossCompilation => {
+-                "pkg-config doesn't handle cross compilation. \
+-                 Use PKG_CONFIG_ALLOW_CROSS=1 to override"
+-            }
+             Error::Command { .. } => "failed to run pkg-config",
+             Error::Failure { .. } => "pkg-config did not exit sucessfully",
+-            Error::__Nonexhaustive => panic!(),
++            Error::CrossCompilation | Error::__Nonexhaustive => panic!(),
+         }
+     }
+@@ -152,11 +145,6 @@ impl fmt::Display for Error {
+     fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
+         match *self {
+             Error::EnvNoPkgConfig(ref name) => write!(f, "Aborted because {} is set", name),
+-            Error::CrossCompilation => write!(
+-                f,
+-                "Cross compilation detected. \
+-                 Use PKG_CONFIG_ALLOW_CROSS=1 to override"
+-            ),
+             Error::Command {
+                 ref command,
+                 ref cause,
+@@ -180,7 +168,7 @@ impl fmt::Display for Error {
+                 }
+                 Ok(())
+             }
+-            Error::__Nonexhaustive => panic!(),
++            Error::CrossCompilation | Error::__Nonexhaustive => panic!(),
+         }
+     }
+ }
+@@ -341,6 +329,8 @@ impl Config {
+         if host == target {
+             return true;
+         }
++        // always enable PKG_CONFIG_ALLOW_CROSS override in Debian
++        return true;
+         // pkg-config may not be aware of cross-compilation, and require
+         // a wrapper script that sets up platform-specific prefixes.
+@@ -399,7 +389,11 @@ impl Config {
+     fn command(&self, name: &str, args: &[&str]) -> Command {
+         let exe = self
+             .env_var("PKG_CONFIG")
+-            .unwrap_or_else(|_| String::from("pkg-config"));
++            .unwrap_or_else(|_| {
++                self.env_var("DEB_HOST_GNU_TYPE")
++                    .map(|t| t.to_string() + "-pkg-config")
++                    .unwrap_or_else(|_| String::from("pkg-config"))
++            });
+         let mut cmd = Command::new(exe);
+         if self.is_static(name) {
+             cmd.arg("--static");
+--- a/vendor/pkg-config/tests/test.rs
++++ b/vendor/pkg-config/tests/test.rs
+@@ -34,7 +34,6 @@ fn find(name: &str) -> Result<pkg_config
+     pkg_config::probe_library(name)
+ }
+-#[test]
+ fn cross_disabled() {
+     let _g = LOCK.lock();
+     reset();
+@@ -46,7 +45,6 @@ fn cross_disabled() {
+     }
+ }
+-#[test]
+ fn cross_enabled() {
+     let _g = LOCK.lock();
+     reset();
diff --git a/patches/d-0003-mdbook-strip-embedded-libs.patch b/patches/d-0003-mdbook-strip-embedded-libs.patch
new file mode 100644 (file)
index 0000000..eb4a9db
--- /dev/null
@@ -0,0 +1,358 @@
+Description: Use local web resources instead of remote ones
+Author: Matthijs van Otterdijk <matthijs@wirevirt.net>
+Author: Ximin Luo <infinity0@debian.org>
+Bug: https://github.com/azerupi/mdBook/issues/271
+Comment:
+ Use https://github.com/infinity0/mdBook/tree/debian to help you rebase the
+ patch on top of a newer version.
+ .
+ Make sure the paths here match the ones in debian/rust-doc.links
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/src/tools/linkchecker/main.rs    2020-03-09 23:11:18.000000000 +0100
++++ b/src/tools/linkchecker/main.rs    2020-03-23 11:46:30.657963205 +0100
+@@ -163,6 +163,11 @@ fn check(cache: &mut Cache, root: &Path,
+         {
+             return;
+         }
++        // Ignore parent URLs, so that the package installation process can
++        // provide a symbolic link later
++        if url.starts_with("../") {
++            return;
++        }
+         let mut parts = url.splitn(2, "#");
+         let url = parts.next().unwrap();
+         let fragment = parts.next();
+--- a/vendor/mdbook/src/book/init.rs   2020-03-10 01:00:20.000000000 +0100
++++ b/vendor/mdbook/src/book/init.rs   2020-03-23 11:46:30.657963205 +0100
+@@ -148,12 +148,6 @@ impl BookBuilder {
+         let mut js = File::create(themedir.join("book.js"))?;
+         js.write_all(theme::JS)?;
+-        let mut highlight_css = File::create(themedir.join("highlight.css"))?;
+-        highlight_css.write_all(theme::HIGHLIGHT_CSS)?;
+-
+-        let mut highlight_js = File::create(themedir.join("highlight.js"))?;
+-        highlight_js.write_all(theme::HIGHLIGHT_JS)?;
+-
+         Ok(())
+     }
+--- a/vendor/mdbook/src/renderer/html_handlebars/hbs_renderer.rs       2020-03-10 01:00:20.000000000 +0100
++++ b/vendor/mdbook/src/renderer/html_handlebars/hbs_renderer.rs       2020-03-23 11:46:30.657963205 +0100
+@@ -3,7 +3,7 @@ use crate::config::{Config, HtmlConfig,
+ use crate::errors::*;
+ use crate::renderer::html_handlebars::helpers;
+ use crate::renderer::{RenderContext, Renderer};
+-use crate::theme::{self, playpen_editor, Theme};
++use crate::theme::{self, Theme};
+ use crate::utils;
+ use std::borrow::Cow;
+@@ -114,7 +114,7 @@ impl HtmlHandlebars {
+         &self,
+         destination: &Path,
+         theme: &Theme,
+-        html_config: &HtmlConfig,
++        _html_config: &HtmlConfig,
+     ) -> Result<()> {
+         use crate::utils::fs::write_file;
+@@ -130,62 +130,8 @@ impl HtmlHandlebars {
+         write_file(destination, "css/print.css", &theme.print_css)?;
+         write_file(destination, "css/variables.css", &theme.variables_css)?;
+         write_file(destination, "favicon.png", &theme.favicon)?;
+-        write_file(destination, "highlight.css", &theme.highlight_css)?;
+         write_file(destination, "tomorrow-night.css", &theme.tomorrow_night_css)?;
+         write_file(destination, "ayu-highlight.css", &theme.ayu_highlight_css)?;
+-        write_file(destination, "highlight.js", &theme.highlight_js)?;
+-        write_file(destination, "clipboard.min.js", &theme.clipboard_js)?;
+-        write_file(
+-            destination,
+-            "FontAwesome/css/font-awesome.css",
+-            theme::FONT_AWESOME,
+-        )?;
+-        write_file(
+-            destination,
+-            "FontAwesome/fonts/fontawesome-webfont.eot",
+-            theme::FONT_AWESOME_EOT,
+-        )?;
+-        write_file(
+-            destination,
+-            "FontAwesome/fonts/fontawesome-webfont.svg",
+-            theme::FONT_AWESOME_SVG,
+-        )?;
+-        write_file(
+-            destination,
+-            "FontAwesome/fonts/fontawesome-webfont.ttf",
+-            theme::FONT_AWESOME_TTF,
+-        )?;
+-        write_file(
+-            destination,
+-            "FontAwesome/fonts/fontawesome-webfont.woff",
+-            theme::FONT_AWESOME_WOFF,
+-        )?;
+-        write_file(
+-            destination,
+-            "FontAwesome/fonts/fontawesome-webfont.woff2",
+-            theme::FONT_AWESOME_WOFF2,
+-        )?;
+-        write_file(
+-            destination,
+-            "FontAwesome/fonts/FontAwesome.ttf",
+-            theme::FONT_AWESOME_TTF,
+-        )?;
+-
+-        let playpen_config = &html_config.playpen;
+-
+-        // Ace is a very large dependency, so only load it when requested
+-        if playpen_config.editable && playpen_config.copy_js {
+-            // Load the editor
+-            write_file(destination, "editor.js", playpen_editor::JS)?;
+-            write_file(destination, "ace.js", playpen_editor::ACE_JS)?;
+-            write_file(destination, "mode-rust.js", playpen_editor::MODE_RUST_JS)?;
+-            write_file(destination, "theme-dawn.js", playpen_editor::THEME_DAWN_JS)?;
+-            write_file(
+-                destination,
+-                "theme-tomorrow_night.js",
+-                playpen_editor::THEME_TOMORROW_NIGHT_JS,
+-            )?;
+-        }
+         Ok(())
+     }
+--- a/vendor/mdbook/src/renderer/html_handlebars/search.rs     2020-03-10 01:00:20.000000000 +0100
++++ b/vendor/mdbook/src/renderer/html_handlebars/search.rs     2020-03-23 11:46:30.657963205 +0100
+@@ -34,8 +34,6 @@ pub fn create_files(search_config: &Sear
+             format!("Object.assign(window.search, {});", index).as_bytes(),
+         )?;
+         utils::fs::write_file(destination, "searcher.js", searcher::JS)?;
+-        utils::fs::write_file(destination, "mark.min.js", searcher::MARK_JS)?;
+-        utils::fs::write_file(destination, "elasticlunr.min.js", searcher::ELASTICLUNR_JS)?;
+         debug!("Copying search files ✓");
+     }
+--- a/vendor/mdbook/src/theme/index.hbs        2020-03-10 01:00:20.000000000 +0100
++++ b/vendor/mdbook/src/theme/index.hbs        2020-03-23 11:46:30.657963205 +0100
+@@ -20,12 +20,10 @@
+         <link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print">
+         <!-- Fonts -->
+-        <link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
+-        <link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
+-        <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css">
++        <link rel="stylesheet" href="{{ path_to_root }}../font-awesome.min.css">
+         <!-- Highlight.js Stylesheets -->
+-        <link rel="stylesheet" href="{{ path_to_root }}highlight.css">
++        <link rel="stylesheet" href="{{ path_to_root }}../highlight.css">
+         <link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
+         <link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
+@@ -36,7 +34,7 @@
+         {{#if mathjax_support}}
+         <!-- MathJax -->
+-        <script async type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
++        <script async type="text/javascript" src="../mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+         {{/if}}
+     </head>
+     <body>
+@@ -46,46 +44,6 @@
+             var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
+         </script>
+-        <!-- Work around some values being stored in localStorage wrapped in quotes -->
+-        <script type="text/javascript">
+-            try {
+-                var theme = localStorage.getItem('mdbook-theme');
+-                var sidebar = localStorage.getItem('mdbook-sidebar');
+-
+-                if (theme.startsWith('"') && theme.endsWith('"')) {
+-                    localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
+-                }
+-
+-                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
+-                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
+-                }
+-            } catch (e) { }
+-        </script>
+-
+-        <!-- Set the theme before any content is loaded, prevents flash -->
+-        <script type="text/javascript">
+-            var theme;
+-            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
+-            if (theme === null || theme === undefined) { theme = default_theme; }
+-            var html = document.querySelector('html');
+-            html.classList.remove('no-js')
+-            html.classList.remove('{{ default_theme }}')
+-            html.classList.add(theme);
+-            html.classList.add('js');
+-        </script>
+-
+-        <!-- Hide / unhide sidebar before it is displayed -->
+-        <script type="text/javascript">
+-            var html = document.querySelector('html');
+-            var sidebar = 'hidden';
+-            if (document.body.clientWidth >= 1080) {
+-                try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
+-                sidebar = sidebar || 'visible';
+-            }
+-            html.classList.remove('sidebar-visible');
+-            html.classList.add("sidebar-" + sidebar);
+-        </script>
+-
+         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
+             <div class="sidebar-scrollbox">
+                 {{#toc}}{{/toc}}
+@@ -214,53 +172,7 @@
+         </script>
+         {{/if}}
+-        {{#if google_analytics}}
+-        <!-- Google Analytics Tag -->
+-        <script type="text/javascript">
+-            var localAddrs = ["localhost", "127.0.0.1", ""];
+-
+-            // make sure we don't activate google analytics if the developer is
+-            // inspecting the book locally...
+-            if (localAddrs.indexOf(document.location.hostname) === -1) {
+-                (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+-                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+-                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+-                })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+-
+-                ga('create', '{{google_analytics}}', 'auto');
+-                ga('send', 'pageview');
+-            }
+-        </script>
+-        {{/if}}
+-
+-        {{#if playpen_line_numbers}}
+-        <script type="text/javascript">
+-            window.playpen_line_numbers = true;
+-        </script>
+-        {{/if}}
+-        
+-        {{#if playpen_copyable}}
+-        <script type="text/javascript">
+-            window.playpen_copyable = true;
+-        </script>
+-        {{/if}}
+-
+-        {{#if playpen_js}}
+-        <script src="{{ path_to_root }}ace.js" type="text/javascript" charset="utf-8"></script>
+-        <script src="{{ path_to_root }}editor.js" type="text/javascript" charset="utf-8"></script>
+-        <script src="{{ path_to_root }}mode-rust.js" type="text/javascript" charset="utf-8"></script>
+-        <script src="{{ path_to_root }}theme-dawn.js" type="text/javascript" charset="utf-8"></script>
+-        <script src="{{ path_to_root }}theme-tomorrow_night.js" type="text/javascript" charset="utf-8"></script>
+-        {{/if}}
+-
+-        {{#if search_js}}
+-        <script src="{{ path_to_root }}elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
+-        <script src="{{ path_to_root }}mark.min.js" type="text/javascript" charset="utf-8"></script>
+-        <script src="{{ path_to_root }}searcher.js" type="text/javascript" charset="utf-8"></script>
+-        {{/if}}
+-
+-        <script src="{{ path_to_root }}clipboard.min.js" type="text/javascript" charset="utf-8"></script>
+-        <script src="{{ path_to_root }}highlight.js" type="text/javascript" charset="utf-8"></script>
++        <script src="{{ path_to_root }}../highlight.js" type="text/javascript" charset="utf-8"></script>
+         <script src="{{ path_to_root }}book.js" type="text/javascript" charset="utf-8"></script>
+         <!-- Custom JS scripts -->
+--- a/vendor/mdbook/src/theme/mod.rs   2020-03-10 01:00:20.000000000 +0100
++++ b/vendor/mdbook/src/theme/mod.rs   2020-03-23 11:46:30.657963205 +0100
+@@ -1,7 +1,5 @@
+ #![allow(missing_docs)]
+-pub mod playpen_editor;
+-
+ #[cfg(feature = "search")]
+ pub mod searcher;
+@@ -19,19 +17,8 @@ pub static PRINT_CSS: &[u8] = include_by
+ pub static VARIABLES_CSS: &[u8] = include_bytes!("css/variables.css");
+ pub static FAVICON: &[u8] = include_bytes!("favicon.png");
+ pub static JS: &[u8] = include_bytes!("book.js");
+-pub static HIGHLIGHT_JS: &[u8] = include_bytes!("highlight.js");
+ pub static TOMORROW_NIGHT_CSS: &[u8] = include_bytes!("tomorrow-night.css");
+-pub static HIGHLIGHT_CSS: &[u8] = include_bytes!("highlight.css");
+ pub static AYU_HIGHLIGHT_CSS: &[u8] = include_bytes!("ayu-highlight.css");
+-pub static CLIPBOARD_JS: &[u8] = include_bytes!("clipboard.min.js");
+-pub static FONT_AWESOME: &[u8] = include_bytes!("FontAwesome/css/font-awesome.min.css");
+-pub static FONT_AWESOME_EOT: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.eot");
+-pub static FONT_AWESOME_SVG: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.svg");
+-pub static FONT_AWESOME_TTF: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.ttf");
+-pub static FONT_AWESOME_WOFF: &[u8] = include_bytes!("FontAwesome/fonts/fontawesome-webfont.woff");
+-pub static FONT_AWESOME_WOFF2: &[u8] =
+-    include_bytes!("FontAwesome/fonts/fontawesome-webfont.woff2");
+-pub static FONT_AWESOME_OTF: &[u8] = include_bytes!("FontAwesome/fonts/FontAwesome.otf");
+ /// The `Theme` struct should be used instead of the static variables because
+ /// the `new()` method will look if the user has a theme directory in their
+@@ -49,11 +36,8 @@ pub struct Theme {
+     pub variables_css: Vec<u8>,
+     pub favicon: Vec<u8>,
+     pub js: Vec<u8>,
+-    pub highlight_css: Vec<u8>,
+     pub tomorrow_night_css: Vec<u8>,
+     pub ayu_highlight_css: Vec<u8>,
+-    pub highlight_js: Vec<u8>,
+-    pub clipboard_js: Vec<u8>,
+ }
+ impl Theme {
+@@ -82,9 +66,6 @@ impl Theme {
+                     &mut theme.variables_css,
+                 ),
+                 (theme_dir.join("favicon.png"), &mut theme.favicon),
+-                (theme_dir.join("highlight.js"), &mut theme.highlight_js),
+-                (theme_dir.join("clipboard.min.js"), &mut theme.clipboard_js),
+-                (theme_dir.join("highlight.css"), &mut theme.highlight_css),
+                 (
+                     theme_dir.join("tomorrow-night.css"),
+                     &mut theme.tomorrow_night_css,
+@@ -121,11 +102,8 @@ impl Default for Theme {
+             variables_css: VARIABLES_CSS.to_owned(),
+             favicon: FAVICON.to_owned(),
+             js: JS.to_owned(),
+-            highlight_css: HIGHLIGHT_CSS.to_owned(),
+             tomorrow_night_css: TOMORROW_NIGHT_CSS.to_owned(),
+             ayu_highlight_css: AYU_HIGHLIGHT_CSS.to_owned(),
+-            highlight_js: HIGHLIGHT_JS.to_owned(),
+-            clipboard_js: CLIPBOARD_JS.to_owned(),
+         }
+     }
+ }
+@@ -175,11 +153,8 @@ mod tests {
+             "css/print.css",
+             "css/variables.css",
+             "book.js",
+-            "highlight.js",
+             "tomorrow-night.css",
+-            "highlight.css",
+             "ayu-highlight.css",
+-            "clipboard.min.js",
+         ];
+         let temp = TempFileBuilder::new().prefix("mdbook-").tempdir().unwrap();
+@@ -201,11 +176,8 @@ mod tests {
+             variables_css: Vec::new(),
+             favicon: Vec::new(),
+             js: Vec::new(),
+-            highlight_css: Vec::new(),
+             tomorrow_night_css: Vec::new(),
+             ayu_highlight_css: Vec::new(),
+-            highlight_js: Vec::new(),
+-            clipboard_js: Vec::new(),
+         };
+         assert_eq!(got, empty);
+--- a/vendor/mdbook/src/theme/searcher/mod.rs  2020-03-10 01:00:20.000000000 +0100
++++ b/vendor/mdbook/src/theme/searcher/mod.rs  2020-03-23 11:46:30.657963205 +0100
+@@ -2,5 +2,3 @@
+ //! the "search" cargo feature is disabled.
+ pub static JS: &[u8] = include_bytes!("searcher.js");
+-pub static MARK_JS: &[u8] = include_bytes!("mark.min.js");
+-pub static ELASTICLUNR_JS: &[u8] = include_bytes!("elasticlunr.min.js");
diff --git a/patches/d-add-soname.patch b/patches/d-add-soname.patch
new file mode 100644 (file)
index 0000000..fd37476
--- /dev/null
@@ -0,0 +1,36 @@
+Description: Set DT_SONAME when building dylibs
+ In Rust, library filenames include a version-specific hash to help
+ the run-time linker find the correct version.  Unlike in C/C++, the
+ compiler looks for all libraries matching a glob that ignores the
+ hash and reads embedded metadata to work out versions, etc.
+ .
+ The upshot is that there is no need for the usual "libfoo.so ->
+ libfoo-1.2.3.so" symlink common with C/C++ when building with Rust,
+ and no need to communicate an alternate filename to use at run-time
+ vs compile time.  If linking to a Rust dylib from C/C++ however, a
+ "libfoo.so -> libfoo-$hash.so" symlink may well be useful and in
+ this case DT_SONAME=libfoo-$hash.so would be required.  More
+ mundanely, various tools (eg: dpkg-shlibdeps) complain if they don't
+ find DT_SONAME on shared libraries in public directories.
+ .
+ This patch passes -Wl,-soname=$outfile when building dylibs (and
+ using a GNU linker).
+Author: Angus Lees <gus@debian.org>
+Forwarded: no
+
+--- a/src/librustc_codegen_ssa/back/link.rs
++++ b/src/librustc_codegen_ssa/back/link.rs
+@@ -1558,6 +1558,13 @@
+     // OBJECT-FILES-NO, AUDIT-ORDER
+     add_rpath_args(cmd, sess, codegen_results, out_filename);
++    if (crate_type == config::CrateType::Dylib || crate_type == config::CrateType::Cdylib)
++       && sess.target.target.options.linker_is_gnu {
++        let filename = String::from(out_filename.file_name().unwrap().to_str().unwrap());
++        let soname = [String::from("-Wl,-soname=") + &filename];
++        cmd.args(&soname);
++    }
++
+     // OBJECT-FILES-MAYBE, CUSTOMIZATION-POINT
+     add_user_defined_link_args(cmd, sess, codegen_results);
diff --git a/patches/d-custom-debuginfo-path.patch b/patches/d-custom-debuginfo-path.patch
new file mode 100644 (file)
index 0000000..4716099
--- /dev/null
@@ -0,0 +1,15 @@
+--- a/src/bootstrap/lib.rs
++++ b/src/bootstrap/lib.rs
+@@ -747,10 +747,9 @@
+         match which {
+             GitRepo::Rustc => {
+-                let sha = self.rust_sha().unwrap_or(channel::CFG_RELEASE_NUM);
+-                Some(format!("/rustc/{}", sha))
++                Some(format!("/usr/src/rustc-{}", channel::CFG_RELEASE_NUM))
+             }
+-            GitRepo::Llvm => Some(String::from("/rustc/llvm")),
++            GitRepo::Llvm => panic!("GitRepo::Llvm unsupported on Debian"),
+         }
+     }
diff --git a/patches/d-disable-cargo-vendor.patch b/patches/d-disable-cargo-vendor.patch
new file mode 100644 (file)
index 0000000..34f47cf
--- /dev/null
@@ -0,0 +1,20 @@
+Description: Don't check for cargo-vendor when building from (Debian's) git
+Author: Matthijs van Otterdijk <matthijs@wirevirt.net>
+Forwarded: not-needed
+---
+Index: rust/src/bootstrap/dist.rs
+===================================================================
+--- rust.orig/src/bootstrap/dist.rs
++++ rust/src/bootstrap/dist.rs
+@@ -1084,7 +1084,10 @@ impl Step for PlainSourceTarball {
+         }
+         // If we're building from git sources, we need to vendor a complete distribution.
+-        if builder.rust_info.is_git() {
++        //
++        // Debian: disabling this block because the debian package is also in a git
++        //         repository, but cargo-vendor should not be installed or run.
++        if false && builder.rust_info.is_git() {
+             // Vendor all Cargo dependencies
+             let mut cmd = Command::new(&builder.initial_cargo);
+             cmd.arg("vendor").current_dir(&plain_dst_src);
diff --git a/patches/d-dont-download-stage0.patch b/patches/d-dont-download-stage0.patch
new file mode 100644 (file)
index 0000000..42d067b
--- /dev/null
@@ -0,0 +1,51 @@
+Description: Don't download SHA256 if it's already available locally
+ In Debian we provide the stage0 tarballs as a separate component so that the
+ buildds don't need to access the network during the build.
+Author: Ximin Luo <infinity0@debian.org>
+Forwarded: not-needed
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: rust/src/bootstrap/bootstrap.py
+===================================================================
+--- rust.orig/src/bootstrap/bootstrap.py
++++ rust/src/bootstrap/bootstrap.py
+@@ -14,16 +14,18 @@ import tempfile
+ from time import time
+-def get(url, path, verbose=False):
++def get(url, path, verbose=False, use_local_hash_if_present=True):
+     suffix = '.sha256'
+     sha_url = url + suffix
+     with tempfile.NamedTemporaryFile(delete=False) as temp_file:
+         temp_path = temp_file.name
+-    with tempfile.NamedTemporaryFile(suffix=suffix, delete=False) as sha_file:
+-        sha_path = sha_file.name
++    sha_path = path + suffix
+     try:
+-        download(sha_path, sha_url, False, verbose)
++        if use_local_hash_if_present and os.path.exists(sha_path):
++            print("using already-download file " + sha_path)
++        else:
++            download(sha_path, sha_url, False, verbose)
+         if os.path.exists(path):
+             if verify(path, sha_path, False):
+                 if verbose:
+@@ -41,7 +43,6 @@ def get(url, path, verbose=False):
+             print("moving {} to {}".format(temp_path, path))
+         shutil.move(temp_path, path)
+     finally:
+-        delete_if_present(sha_path, verbose)
+         delete_if_present(temp_path, verbose)
+@@ -419,7 +420,7 @@ class RustBuild(object):
+         url = "{}/dist/{}".format(self._download_url, date)
+         tarball = os.path.join(rustc_cache, filename)
+-        if not os.path.exists(tarball):
++        if True:
+             get("{}/{}".format(url, filename), tarball, verbose=self.verbose)
+         unpack(tarball, tarball_suffix, self.bin_root(), match=pattern, verbose=self.verbose)
diff --git a/patches/d-fix-mips64el-bootstrap.patch b/patches/d-fix-mips64el-bootstrap.patch
new file mode 100644 (file)
index 0000000..77aedda
--- /dev/null
@@ -0,0 +1,14 @@
+Bug: https://github.com/rust-lang/rust/issues/52108
+Index: rust/src/bootstrap/bootstrap.py
+===================================================================
+--- rust.orig/src/bootstrap/bootstrap.py
++++ rust/src/bootstrap/bootstrap.py
+@@ -681,6 +681,8 @@ class RustBuild(object):
+         # preserve existing RUSTFLAGS
+         env.setdefault("RUSTFLAGS", "")
+         env["RUSTFLAGS"] += " -Cdebuginfo=2"
++        if self.build_triple().startswith('mips'):
++            env["RUSTFLAGS"] += " -Cllvm-args=-mxgot"
+         build_section = "target.{}".format(self.build_triple())
+         target_features = []
diff --git a/patches/d-host-duplicates.patch b/patches/d-host-duplicates.patch
new file mode 100644 (file)
index 0000000..af8596a
--- /dev/null
@@ -0,0 +1,35 @@
+Description: Work around #842634 on some machines, e.g. Debian porterboxes
+ This should remain commented-out in debian/patches/series, it's not needed everywhere
+Author: Ximin Luo <infinity0@debian.org>
+Forwarded: not-needed
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/src/libstd/sys_common/net.rs
++++ b/src/libstd/sys_common/net.rs
+@@ -659,26 +659,3 @@
+         res.field(name, &self.inner.as_inner()).finish()
+     }
+ }
+-
+-#[cfg(test)]
+-mod tests {
+-    use super::*;
+-    use crate::collections::HashMap;
+-
+-    #[test]
+-    fn no_lookup_host_duplicates() {
+-        let mut addrs = HashMap::new();
+-        let lh = match LookupHost::try_from(("localhost", 0)) {
+-            Ok(lh) => lh,
+-            Err(e) => panic!("couldn't resolve `localhost': {}", e),
+-        };
+-        for sa in lh {
+-            *addrs.entry(sa).or_insert(0) += 1;
+-        }
+-        assert_eq!(
+-            addrs.iter().filter(|&(_, &v)| v > 1).collect::<Vec<_>>(),
+-            vec![],
+-            "There should be no duplicate localhost entries"
+-        );
+-    }
+-}
diff --git a/patches/d-i686-baseline.patch b/patches/d-i686-baseline.patch
new file mode 100644 (file)
index 0000000..346b76d
--- /dev/null
@@ -0,0 +1,13 @@
+Index: rust/src/librustc_target/spec/i686_unknown_linux_gnu.rs
+===================================================================
+--- rust.orig/src/librustc_target/spec/i686_unknown_linux_gnu.rs
++++ rust/src/librustc_target/spec/i686_unknown_linux_gnu.rs
+@@ -2,7 +2,7 @@ use crate::spec::{LinkerFlavor, Target,
+ pub fn target() -> TargetResult {
+     let mut base = super::linux_base::opts();
+-    base.cpu = "pentium4".to_string();
++    base.cpu = "pentiumpro".to_string();
+     base.max_atomic_width = Some(64);
+     base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string());
+     base.stack_probes = true;
diff --git a/patches/d-ignore-avx-44056.patch b/patches/d-ignore-avx-44056.patch
new file mode 100644 (file)
index 0000000..bffda4d
--- /dev/null
@@ -0,0 +1,12 @@
+Bug: https://github.com/rust-lang/rust/pull/55667
+Index: rust/src/test/ui/issues/issue-44056.rs
+===================================================================
+--- rust.orig/src/test/ui/issues/issue-44056.rs
++++ rust/src/test/ui/issues/issue-44056.rs
+@@ -1,5 +1,5 @@
+ // build-pass (FIXME(55996): should be run on targets supporting avx)
+-// only-x86_64
++// ignore-test
+ // no-prefer-dynamic
+ // compile-flags: -Ctarget-feature=+avx -Clto
diff --git a/patches/d-no-jemalloc.patch b/patches/d-no-jemalloc.patch
new file mode 100644 (file)
index 0000000..d6225d3
--- /dev/null
@@ -0,0 +1,17 @@
+Index: rust/src/rustc/Cargo.toml
+===================================================================
+--- rust.orig/src/rustc/Cargo.toml
++++ rust/src/rustc/Cargo.toml
+@@ -14,12 +14,5 @@ rustc_driver = { path = "../librustc_dri
+ # Make sure rustc_codegen_ssa ends up in the sysroot, because this
+ # crate is intended to be used by codegen backends, which may not be in-tree.
+ rustc_codegen_ssa = { path = "../librustc_codegen_ssa" }
+-
+-[dependencies.jemalloc-sys]
+-version = '0.3.0'
+-optional = true
+-features = ['unprefixed_malloc_on_supported_platforms']
+-
+ [features]
+-jemalloc = ['jemalloc-sys']
+ llvm = ['rustc_driver/llvm']
diff --git a/patches/d-prefer-dynamic.patch b/patches/d-prefer-dynamic.patch
new file mode 100644 (file)
index 0000000..13bb429
--- /dev/null
@@ -0,0 +1,18 @@
+Description: Prefer dynamic linking (currently disabled, not applied)
+ As per Debian policy, we basically revert
+ https://github.com/rust-lang/rfcs/blob/master/text/0404-change-prefer-dynamic.md
+ TODO: this does not yet work: https://github.com/rust-lang/rust/issues/43289
+ Perhaps a better method would be to modify dh-cargo instead of rustc
+Author: Ximin Luo <infinity0@debian.org>
+Forwarded: not-needed
+--- a/src/librustc/session/config.rs
++++ b/src/librustc/session/config.rs
+@@ -846,7 +846,7 @@
+         "don't run LLVM's SLP vectorization pass"),
+     soft_float: bool = (false, parse_bool, [TRACKED],
+         "use soft float ABI (*eabihf targets only)"),
+-    prefer_dynamic: bool = (false, parse_bool, [TRACKED],
++    prefer_dynamic: bool = (true, parse_bool, [TRACKED],
+         "prefer dynamic linking to static linking"),
+     no_integrated_as: bool = (false, parse_bool, [TRACKED],
+         "use an external assembler rather than LLVM's integrated one"),
diff --git a/patches/d-read-beta-version-from-file.patch b/patches/d-read-beta-version-from-file.patch
new file mode 100644 (file)
index 0000000..e2a4bbb
--- /dev/null
@@ -0,0 +1,40 @@
+Index: rust/src/bootstrap/lib.rs
+===================================================================
+--- rust.orig/src/bootstrap/lib.rs
++++ rust/src/bootstrap/lib.rs
+@@ -929,29 +929,13 @@ impl Build {
+             return s;
+         }
+-        let beta = output(
+-            Command::new("git").arg("ls-remote").arg("origin").arg("beta").current_dir(&self.src),
+-        );
+-        let beta = beta.trim().split_whitespace().next().unwrap();
+-        let master = output(
+-            Command::new("git").arg("ls-remote").arg("origin").arg("master").current_dir(&self.src),
+-        );
+-        let master = master.trim().split_whitespace().next().unwrap();
+-
+-        // Figure out where the current beta branch started.
+-        let base = output(
+-            Command::new("git").arg("merge-base").arg(beta).arg(master).current_dir(&self.src),
+-        );
+-        let base = base.trim();
+-
+-        // Next figure out how many merge commits happened since we branched off
+-        // beta. That's our beta number!
++        // Debian: read beta number from "version" file, this is only available
++        // in the rustc upstream tarballs and not their git
+         let count = output(
+-            Command::new("git")
+-                .arg("rev-list")
+-                .arg("--count")
+-                .arg("--merges")
+-                .arg(format!("{}...HEAD", base))
++            Command::new("sed")
++                .arg("-re")
++                .arg(r"s/[0-9]+.[0-9]+.[0-9]+-beta.([0-9]+) \(.*\)/\1/g")
++                .arg("version")
+                 .current_dir(&self.src),
+         );
+         let n = count.trim().parse().unwrap();
diff --git a/patches/d-rust-gdb-paths b/patches/d-rust-gdb-paths
new file mode 100644 (file)
index 0000000..c9f62c5
--- /dev/null
@@ -0,0 +1,21 @@
+Description: Hardcode GDB python module directory
+ Debian package installs python modules into a fixed directory, so
+ just hardcode path in wrapper script.
+Author: Angus Lees <gus@debian.org>
+Forwarded: not-needed
+
+--- a/src/etc/rust-gdb
++++ b/src/etc/rust-gdb
+@@ -11,8 +11,10 @@
+ fi
+ # Find out where the pretty printer Python module is
+-RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)"
+-GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc"
++#RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)"
++#GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc"
++# We can just hardcode this on Debian, and remove the rustc dependency
++GDB_PYTHON_MODULE_DIRECTORY="/usr/share/rust-gdb"
+ # Run GDB with the additional arguments that load the pretty printers
+ # Set the environment variable `RUST_GDB` to overwrite the call to a
diff --git a/patches/d-rust-lldb-paths b/patches/d-rust-lldb-paths
new file mode 100644 (file)
index 0000000..b87fe62
--- /dev/null
@@ -0,0 +1,26 @@
+Description: Hardcode LLDB python module directory
+ Debian package installs python modules into a fixed directory, so
+ just hardcode path in wrapper script.
+Author: Angus Lees <gus@debian.org>
+Forwarded: not-needed
+
+--- a/src/etc/rust-lldb
++++ b/src/etc/rust-lldb
+@@ -10,7 +10,7 @@
+ RUSTC_SYSROOT=$(rustc --print sysroot)
+ RUST_LLDB="$RUSTC_SYSROOT/lib/rustlib/$host/bin/lldb"
+-lldb=lldb
++lldb=lldb-10
+ if [ -f "$RUST_LLDB" ]; then
+     lldb="$RUST_LLDB"
+ else
+@@ -31,7 +31,7 @@
+ fi
+ # Prepare commands that will be loaded before any file on the command line has been loaded
+-script_import="command script import \"$RUSTC_SYSROOT/lib/rustlib/etc/lldb_rust_formatters.py\""
++script_import="command script import \"$RUSTC_SYSROOT/share/rust-lldb/lldb_rust_formatters.py\""
+ category_definition="type summary add --no-value --python-function lldb_rust_formatters.print_val -x \".*\" --category Rust"
+ category_enable="type category enable Rust"
diff --git a/patches/d-use-local-css.patch b/patches/d-use-local-css.patch
new file mode 100644 (file)
index 0000000..d2c8ccf
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/src/bootstrap/doc.rs
++++ b/src/bootstrap/doc.rs
+@@ -361,15 +361,11 @@
+                 .arg(&builder.src.join("src/doc/index.md"))
+                 .arg("--markdown-playground-url")
+                 .arg("https://play.rust-lang.org/")
++                .arg("--markdown-css")
++                .arg("rust.css")
+                 .arg("-o")
+                 .arg(&out)
+                 .arg(&path);
+-
+-            if filename == "not_found.md" {
+-                cmd.arg("--markdown-css").arg("https://doc.rust-lang.org/rust.css");
+-            } else {
+-                cmd.arg("--markdown-css").arg("rust.css");
+-            }
+             builder.run(&mut cmd);
+         }
diff --git a/patches/d-use-system-compiler-rt.patch b/patches/d-use-system-compiler-rt.patch
new file mode 100644 (file)
index 0000000..22843ae
--- /dev/null
@@ -0,0 +1,40 @@
+Description: Use system compiler-rt from clang
+Forwarded: not-needed
+--- a/src/bootstrap/compile.rs
++++ b/src/bootstrap/compile.rs
+@@ -200,6 +200,12 @@
+         let mut features = builder.std_features();
+         features.push_str(&compiler_builtins_c_feature);
++        // In Debian this is always available
++        let llvm_config = builder.ensure(native::Llvm {
++            target: builder.config.build,
++            emscripten: false,
++        });
++        cargo.env("LLVM_CONFIG", llvm_config);
+         if compiler.stage != 0 && builder.config.sanitizers {
+             // This variable is used by the sanitizer runtime crates, e.g.
+             // rustc_lsan, to build the sanitizer runtime from C code
+@@ -208,11 +214,6 @@
+             // missing
+             // We also only build the runtimes when --enable-sanitizers (or its
+             // config.toml equivalent) is used
+-            let llvm_config = builder.ensure(native::Llvm {
+-                target: builder.config.build,
+-                emscripten: false,
+-            });
+-            cargo.env("LLVM_CONFIG", llvm_config);
+             cargo.env("RUSTC_BUILD_SANITIZERS", "1");
+         }
+--- a/vendor/compiler_builtins/Cargo.toml
++++ b/vendor/compiler_builtins/Cargo.toml
+@@ -49,7 +49,7 @@
+ # LLVM_CONFIG or CLANG (more reliable) must be set.
+ c-system = []
+-c = ["c-vendor"]
++c = ["c-system"]
+ compiler-builtins = []
+ default = ["compiler-builtins"]
+ mangled-names = []
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..e8aca54
--- /dev/null
@@ -0,0 +1,48 @@
+# Patches for upstream
+
+# pending, or forwarded
+u-reproducible-build.patch
+u-make-tests-work-without-rpath.patch
+u-tests-ignore-arm.patch
+u-mips-fixes.diff
+#u-allow-system-compiler-rt.patch
+u-fix-exec.patch
+u-ignore-endian.patch
+u-249a46f56cbbb6ffecb726d07163741093da6406.patch
+u-fb9fa5ba3ee08171e7d2ff35d28ec0dd93b0287b.patch
+u-1629fed4c0bdc6d3246ea63a91f600bcb8874626.patch
+u-5ceff6b96af9a21e044545b9e064433feccaf659.patch
+u-c0c3327ade8b0caa3043425ee45842c86fbd4f76.patch
+u-1f0895162ba5a783d4d73d5c263552eaca9343b3.patch
+u-9abdb6db6f7d50761a701fe17d384d7ea49b015d.patch
+
+# not forwarded, or forwarded but unlikely to be merged
+u-rustc-llvm-cross-flags.patch
+u-reproducible-dl-stage0.patch
+
+# Debian-specific patches, not suitable for upstream
+# Patches needed by debian/prune-unused-deps
+d-0000-ignore-removed-submodules.patch
+d-0001-disable-miniz.patch
+d-0002-pkg-config-no-special-snowflake.patch
+d-0003-mdbook-strip-embedded-libs.patch
+# Other patches needed by the full Debian build
+#d-use-system-compiler-rt.patch
+d-custom-debuginfo-path.patch
+d-disable-cargo-vendor.patch
+d-rust-gdb-paths
+d-rust-lldb-paths
+d-add-soname.patch
+d-dont-download-stage0.patch
+d-read-beta-version-from-file.patch
+d-ignore-avx-44056.patch
+d-i686-baseline.patch
+d-no-jemalloc.patch
+d-use-local-css.patch
+
+# Porter fixes under discussion, not suitable for upstreaming
+# as-is but a proper fix is being discussed
+d-fix-mips64el-bootstrap.patch
+
+# Work around for some porterboxes, keep this commented
+d-host-duplicates.patch
diff --git a/patches/u-1629fed4c0bdc6d3246ea63a91f600bcb8874626.patch b/patches/u-1629fed4c0bdc6d3246ea63a91f600bcb8874626.patch
new file mode 100644 (file)
index 0000000..2809300
--- /dev/null
@@ -0,0 +1,32 @@
+From 1629fed4c0bdc6d3246ea63a91f600bcb8874626 Mon Sep 17 00:00:00 2001
+From: Yuki Okushi <huyuumi.dev@gmail.com>
+Date: Fri, 31 Jul 2020 09:03:14 +0900
+Subject: [PATCH] Presort restrictions to make output consistent
+
+---
+ src/librustc_typeck/check/method/suggest.rs | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs
+index ae2cf6daf5350..e69102d1995d3 100644
+--- a/src/librustc_typeck/check/method/suggest.rs
++++ b/src/librustc_typeck/check/method/suggest.rs
+@@ -678,6 +678,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
+                         .collect::<Vec<(usize, String)>>();
+                     for ((span, empty_where), obligations) in type_params.into_iter() {
+                         restrict_type_params = true;
++                        // #74886: Sort here so that the output is always the same.
++                        let mut obligations = obligations.into_iter().collect::<Vec<_>>();
++                        obligations.sort();
+                         err.span_suggestion_verbose(
+                             span,
+                             &format!(
+@@ -688,7 +691,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
+                             format!(
+                                 "{} {}",
+                                 if empty_where { " where" } else { "," },
+-                                obligations.into_iter().collect::<Vec<_>>().join(", ")
++                                obligations.join(", ")
+                             ),
+                             Applicability::MaybeIncorrect,
+                         );
diff --git a/patches/u-1f0895162ba5a783d4d73d5c263552eaca9343b3.patch b/patches/u-1f0895162ba5a783d4d73d5c263552eaca9343b3.patch
new file mode 100644 (file)
index 0000000..3e8ae0c
--- /dev/null
@@ -0,0 +1,116 @@
+From 1f0895162ba5a783d4d73d5c263552eaca9343b3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= <tomasz.miasko@gmail.com>
+Date: Sun, 14 Jun 2020 00:00:00 +0000
+Subject: [PATCH] Avoid forming references to an uninitialized memory in
+ DroplessArena
+
+Return a pointer from `alloc_raw` instead of a slice. There is no
+practical use for slice as a return type and changing it to a pointer
+avoids forming references to an uninitialized memory.
+---
+ src/librustc_arena/lib.rs      | 25 +++++++++++--------------
+ src/librustc_middle/ty/list.rs |  2 +-
+ 2 files changed, 12 insertions(+), 15 deletions(-)
+
+--- a/src/libarena/lib.rs
++++ b/src/libarena/lib.rs
+@@ -375,7 +375,7 @@
+     /// current memory chunk. Returns `None` if there is no free space left to
+     /// satisfy the request.
+     #[inline]
+-    fn alloc_raw_without_grow(&self, bytes: usize, align: usize) -> Option<&mut [u8]> {
++    fn alloc_raw_without_grow(&self, bytes: usize, align: usize) -> Option<*mut u8> {
+         let ptr = self.ptr.get() as usize;
+         let end = self.end.get() as usize;
+         // The allocation request fits into the current chunk iff:
+@@ -391,14 +391,14 @@
+         let new_ptr = aligned.checked_add(bytes)?;
+         if new_ptr <= end {
+             self.ptr.set(new_ptr as *mut u8);
+-            unsafe { Some(slice::from_raw_parts_mut(aligned as *mut u8, bytes)) }
++            Some(aligned as *mut u8)
+         } else {
+             None
+         }
+     }
+     #[inline]
+-    pub fn alloc_raw(&self, bytes: usize, align: usize) -> &mut [u8] {
++    pub fn alloc_raw(&self, bytes: usize, align: usize) -> *mut u8 {
+         assert!(bytes != 0);
+         loop {
+             if let Some(a) = self.alloc_raw_without_grow(bytes, align) {
+@@ -414,7 +414,7 @@
+     pub fn alloc<T>(&self, object: T) -> &mut T {
+         assert!(!mem::needs_drop::<T>());
+-        let mem = self.alloc_raw(mem::size_of::<T>(), mem::align_of::<T>()) as *mut _ as *mut T;
++        let mem = self.alloc_raw(mem::size_of::<T>(), mem::align_of::<T>()) as *mut T;
+         unsafe {
+             // Write into uninitialized memory.
+@@ -439,13 +439,11 @@
+         assert!(mem::size_of::<T>() != 0);
+         assert!(!slice.is_empty());
+-        let mem = self.alloc_raw(slice.len() * mem::size_of::<T>(), mem::align_of::<T>()) as *mut _
+-            as *mut T;
++        let mem = self.alloc_raw(slice.len() * mem::size_of::<T>(), mem::align_of::<T>()) as *mut T;
+         unsafe {
+-            let arena_slice = slice::from_raw_parts_mut(mem, slice.len());
+-            arena_slice.copy_from_slice(slice);
+-            arena_slice
++            mem.copy_from_nonoverlapping(slice.as_ptr(), slice.len());
++            slice::from_raw_parts_mut(mem, slice.len())
+         }
+     }
+@@ -488,7 +486,7 @@
+                     return &mut [];
+                 }
+                 let size = len.checked_mul(mem::size_of::<T>()).unwrap();
+-                let mem = self.alloc_raw(size, mem::align_of::<T>()) as *mut _ as *mut T;
++                let mem = self.alloc_raw(size, mem::align_of::<T>()) as *mut T;
+                 unsafe { self.write_from_iter(iter, len, mem) }
+             }
+             (_, _) => {
+@@ -503,7 +501,7 @@
+                         let len = vec.len();
+                         let start_ptr = self
+                             .alloc_raw(len * mem::size_of::<T>(), mem::align_of::<T>())
+-                            as *mut _ as *mut T;
++                            as *mut T;
+                         vec.as_ptr().copy_to_nonoverlapping(start_ptr, len);
+                         vec.set_len(0);
+                         slice::from_raw_parts_mut(start_ptr, len)
+@@ -547,8 +545,7 @@
+ impl DropArena {
+     #[inline]
+     pub unsafe fn alloc<T>(&self, object: T) -> &mut T {
+-        let mem =
+-            self.arena.alloc_raw(mem::size_of::<T>(), mem::align_of::<T>()) as *mut _ as *mut T;
++        let mem = self.arena.alloc_raw(mem::size_of::<T>(), mem::align_of::<T>()) as *mut T;
+         // Write into uninitialized memory.
+         ptr::write(mem, object);
+         let result = &mut *mem;
+@@ -571,7 +568,7 @@
+         let start_ptr = self
+             .arena
+             .alloc_raw(len.checked_mul(mem::size_of::<T>()).unwrap(), mem::align_of::<T>())
+-            as *mut _ as *mut T;
++            as *mut T;
+         let mut destructors = self.destructors.borrow_mut();
+         // Reserve space for the destructors so we can't panic while adding them
+--- a/src/librustc_middle/ty/list.rs
++++ b/src/librustc_middle/ty/list.rs
+@@ -55,7 +55,7 @@
+             .dropless
+             .alloc_raw(size, cmp::max(mem::align_of::<T>(), mem::align_of::<usize>()));
+         unsafe {
+-            let result = &mut *(mem.as_mut_ptr() as *mut List<T>);
++            let result = &mut *(mem as *mut List<T>);
+             // Write the length
+             result.len = slice.len();
diff --git a/patches/u-249a46f56cbbb6ffecb726d07163741093da6406.patch b/patches/u-249a46f56cbbb6ffecb726d07163741093da6406.patch
new file mode 100644 (file)
index 0000000..ee09d4d
--- /dev/null
@@ -0,0 +1,35 @@
+From 249a46f56cbbb6ffecb726d07163741093da6406 Mon Sep 17 00:00:00 2001
+From: Yerkebulan Tulibergenov <yerkebulan@gmail.com>
+Date: Sat, 13 Jun 2020 00:41:39 -0700
+Subject: [PATCH] pretty/asm.rs should only be tested for x86_64 and not
+ AArch64
+
+---
+ src/test/pretty/asm.pp | 1 +
+ src/test/pretty/asm.rs | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/src/test/pretty/asm.pp b/src/test/pretty/asm.pp
+index 1723e1cc1cb09..4903050e08ed2 100644
+--- a/src/test/pretty/asm.pp
++++ b/src/test/pretty/asm.pp
+@@ -8,6 +8,7 @@
+ // pretty-mode:expanded
+ // pp-exact:asm.pp
++// only-x86_64
+ pub fn main() {
+     let a: i32;
+diff --git a/src/test/pretty/asm.rs b/src/test/pretty/asm.rs
+index 9812f1d97e5ff..12c32e6721b33 100644
+--- a/src/test/pretty/asm.rs
++++ b/src/test/pretty/asm.rs
+@@ -2,6 +2,7 @@
+ // pretty-mode:expanded
+ // pp-exact:asm.pp
++// only-x86_64
+ pub fn main() {
+     let a: i32;
diff --git a/patches/u-5ceff6b96af9a21e044545b9e064433feccaf659.patch b/patches/u-5ceff6b96af9a21e044545b9e064433feccaf659.patch
new file mode 100644 (file)
index 0000000..125e16d
--- /dev/null
@@ -0,0 +1,22 @@
+From 5ceff6b96af9a21e044545b9e064433feccaf659 Mon Sep 17 00:00:00 2001
+From: Nicholas Nethercote <nnethercote@mozilla.com>
+Date: Thu, 21 May 2020 10:36:32 +1000
+Subject: [PATCH] Fix off-by-one error in `DroplessArena::alloc_raw`.
+
+This causes unnecessary calls to `grow` when the allocation would fit
+exactly in the remaining space.
+---
+ src/librustc_arena/lib.rs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/libarena/lib.rs
++++ b/src/libarena/lib.rs
+@@ -386,7 +386,7 @@
+             self.align(align);
+             let future_end = intrinsics::arith_offset(self.ptr.get(), bytes as isize);
+-            if (future_end as *mut u8) >= self.end.get() {
++            if (future_end as *mut u8) > self.end.get() {
+                 self.grow(bytes);
+             }
diff --git a/patches/u-9abdb6db6f7d50761a701fe17d384d7ea49b015d.patch b/patches/u-9abdb6db6f7d50761a701fe17d384d7ea49b015d.patch
new file mode 100644 (file)
index 0000000..650e909
--- /dev/null
@@ -0,0 +1,87 @@
+From 9abdb6db6f7d50761a701fe17d384d7ea49b015d Mon Sep 17 00:00:00 2001
+From: Amanieu d'Antras <amanieu@gmail.com>
+Date: Thu, 6 Aug 2020 19:52:15 +0100
+Subject: [PATCH] Fix ICE when using asm! on an unsupported architecture
+
+Fixes #75220
+---
+ src/librustc_ast_lowering/expr.rs              |  2 +-
+ src/test/ui/asm/bad-arch.rs                    | 18 ++++++++++++++++++
+ src/test/ui/asm/bad-arch.stderr                |  8 ++++++++
+ src/test/ui/feature-gates/feature-gate-asm.rs  |  2 +-
+ src/test/ui/feature-gates/feature-gate-asm2.rs |  2 +-
+ 5 files changed, 29 insertions(+), 3 deletions(-)
+ create mode 100644 src/test/ui/asm/bad-arch.rs
+ create mode 100644 src/test/ui/asm/bad-arch.stderr
+
+diff --git a/src/librustc_ast_lowering/expr.rs b/src/librustc_ast_lowering/expr.rs
+index abd5df537db99..f9e54903a661a 100644
+--- a/src/librustc_ast_lowering/expr.rs
++++ b/src/librustc_ast_lowering/expr.rs
+@@ -1067,7 +1067,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
+             .collect();
+         // Stop if there were any errors when lowering the register classes
+-        if operands.len() != asm.operands.len() {
++        if operands.len() != asm.operands.len() || sess.asm_arch.is_none() {
+             return hir::ExprKind::Err;
+         }
+diff --git a/src/test/ui/asm/bad-arch.rs b/src/test/ui/asm/bad-arch.rs
+new file mode 100644
+index 0000000000000..eeeeb17dd4f3f
+--- /dev/null
++++ b/src/test/ui/asm/bad-arch.rs
+@@ -0,0 +1,18 @@
++// compile-flags: --target wasm32-unknown-unknown
++
++#![feature(no_core, lang_items, rustc_attrs)]
++#![no_core]
++
++#[rustc_builtin_macro]
++macro_rules! asm {
++    () => {};
++}
++#[lang = "sized"]
++trait Sized {}
++
++fn main() {
++    unsafe {
++        asm!("");
++        //~^ ERROR asm! is unsupported on this target
++    }
++}
+diff --git a/src/test/ui/asm/bad-arch.stderr b/src/test/ui/asm/bad-arch.stderr
+new file mode 100644
+index 0000000000000..daccc46c6e371
+--- /dev/null
++++ b/src/test/ui/asm/bad-arch.stderr
+@@ -0,0 +1,8 @@
++error[E0472]: asm! is unsupported on this target
++  --> $DIR/bad-arch.rs:15:9
++   |
++LL |         asm!("");
++   |         ^^^^^^^^^
++
++error: aborting due to previous error
++
+diff --git a/src/test/ui/feature-gates/feature-gate-asm.rs b/src/test/ui/feature-gates/feature-gate-asm.rs
+index 753e924f00495..59f04372fff19 100644
+--- a/src/test/ui/feature-gates/feature-gate-asm.rs
++++ b/src/test/ui/feature-gates/feature-gate-asm.rs
+@@ -1,4 +1,4 @@
+-// ignore-emscripten
++// only-x86_64
+ fn main() {
+     unsafe {
+diff --git a/src/test/ui/feature-gates/feature-gate-asm2.rs b/src/test/ui/feature-gates/feature-gate-asm2.rs
+index e9349acb64394..aa63aff1c5e33 100644
+--- a/src/test/ui/feature-gates/feature-gate-asm2.rs
++++ b/src/test/ui/feature-gates/feature-gate-asm2.rs
+@@ -1,4 +1,4 @@
+-// ignore-emscripten
++// only-x86_64
+ fn main() {
+     unsafe {
diff --git a/patches/u-allow-system-compiler-rt.patch b/patches/u-allow-system-compiler-rt.patch
new file mode 100644 (file)
index 0000000..3bd874a
--- /dev/null
@@ -0,0 +1,327 @@
+Description: Support linking against system clang libs
+ Note: the above PR only covers the compiler_builtins crate, rustc itself also
+ needs patching as per below once that is accepted.
+Forwarded: https://github.com/rust-lang-nursery/compiler-builtins/pull/296
+--- a/vendor/compiler_builtins/Cargo.toml
++++ b/vendor/compiler_builtins/Cargo.toml
+@@ -43,7 +43,13 @@
+ optional = true
+ [features]
+-c = ["cc"]
++c-vendor = ["cc"]
++
++# Link against system clang_rt.* libraries.
++# LLVM_CONFIG or CLANG (more reliable) must be set.
++c-system = []
++
++c = ["c-vendor"]
+ compiler-builtins = []
+ default = ["compiler-builtins"]
+ mangled-names = []
+--- a/vendor/compiler_builtins/build.rs
++++ b/vendor/compiler_builtins/build.rs
+@@ -37,7 +37,7 @@
+     // mangling names though we assume that we're also in test mode so we don't
+     // build anything and we rely on the upstream implementation of compiler-rt
+     // functions
+-    if !cfg!(feature = "mangled-names") && cfg!(feature = "c") {
++    if !cfg!(feature = "mangled-names") && cfg!(any(feature = "c-vendor", feature = "c-system")) {
+         // Don't use a C compiler for these targets:
+         //
+         // * wasm32 - clang 8 for wasm is somewhat hard to come by and it's
+@@ -47,8 +47,10 @@
+         //   compiler nor is cc-rs ready for compilation to riscv (at this
+         //   time). This can probably be removed in the future
+         if !target.contains("wasm32") && !target.contains("nvptx") && !target.starts_with("riscv") {
+-            #[cfg(feature = "c")]
+-            c::compile(&llvm_target);
++            #[cfg(feature = "c-vendor")]
++            c_vendor::compile(&llvm_target);
++            #[cfg(feature = "c-system")]
++            c_system::compile(&llvm_target);
+         }
+     }
+@@ -70,17 +72,14 @@
+     }
+ }
+-#[cfg(feature = "c")]
+-mod c {
+-    extern crate cc;
+-
++#[cfg(any(feature = "c-vendor", feature = "c-system"))]
++mod sources {
+     use std::collections::BTreeMap;
+     use std::env;
+-    use std::path::PathBuf;
+-    struct Sources {
++    pub struct Sources {
+         // SYMBOL -> PATH TO SOURCE
+-        map: BTreeMap<&'static str, &'static str>,
++        pub map: BTreeMap<&'static str, &'static str>,
+     }
+     impl Sources {
+@@ -117,39 +116,11 @@
+         }
+     }
+-    /// Compile intrinsics from the compiler-rt C source code
+-    pub fn compile(llvm_target: &[&str]) {
++    pub fn get_sources(llvm_target: &[&str]) -> Sources {
+         let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap();
+         let target_env = env::var("CARGO_CFG_TARGET_ENV").unwrap();
+         let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
+         let target_vendor = env::var("CARGO_CFG_TARGET_VENDOR").unwrap();
+-        let cfg = &mut cc::Build::new();
+-
+-        cfg.warnings(false);
+-
+-        if target_env == "msvc" {
+-            // Don't pull in extra libraries on MSVC
+-            cfg.flag("/Zl");
+-
+-            // Emulate C99 and C++11's __func__ for MSVC prior to 2013 CTP
+-            cfg.define("__func__", Some("__FUNCTION__"));
+-        } else {
+-            // Turn off various features of gcc and such, mostly copying
+-            // compiler-rt's build system already
+-            cfg.flag("-fno-builtin");
+-            cfg.flag("-fvisibility=hidden");
+-            cfg.flag("-ffreestanding");
+-            // Avoid the following warning appearing once **per file**:
+-            // clang: warning: optimization flag '-fomit-frame-pointer' is not supported for target 'armv7' [-Wignored-optimization-argument]
+-            //
+-            // Note that compiler-rt's build system also checks
+-            //
+-            // `check_cxx_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG)`
+-            //
+-            // in https://github.com/rust-lang/compiler-rt/blob/c8fbcb3/cmake/config-ix.cmake#L19.
+-            cfg.flag_if_supported("-fomit-frame-pointer");
+-            cfg.define("VISIBILITY_HIDDEN", None);
+-        }
+         let mut sources = Sources::new();
+         sources.extend(&[
+@@ -411,6 +382,48 @@
+             sources.remove(&["__aeabi_cdcmp", "__aeabi_cfcmp"]);
+         }
++        sources
++    }
++}
++
++#[cfg(feature = "c-vendor")]
++mod c_vendor {
++    extern crate cc;
++
++    use std::env;
++    use std::path::PathBuf;
++    use sources;
++
++    /// Compile intrinsics from the compiler-rt C source code
++    pub fn compile(llvm_target: &[&str]) {
++        let target_env = env::var("CARGO_CFG_TARGET_ENV").unwrap();
++        let cfg = &mut cc::Build::new();
++        cfg.warnings(false);
++
++        if target_env == "msvc" {
++            // Don't pull in extra libraries on MSVC
++            cfg.flag("/Zl");
++
++            // Emulate C99 and C++11's __func__ for MSVC prior to 2013 CTP
++            cfg.define("__func__", Some("__FUNCTION__"));
++        } else {
++            // Turn off various features of gcc and such, mostly copying
++            // compiler-rt's build system already
++            cfg.flag("-fno-builtin");
++            cfg.flag("-fvisibility=hidden");
++            cfg.flag("-ffreestanding");
++            // Avoid the following warning appearing once **per file**:
++            // clang: warning: optimization flag '-fomit-frame-pointer' is not supported for target 'armv7' [-Wignored-optimization-argument]
++            //
++            // Note that compiler-rt's build system also checks
++            //
++            // `check_cxx_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG)`
++            //
++            // in https://github.com/rust-lang/compiler-rt/blob/c8fbcb3/cmake/config-ix.cmake#L19.
++            cfg.flag_if_supported("-fomit-frame-pointer");
++            cfg.define("VISIBILITY_HIDDEN", None);
++        }
++
+         // When compiling the C code we require the user to tell us where the
+         // source code is, and this is largely done so when we're compiling as
+         // part of rust-lang/rust we can use the same llvm-project repository as
+@@ -423,6 +436,7 @@
+             panic!("RUST_COMPILER_RT_ROOT={} does not exist", root.display());
+         }
++        let sources = sources::get_sources(llvm_target);
+         let src_dir = root.join("lib/builtins");
+         for (sym, src) in sources.map.iter() {
+             let src = src_dir.join(src);
+@@ -434,3 +448,103 @@
+         cfg.compile("libcompiler-rt.a");
+     }
+ }
++
++#[cfg(feature = "c-system")]
++mod c_system {
++    use std::env;
++    use std::process::{Command, Output};
++    use std::str;
++    use std::path::Path;
++    use sources;
++
++    fn success_output(err: &str, cmd: &mut Command) -> Output {
++        let output = cmd.output().expect(err);
++        let status = output.status;
++        if !status.success() {
++            panic!("{}: {:?}", err, status.code());
++        }
++        output
++    }
++
++    // This can be obtained by adding the line:
++    //   message(STATUS "All builtin supported architectures: ${ALL_BUILTIN_SUPPORTED_ARCH}")
++    // to the bottom of compiler-rt/cmake/builtin-config-ix.cmake, then running
++    // cmake and looking at the output.
++    const ALL_SUPPORTED_ARCHES : &'static str = "i386;x86_64;arm;armhf;armv6m;armv7m;armv7em;armv7;armv7s;armv7k;aarch64;hexagon;mips;mipsel;mips64;mips64el;powerpc64;powerpc64le;riscv32;riscv64;wasm32;wasm64";
++
++    // This function recreates the logic of getArchNameForCompilerRTLib,
++    // defined in clang/lib/Driver/ToolChain.cpp.
++    fn get_arch_name_for_compiler_rtlib() -> String {
++        let target = env::var("TARGET").unwrap();
++        let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap();
++        let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
++        let r = match target_arch.as_str() {
++            "arm" => if target.ends_with("eabihf") && target_os != "windows" {
++                "armhf"
++            } else {
++                "arm"
++            },
++            "x86" => if target_os == "android" {
++                "i686"
++            } else {
++                "i386"
++            },
++            _ => target_arch.as_str(),
++        };
++        r.to_string()
++    }
++
++    /// Link against system clang runtime libraries
++    pub fn compile(llvm_target: &[&str]) {
++        let target = env::var("TARGET").unwrap();
++        let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap();
++        let compiler_rt_arch = get_arch_name_for_compiler_rtlib();
++
++        if ALL_SUPPORTED_ARCHES.split(";").find(|x| *x == compiler_rt_arch) == None {
++            return;
++        }
++
++        if let Ok(clang) = env::var("CLANG") {
++            let output = success_output(
++                "failed to find clang's compiler-rt",
++                Command::new(clang)
++                    .arg(format!("--target={}", target))
++                    .arg("--rtlib=compiler-rt")
++                    .arg("--print-libgcc-file-name"),
++            );
++            let fullpath = Path::new(str::from_utf8(&output.stdout).unwrap());
++            let libpath = fullpath.parent().unwrap().display();
++            let libname = fullpath
++                .file_stem()
++                .unwrap()
++                .to_str()
++                .unwrap()
++                .trim_start_matches("lib");
++            println!("cargo:rustc-link-search=native={}", libpath);
++            println!("cargo:rustc-link-lib=static={}", libname);
++        } else if let Ok(llvm_config) = env::var("LLVM_CONFIG") {
++            // fallback if clang is not installed
++            let (subpath, libname) = match target_os.as_str() {
++                "linux" => ("linux", format!("clang_rt.builtins-{}", &compiler_rt_arch)),
++                "macos" => ("darwin", "clang_rt.builtins_osx_dynamic".to_string()),
++                _ => panic!("unsupported target os: {}", target_os),
++            };
++            let cmd = format!("ls -1d $({} --libdir)/clang/*/lib/{}", llvm_config, subpath);
++            let output = success_output(
++                "failed to find clang's lib dir",
++                Command::new("sh").args(&["-ec", &cmd]),
++            );
++            for search_dir in str::from_utf8(&output.stdout).unwrap().lines() {
++                println!("cargo:rustc-link-search=native={}", search_dir);
++            }
++            println!("cargo:rustc-link-lib=static={}", libname);
++        } else {
++            panic!("neither CLANG nor LLVM_CONFIG could be read");
++        }
++
++        let sources = sources::get_sources(llvm_target);
++        for (sym, _src) in sources.map.iter() {
++            println!("cargo:rustc-cfg={}=\"optimized-c\"", sym);
++        }
++    }
++}
+--- a/src/bootstrap/compile.rs
++++ b/src/bootstrap/compile.rs
+@@ -213,6 +213,7 @@
+                 emscripten: false,
+             });
+             cargo.env("LLVM_CONFIG", llvm_config);
++            cargo.env("RUSTC_BUILD_SANITIZERS", "1");
+         }
+         cargo.arg("--features").arg(features)
+--- a/src/librustc_asan/build.rs
++++ b/src/librustc_asan/build.rs
+@@ -4,6 +4,9 @@
+ use cmake::Config;
+ fn main() {
++    if env::var("RUSTC_BUILD_SANITIZERS") != Ok("1".to_string()) {
++        return;
++    }
+     if let Some(llvm_config) = env::var_os("LLVM_CONFIG") {
+         build_helper::restore_library_path();
+--- a/src/librustc_lsan/build.rs
++++ b/src/librustc_lsan/build.rs
+@@ -4,6 +4,9 @@
+ use cmake::Config;
+ fn main() {
++    if env::var("RUSTC_BUILD_SANITIZERS") != Ok("1".to_string()) {
++        return;
++    }
+     if let Some(llvm_config) = env::var_os("LLVM_CONFIG") {
+         build_helper::restore_library_path();
+--- a/src/librustc_msan/build.rs
++++ b/src/librustc_msan/build.rs
+@@ -4,6 +4,9 @@
+ use cmake::Config;
+ fn main() {
++    if env::var("RUSTC_BUILD_SANITIZERS") != Ok("1".to_string()) {
++        return;
++    }
+     if let Some(llvm_config) = env::var_os("LLVM_CONFIG") {
+         build_helper::restore_library_path();
+--- a/src/librustc_tsan/build.rs
++++ b/src/librustc_tsan/build.rs
+@@ -4,6 +4,9 @@
+ use cmake::Config;
+ fn main() {
++    if env::var("RUSTC_BUILD_SANITIZERS") != Ok("1".to_string()) {
++        return;
++    }
+     if let Some(llvm_config) = env::var_os("LLVM_CONFIG") {
+         build_helper::restore_library_path();
diff --git a/patches/u-c0c3327ade8b0caa3043425ee45842c86fbd4f76.patch b/patches/u-c0c3327ade8b0caa3043425ee45842c86fbd4f76.patch
new file mode 100644 (file)
index 0000000..699e0a4
--- /dev/null
@@ -0,0 +1,87 @@
+From c0c3327ade8b0caa3043425ee45842c86fbd4f76 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= <tomasz.miasko@gmail.com>
+Date: Thu, 11 Jun 2020 00:00:00 +0000
+Subject: [PATCH] Check for overflow in DroplessArena and return aligned
+ pointer
+
+* Check for overflow when calculating the slice start & end position.
+* Align the pointer obtained from the allocator, ensuring that it
+  satisfies user requested alignment (the allocator is only asked for
+  layout compatible with u8 slice).
+* Remove an incorrect assertion from DroplessArena::align.
+---
+ src/librustc_arena/lib.rs | 53 ++++++++++++++++++++++++---------------
+ 1 file changed, 33 insertions(+), 20 deletions(-)
+
+--- a/src/libarena/lib.rs
++++ b/src/libarena/lib.rs
+@@ -338,13 +338,6 @@
+ }
+ impl DroplessArena {
+-    #[inline]
+-    fn align(&self, align: usize) {
+-        let final_address = ((self.ptr.get() as usize) + align - 1) & !(align - 1);
+-        self.ptr.set(final_address as *mut u8);
+-        assert!(self.ptr <= self.end);
+-    }
+-
+     #[inline(never)]
+     #[cold]
+     fn grow(&self, needed_bytes: usize) {
+@@ -378,22 +371,42 @@
+         }
+     }
++    /// Allocates a byte slice with specified size and alignment from the
++    /// current memory chunk. Returns `None` if there is no free space left to
++    /// satisfy the request.
+     #[inline]
+-    pub fn alloc_raw(&self, bytes: usize, align: usize) -> &mut [u8] {
+-        unsafe {
+-            assert!(bytes != 0);
+-
+-            self.align(align);
++    fn alloc_raw_without_grow(&self, bytes: usize, align: usize) -> Option<&mut [u8]> {
++        let ptr = self.ptr.get() as usize;
++        let end = self.end.get() as usize;
++        // The allocation request fits into the current chunk iff:
++        //
++        // let aligned = align_to(ptr, align);
++        // ptr <= aligned && aligned + bytes <= end
++        //
++        // Except that we work with fixed width integers and need to be careful
++        // about potential overflow in the calcuation. If the overflow does
++        // happen, then we definitely don't have enough free and need to grow
++        // the arena.
++        let aligned = ptr.checked_add(align - 1)? & !(align - 1);
++        let new_ptr = aligned.checked_add(bytes)?;
++        if new_ptr <= end {
++            self.ptr.set(new_ptr as *mut u8);
++            unsafe { Some(slice::from_raw_parts_mut(aligned as *mut u8, bytes)) }
++        } else {
++            None
++        }
++    }
+-            let future_end = intrinsics::arith_offset(self.ptr.get(), bytes as isize);
+-            if (future_end as *mut u8) > self.end.get() {
+-                self.grow(bytes);
++    #[inline]
++    pub fn alloc_raw(&self, bytes: usize, align: usize) -> &mut [u8] {
++        assert!(bytes != 0);
++        loop {
++            if let Some(a) = self.alloc_raw_without_grow(bytes, align) {
++                break a;
+             }
+-
+-            let ptr = self.ptr.get();
+-            // Set the pointer past ourselves
+-            self.ptr.set(intrinsics::arith_offset(self.ptr.get(), bytes as isize) as *mut u8);
+-            slice::from_raw_parts_mut(ptr, bytes)
++            // No free space left. Allocate a new chunk to satisfy the request.
++            // On failure the grow will panic or abort.
++            self.grow(bytes);
+         }
+     }
diff --git a/patches/u-fb9fa5ba3ee08171e7d2ff35d28ec0dd93b0287b.patch b/patches/u-fb9fa5ba3ee08171e7d2ff35d28ec0dd93b0287b.patch
new file mode 100644 (file)
index 0000000..5310b23
--- /dev/null
@@ -0,0 +1,56 @@
+From fb9fa5ba3ee08171e7d2ff35d28ec0dd93b0287b Mon Sep 17 00:00:00 2001
+From: Ralf Jung <post@ralfj.de>
+Date: Fri, 3 Jul 2020 12:12:50 +0200
+Subject: [PATCH] adjust ub-enum test to be endianess-independent
+
+---
+ src/test/ui/consts/const-eval/ub-enum.rs     |  5 +++--
+ src/test/ui/consts/const-eval/ub-enum.stderr | 12 ++++++------
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/src/test/ui/consts/const-eval/ub-enum.rs b/src/test/ui/consts/const-eval/ub-enum.rs
+index c49997c6c33f6..136b33208c293 100644
+--- a/src/test/ui/consts/const-eval/ub-enum.rs
++++ b/src/test/ui/consts/const-eval/ub-enum.rs
+@@ -88,9 +88,10 @@ const BAD_OPTION_CHAR: Option<(char, char)> = Some(('x', unsafe { mem::transmute
+ //~^ ERROR is undefined behavior
+ // All variants are uninhabited but also have data.
+-const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(1u64) };
++// Use `0` as constant to make behavior endianess-independent.
++const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(0u64) };
+ //~^ ERROR is undefined behavior
+-const BAD_UNINHABITED_WITH_DATA2: Result<(i32, !), (i32, Never)> = unsafe { mem::transmute(1u64) };
++const BAD_UNINHABITED_WITH_DATA2: Result<(i32, !), (i32, Never)> = unsafe { mem::transmute(0u64) };
+ //~^ ERROR is undefined behavior
+ fn main() {
+diff --git a/src/test/ui/consts/const-eval/ub-enum.stderr b/src/test/ui/consts/const-eval/ub-enum.stderr
+index 1f7593c6db9b6..9c29aa1a51d1c 100644
+--- a/src/test/ui/consts/const-eval/ub-enum.stderr
++++ b/src/test/ui/consts/const-eval/ub-enum.stderr
+@@ -87,18 +87,18 @@ LL | const BAD_OPTION_CHAR: Option<(char, char)> = Some(('x', unsafe { mem::tran
+    = note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
+ error[E0080]: it is undefined behavior to use this value
+-  --> $DIR/ub-enum.rs:91:1
++  --> $DIR/ub-enum.rs:92:1
+    |
+-LL | const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(1u64) };
+-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered a value of the never type `!` at .<enum-variant(Err)>.0.1
++LL | const BAD_UNINHABITED_WITH_DATA1: Result<(i32, Never), (i32, !)> = unsafe { mem::transmute(0u64) };
++   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered a value of uninhabited type Never at .<enum-variant(Ok)>.0.1
+    |
+    = note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
+ error[E0080]: it is undefined behavior to use this value
+-  --> $DIR/ub-enum.rs:93:1
++  --> $DIR/ub-enum.rs:94:1
+    |
+-LL | const BAD_UNINHABITED_WITH_DATA2: Result<(i32, !), (i32, Never)> = unsafe { mem::transmute(1u64) };
+-   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered a value of uninhabited type Never at .<enum-variant(Err)>.0.1
++LL | const BAD_UNINHABITED_WITH_DATA2: Result<(i32, !), (i32, Never)> = unsafe { mem::transmute(0u64) };
++   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type validation failed: encountered a value of the never type `!` at .<enum-variant(Ok)>.0.1
+    |
+    = note: The rules on what exactly is undefined behavior aren't clear, so this check might be overzealous. Please open an issue on the rustc repository if you believe it should not be considered undefined behavior.
diff --git a/patches/u-fix-exec.patch b/patches/u-fix-exec.patch
new file mode 100644 (file)
index 0000000..a2f6c96
--- /dev/null
@@ -0,0 +1,29 @@
+From 0cf17e750d7790e0f2fc1fb184b6f917f55462ca Mon Sep 17 00:00:00 2001
+From: Ximin Luo <infinity0@pwned.gg>
+Date: Mon, 27 Jul 2020 02:42:02 +0100
+Subject: [PATCH] rustbuild: fix bad usage of UNIX exec() in rustc wrapper
+
+exec never returns, it replaces the current process. so anything after it is
+unreachable. that's not how exec_cmd() is used in the surrounding code
+---
+ src/bootstrap/bin/rustc.rs | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs
+index fd36cd9bd8beb..c8ee4cb0cd2ef 100644
+--- a/src/bootstrap/bin/rustc.rs
++++ b/src/bootstrap/bin/rustc.rs
+@@ -186,13 +186,6 @@ fn main() {
+     std::process::exit(code);
+ }
+-#[cfg(unix)]
+-fn exec_cmd(cmd: &mut Command) -> io::Result<i32> {
+-    use std::os::unix::process::CommandExt;
+-    Err(cmd.exec())
+-}
+-
+-#[cfg(not(unix))]
+ fn exec_cmd(cmd: &mut Command) -> io::Result<i32> {
+     cmd.status().map(|status| status.code().unwrap())
+ }
diff --git a/patches/u-ignore-endian.patch b/patches/u-ignore-endian.patch
new file mode 100644 (file)
index 0000000..7c539f4
--- /dev/null
@@ -0,0 +1,120 @@
+--- a/src/tools/compiletest/src/header.rs
++++ b/src/tools/compiletest/src/header.rs
+@@ -853,6 +853,7 @@
+             name == util::get_pointer_width(&self.target) ||    // pointer width
+             name == self.stage_id.split('-').next().unwrap() || // stage
+             (self.target != self.host && name == "cross-compile") ||
++            (name == "endian-big" && util::is_big_endian(&self.target)) ||
+             match self.compare_mode {
+                 Some(CompareMode::Nll) => name == "compare-mode-nll",
+                 Some(CompareMode::Polonius) => name == "compare-mode-polonius",
+--- a/src/tools/compiletest/src/util.rs
++++ b/src/tools/compiletest/src/util.rs
+@@ -81,6 +81,20 @@
+     ("xcore", "xcore"),
+ ];
++const BIG_ENDIAN: &'static [&'static str] = &[
++    "armebv7r",
++    "mips",
++    "mips64",
++    "mipsisa32r6",
++    "mipsisa64r6",
++    "powerpc",
++    "powerpc64",
++    "s390x",
++    "sparc",
++    "sparc64",
++    "sparcv9",
++];
++
+ pub fn matches_os(triple: &str, name: &str) -> bool {
+     // For the wasm32 bare target we ignore anything also ignored on emscripten
+     // and then we also recognize `wasm32-bare` as the os for the target
+@@ -107,6 +121,12 @@
+     panic!("Cannot determine Architecture from triple");
+ }
++/// Determine the endianness from `triple`
++pub fn is_big_endian(triple: &str) -> bool {
++    let triple_arch = triple.split('-').next().unwrap();
++    BIG_ENDIAN.contains(&triple_arch)
++}
++
+ pub fn matches_env(triple: &str, name: &str) -> bool {
+     if let Some(env) = triple.split('-').nth(3) { env.starts_with(name) } else { false }
+ }
+--- a/src/test/mir-opt/const-promotion-extern-static.rs
++++ b/src/test/mir-opt/const-promotion-extern-static.rs
+@@ -1,7 +1,7 @@
++// ignore-endian-big
+ extern "C" {
+     static X: i32;
+ }
+-
+ static Y: i32 = 42;
+ // EMIT_MIR rustc.BAR.PromoteTemps.diff
+--- a/src/test/mir-opt/const_allocation.rs
++++ b/src/test/mir-opt/const_allocation.rs
+@@ -1,5 +1,5 @@
++// ignore-endian-big
+ // EMIT_MIR_FOR_EACH_BIT_WIDTH
+-
+ static FOO: &[(Option<i32>, &[&str])] =
+     &[(None, &[]), (None, &["foo", "bar"]), (Some(42), &["meh", "mop", "möp"])];
+--- a/src/test/mir-opt/const_allocation2.rs
++++ b/src/test/mir-opt/const_allocation2.rs
+@@ -1,5 +1,5 @@
++// ignore-endian-big
+ // EMIT_MIR_FOR_EACH_BIT_WIDTH
+-
+ // EMIT_MIR rustc.main.ConstProp.after.mir
+ fn main() {
+     FOO;
+--- a/src/test/mir-opt/const_allocation3.rs
++++ b/src/test/mir-opt/const_allocation3.rs
+@@ -1,5 +1,5 @@
++// ignore-endian-big
+ // EMIT_MIR_FOR_EACH_BIT_WIDTH
+-
+ // EMIT_MIR rustc.main.ConstProp.after.mir
+ fn main() {
+     FOO;
+--- a/src/test/mir-opt/inline/inline-into-box-place.rs
++++ b/src/test/mir-opt/inline/inline-into-box-place.rs
+@@ -1,8 +1,8 @@
++// ignore-endian-big
+ // ignore-wasm32-bare compiled with panic=abort by default
+ // compile-flags: -Z mir-opt-level=3
+ // EMIT_MIR_FOR_EACH_BIT_WIDTH
+ #![feature(box_syntax)]
+-
+ // EMIT_MIR rustc.main.Inline.diff
+ fn main() {
+     let _x: Box<Vec<u32>> = box Vec::new();
+--- a/src/test/ui/simd/simd-intrinsic-generic-bitmask.rs
++++ b/src/test/ui/simd/simd-intrinsic-generic-bitmask.rs
+@@ -2,6 +2,7 @@
+ #![allow(non_camel_case_types)]
+ // ignore-emscripten
++// ignore-endian-big behavior of simd_bitmask is endian-specific
+ // Test that the simd_bitmask intrinsic produces correct results.
+--- a/src/test/ui/simd/simd-intrinsic-generic-select.rs
++++ b/src/test/ui/simd/simd-intrinsic-generic-select.rs
+@@ -2,10 +2,7 @@
+ #![allow(non_camel_case_types)]
+ // ignore-emscripten
+-// ignore-mips       behavior of simd_select_bitmask is endian-specific
+-// ignore-mips64     behavior of simd_select_bitmask is endian-specific
+-// ignore-powerpc    behavior of simd_select_bitmask is endian-specific
+-// ignore-powerpc64  behavior of simd_select_bitmask is endian-specific
++// ignore-endian-big behavior of simd_select_bitmask is endian-specific
+ // Test that the simd_select intrinsics produces correct results.
diff --git a/patches/u-make-tests-work-without-rpath.patch b/patches/u-make-tests-work-without-rpath.patch
new file mode 100644 (file)
index 0000000..cd6dd6a
--- /dev/null
@@ -0,0 +1,12 @@
+Author: Chris Coulson <chris.coulson@canonical.com>
+Forwarded: TODO
+--- a/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
++++ b/src/test/run-make-fulldeps/sysroot-crates-are-unstable/Makefile
+@@ -1,2 +1,6 @@
++include ../tools.mk
++
++RUSTC := $(RUSTC_ORIGINAL)
++
+ all:
+-      '$(PYTHON)' test.py
++      $(HOST_RPATH_ENV) '$(PYTHON)' test.py
diff --git a/patches/u-mips-fixes.diff b/patches/u-mips-fixes.diff
new file mode 100644 (file)
index 0000000..3c89eb8
--- /dev/null
@@ -0,0 +1,22 @@
+Description: Various fixes for Rust on MIPS
+Author: Dragan Mladjenovic <dmladjenovic@wavecomp.com>
+Bug-Debian: https://bugs.debian.org/881845
+Last-Update: 2020-03-23
+
+Index: rust/src/librustc_codegen_llvm/llvm_util.rs
+===================================================================
+--- rust.orig/src/librustc_codegen_llvm/llvm_util.rs
++++ rust/src/librustc_codegen_llvm/llvm_util.rs
+@@ -108,6 +108,12 @@ unsafe fn configure_llvm(sess: &Session)
+         // during inlining. Unfortunately these may block other optimizations.
+         add("-preserve-alignment-assumptions-during-inlining=false", false);
++        if sess.target.target.arch == "mips"
++            || sess.target.target.arch == "mips64"
++        {
++            add("-fast-isel=0", false);
++        }
++
+         for arg in sess_args {
+             add(&(*arg), true);
+         }
diff --git a/patches/u-reproducible-build.patch b/patches/u-reproducible-build.patch
new file mode 100644 (file)
index 0000000..19d95ed
--- /dev/null
@@ -0,0 +1,20 @@
+Description: Don't split dwarf debug for a fully-reproducible build
+Author: Ximin Luo <infinity0@debian.org>
+Bug: https://github.com/rust-lang/rust/issues/34902
+
+Index: rust/src/librustc_llvm/build.rs
+===================================================================
+--- rust.orig/src/librustc_llvm/build.rs
++++ rust/src/librustc_llvm/build.rs
+@@ -121,6 +121,11 @@ fn main() {
+     let mut cfg = cc::Build::new();
+     cfg.warnings(false);
+     for flag in cxxflags.split_whitespace() {
++        // Split-dwarf gives unreproducible DW_AT_GNU_dwo_id so don't do it
++        if flag == "-gsplit-dwarf" {
++            continue;
++        }
++
+         // Ignore flags like `-m64` when we're doing a cross build
+         if is_crossed && flag.starts_with("-m") {
+             continue;
diff --git a/patches/u-reproducible-dl-stage0.patch b/patches/u-reproducible-dl-stage0.patch
new file mode 100644 (file)
index 0000000..ea9f717
--- /dev/null
@@ -0,0 +1,13 @@
+Index: rust/src/bootstrap/bootstrap.py
+===================================================================
+--- rust.orig/src/bootstrap/bootstrap.py
++++ rust/src/bootstrap/bootstrap.py
+@@ -81,7 +81,7 @@ def _download(path, url, probably_big, v
+         run(["curl", option,
+              "-y", "30", "-Y", "10",    # timeout if speed is < 10 bytes/sec for > 30 seconds
+              "--connect-timeout", "30",  # timeout if cannot connect within 30 seconds
+-             "--retry", "3", "-Sf", "-o", path, url],
++             "--retry", "3", "-Sf", "-o", path, "-R", url],
+             verbose=verbose,
+             exception=exception)
diff --git a/patches/u-rustc-llvm-cross-flags.patch b/patches/u-rustc-llvm-cross-flags.patch
new file mode 100644 (file)
index 0000000..c4bba61
--- /dev/null
@@ -0,0 +1,13 @@
+Index: rust/src/librustc_llvm/build.rs
+===================================================================
+--- rust.orig/src/librustc_llvm/build.rs
++++ rust/src/librustc_llvm/build.rs
+@@ -223,7 +223,7 @@ fn main() {
+         if is_crossed {
+             if lib.starts_with("-LIBPATH:") {
+                 println!("cargo:rustc-link-search=native={}", lib[9..].replace(&host, &target));
+-            } else if lib.starts_with("-L") {
++            } else if lib.starts_with("-L") && lib[2..].contains(&host) {
+                 println!("cargo:rustc-link-search=native={}", lib[2..].replace(&host, &target));
+             }
+         } else if lib.starts_with("-LIBPATH:") {
diff --git a/patches/u-tests-ignore-arm.patch b/patches/u-tests-ignore-arm.patch
new file mode 100644 (file)
index 0000000..c02b936
--- /dev/null
@@ -0,0 +1,12 @@
+Bug: https://github.com/rust-lang/rust/issues/67242
+Description: this test is new in 1.40 and the failure is present on many
+ previous rust versions without users having complained or noticed, so
+ just ignore the failure until upstream fixes it
+--- a/src/test/run-make-fulldeps/foreign-exceptions/Makefile
++++ b/src/test/run-make-fulldeps/foreign-exceptions/Makefile
+@@ -1,3 +1,5 @@
++# ignore-arm
++
+ -include ../tools.mk
+ all: foo
diff --git a/prune-checksums b/prune-checksums
new file mode 100755 (executable)
index 0000000..0c895cf
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/python3
+# Copyright: 2015-2017 The Debian Project
+# License: MIT or Apache-2.0
+#
+# Helper to remove removed-files from .cargo-checksum
+# TODO: rewrite to perl and add to dh-cargo, maybe?
+
+from collections import OrderedDict
+import argparse
+import json
+import os
+import sys
+
+def prune_keep(cfile):
+    with open(cfile) as fp:
+        sums = json.load(fp, object_pairs_hook=OrderedDict)
+
+    oldfiles = sums["files"]
+    newfiles = OrderedDict([entry for entry in oldfiles.items() if os.path.exists(entry[0])])
+    sums["files"] = newfiles
+
+    if len(oldfiles) == len(newfiles):
+        return
+
+    with open(cfile, "w") as fp:
+        json.dump(sums, fp, separators=(',', ':'))
+
+def prune(cfile):
+    with open(cfile, "r+") as fp:
+        sums = json.load(fp, object_pairs_hook=OrderedDict)
+        sums["files"] = {}
+        fp.seek(0)
+        json.dump(sums, fp, separators=(',', ':'))
+        fp.truncate()
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser()
+    parser.add_argument("-k", "--keep", action="store_true", help="keep "
+        "checksums of files that still exist, and assume they haven't changed.")
+    parser.add_argument('crates', nargs=argparse.REMAINDER,
+        help="crates whose checksums to prune. (default: ./)")
+    args = parser.parse_args(sys.argv[1:])
+    crates = args.crates or ["."]
+    f = prune_keep if args.keep else prune
+    for c in crates:
+        cfile = os.path.join(c, ".cargo-checksum.json") if os.path.isdir(c) else c
+        f(cfile)
diff --git a/prune-unused-deps b/prune-unused-deps
new file mode 100755 (executable)
index 0000000..ac43fe6
--- /dev/null
@@ -0,0 +1,61 @@
+#!/bin/bash
+# Run this script in an unpacked upstream tarball directory, and it will update
+# (i.e. overwrite) the "unused deps" part of Files-Excluded in d/copyright.
+
+set -e
+
+scriptdir=$(dirname "$(dirname "$(readlink -f "$0")")")
+had_config_toml=$(if test -e "$scriptdir/debian/config.toml"; then echo true; else echo false; fi)
+
+( cd "$scriptdir" && debian/rules debian/config.toml )
+cp "$scriptdir/debian/config.toml" config.toml
+
+for i in "$scriptdir/debian/patches"/d-00*.patch; do
+       "$scriptdir/debian/ensure-patch" -N "$i"
+done
+test -f Cargo.lock.orig || cp Cargo.lock Cargo.lock.orig
+rm -f Cargo.lock
+./x.py build nonexistent/path/to/trigger/cargo/metadata src/bootstrap
+
+massage_lock_file() {
+       sed -z -e 's/\nname = /name = /g' -e 's/\nversion = /version = /g' "$1"
+}
+
+not_needed() {
+       diff -ru <(massage_lock_file Cargo.lock.orig) <(massage_lock_file Cargo.lock) \
+         | sed -ne 's/-\[\[package\]\]name = "\(.*\)"version = "\(.*\)"/\1 \2/gp'
+}
+
+ghetto_parse_cargo() {
+       cat "$1" \
+        | tr '\n' '\t' \
+        | sed -e 's/\t\[/\n[/g' \
+        | perl -ne 'print if s/^\[(?:package|project)\].*\tname\s*=\s*"(.*?)".*\tversion\s*=\s*"(.*?)".*/\1 \2/g'
+}
+
+pruned_paths() {
+       for i in vendor/*/Cargo.toml; do
+               pkgnamever=
+               pkgnamever=$(ghetto_parse_cargo "$i")
+               if [ -z "$pkgnamever" ]; then
+                       echo >&2 "failed to parse: $i"
+                       exit 1
+               fi
+               echo "$pkgnamever $i"
+       done | grep -F -f <(not_needed) | cut '-d ' -f3 | while read x; do
+               echo " $(dirname $x)"
+       done
+}
+
+header='# DO NOT EDIT below, AUTOGENERATED'
+footer='# DO NOT EDIT above, AUTOGENERATED'
+{
+echo "$header"
+pruned_paths
+echo "$footer"
+} > $scriptdir/debian/copyright.unused-deps
+
+cd $scriptdir/debian
+sed -i -e "/^$header/,/^$footer/d" -e '/^# unused dependencies/rcopyright.unused-deps' copyright
+rm copyright.unused-deps
+$had_config_toml || rm "$scriptdir/debian/config.toml"
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..69cea6e
--- /dev/null
+++ b/rules
@@ -0,0 +1,433 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+include /usr/share/dpkg/pkg-info.mk
+include /usr/share/dpkg/vendor.mk
+include /usr/share/dpkg/architecture.mk
+SED_VERSION_SHORT := sed -re 's/([^.]+)\.([^.]+)\..*/\1.\2/'
+RUST_VERSION := $(shell echo '$(DEB_VERSION_UPSTREAM)' | $(SED_VERSION_SHORT))
+RUST_LONG_VERSION := $(shell echo '$(DEB_VERSION_UPSTREAM)' | sed -re 's/([^+]+).*/\1/')
+LIBSTD_PKG := libstd-rust-$(RUST_VERSION)
+# Sed expression that matches the "rustc" we have in our Build-Depends field
+SED_RUSTC_BUILDDEP := sed -ne "/^Build-Depends:/,/^[^[:space:]\#]/{/^ *rustc:native .*,/p}" debian/control
+# Version of /usr/bin/rustc
+LOCAL_RUST_VERSION := $(shell rustc --version --verbose | sed -ne 's/^release: //p')
+
+include /usr/share/dpkg/buildflags.mk
+# TODO: more correct to use `[build] rustflags = []` list syntax in Cargo.toml
+RUSTFLAGS = $(addprefix -C link-args=,$(LDFLAGS))
+RUSTFLAGS += --cap-lints warn
+export CFLAGS CXXFLAGS CPPFLAGS LDFLAGS RUSTFLAGS
+export CARGO_HOME = $(CURDIR)/debian/cargo
+
+# Defines DEB_*_RUST_TYPE triples
+include debian/architecture.mk
+export DEB_HOST_RUST_TYPE
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+DEB_DESTDIR := $(CURDIR)/debian/tmp
+
+# Use system LLVM (comment out to use vendored LLVM)
+LLVM_VERSION = 10
+OLD_LLVM_VERSION = 9
+# Make it easier to test against a custom LLVM
+ifneq (,$(LLVM_DESTDIR))
+LLVM_LIBRARY_PATH := $(LLVM_DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH):$(LLVM_DESTDIR)/usr/lib
+LD_LIBRARY_PATH := $(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):$(LLVM_LIBRARY_PATH),$(LLVM_LIBRARY_PATH))
+export LD_LIBRARY_PATH
+endif
+
+RUSTBUILD = RUST_BACKTRACE=1 python3 src/bootstrap/bootstrap.py
+RUSTBUILD_FLAGS = --config debian/config.toml -vvv --on-fail env
+RUSTBUILD_TEST = $(RUSTBUILD) test --no-fail-fast
+# To run a specific test, run something like:
+#   $ debian/rules override_dh_auto_test-arch \
+#     RUSTBUILD_TEST_FLAGS="src/test/run-make --test-args extern-fn-struct"
+# See src/bootstrap/README.md for more options.
+RUSTBUILD_TEST_FLAGS =
+
+update-version:
+       oldver=$(shell $(SED_RUSTC_BUILDDEP) | sed -ne 's/.*(<= \(.*\)).*/\1/gp' | $(SED_VERSION_SHORT)); \
+       newver=$(RUST_VERSION); \
+       debian/update-version.sh $$oldver $$newver $(RUST_LONG_VERSION) $(CARGO_NEW)
+
+# Below we detect how we're supposed to bootstrap the stage0 compiler. See
+# README.Debian for more details of the cases described below.
+#
+PRECONFIGURE_CHECK = :
+HAVE_BINARY_TARBALL := $(shell ls -1 stage0/*/*$(DEB_HOST_RUST_TYPE)* 2>/dev/null | wc -l)
+DOWNLOAD_BOOTSTRAP := false
+# allow not using the binary tarball although it exists
+#ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 armhf i386 powerpc ppc64el s390x))
+#  HAVE_BINARY_TARBALL := 0
+#endif
+ifeq (0,$(HAVE_BINARY_TARBALL))
+    # Case A (Building from source): the extracted source tree does not include
+    # a bootstrapping tarball for the current architecture e.g. because the
+    # distro already has a rustc for this arch, or the uploader expects that
+    # this requirement be fulfilled in some other way.
+    #
+    # Case A-1: the builder did not select the "pkg.rustc.dlstage0" build profile.
+    # In this case, we use the distro's rustc - either the previous or current version.
+    ifeq (,$(findstring pkg.rustc.dlstage0,$(DEB_BUILD_PROFILES)))
+        # Make it easier to test against a custom rustc
+        ifneq (,$(RUST_DESTDIR))
+        RUST_LIBRARY_PATH := $(RUST_DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH):$(RUST_DESTDIR)/usr/lib
+        LD_LIBRARY_PATH := $(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):$(RUST_LIBRARY_PATH),$(RUST_LIBRARY_PATH))
+        export LD_LIBRARY_PATH
+        endif
+    #
+    # Case A-2: the builder selected the "dlstage0" build profile.
+    # In this case, the rust build scripts will download a stage0 into stage0/ and use that.
+    # We don't need to do anything specific in this build file, so this case is empty.
+    else
+        DOWNLOAD_BOOTSTRAP := true
+    endif
+else
+    # Case B (Bootstrapping a new distro): the extracted source tree does
+    # include a bootstrapping tarball for the current architecture; see the
+    # `source_orig-stage0` target below on how to build this.
+    #
+    # In this case, we'll bootstrap from the stage0 given in that tarball.
+    # To ensure the uploader of the .dsc didn't make a mistake, we first check
+    # that rustc isn't a Build-Depends for the current architecture.
+    ifneq (,$(shell $(SED_RUSTC_BUILDDEP)))
+    ifeq (,$(shell $(SED_RUSTC_BUILDDEP) | grep '!$(DEB_HOST_ARCH)'))
+        PRECONFIGURE_CHECK = $(error found matches for stage0/*/*$(DEB_HOST_RUST_TYPE)*, \
+          but rustc might be a Build-Depends for $(DEB_HOST_ARCH))
+    endif
+    endif
+endif
+
+BUILD_DOCS := true
+ifneq (,$(findstring nodoc,$(DEB_BUILD_PROFILES)))
+  BUILD_DOCS := false
+endif
+ifneq (,$(findstring nodoc,$(DEB_BUILD_OPTIONS)))
+  BUILD_DOCS := false
+endif
+
+BUILD_WASM := true
+ifneq (,$(findstring nowasm,$(DEB_BUILD_PROFILES)))
+  BUILD_WASM := false
+endif
+
+MAKE_OPTIMISATIONS := true
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+  MAKE_OPTIMISATIONS := false
+endif
+
+# Build products or non-source files in src/, that shouldn't go in rust-src
+SRC_CLEAN = src/bootstrap/bootstrap.pyc \
+       src/etc/__pycache__/
+
+# Try to work around #933045
+ifneq (,$(filter $(DEB_BUILD_ARCH), mips mipsel))
+  SYSTEM_WORKAROUNDS += export MALLOC_ARENA_MAX=1;
+endif
+
+%:
+       $(SYSTEM_WORKAROUNDS) dh $@ --parallel
+
+.PHONY: build
+build:
+       $(SYSTEM_WORKAROUNDS) dh $@ --parallel
+
+override_dh_clean:
+       # Upstream contains a lot of these
+       dh_clean -XCargo.toml.orig
+
+debian/config.toml: debian/config.toml.in debian/rules
+       u="$(DEB_VERSION_UPSTREAM)"; \
+       if [ "$$u" != "$${u%~beta.*+dfsg*}" ]; then channel="beta"; \
+       else channel="stable"; fi; echo $$channel; \
+       m4  -DRELEASE_CHANNEL="$$channel" \
+               -DDEB_BUILD_RUST_TYPE="$(DEB_BUILD_RUST_TYPE)" \
+               -DDEB_HOST_RUST_TYPE="$(DEB_HOST_RUST_TYPE)" \
+               -DDEB_TARGET_RUST_TYPE="$(DEB_TARGET_RUST_TYPE)" \
+               -DDEB_BUILD_GNU_TYPE="$(DEB_BUILD_GNU_TYPE)" \
+               -DDEB_HOST_GNU_TYPE="$(DEB_HOST_GNU_TYPE)" \
+               -DDEB_TARGET_GNU_TYPE="$(DEB_TARGET_GNU_TYPE)" \
+               -DMAKE_OPTIMISATIONS="$(MAKE_OPTIMISATIONS)" \
+               -DLLVM_DESTDIR="$(LLVM_DESTDIR)" \
+               -DLLVM_VERSION="$(LLVM_VERSION)" \
+               -DRUST_DESTDIR="$(RUST_DESTDIR)" \
+               "$<" > "$@"
+       if $(DOWNLOAD_BOOTSTRAP) || [ $(HAVE_BINARY_TARBALL) != 0 ]; \
+         then sed -i -e '/^rustc = /d' -e '/^cargo = /d' "$@"; fi
+# Work around low-memory (32-bit) architectures: https://github.com/rust-lang/rust/issues/45854
+ifneq (,$(filter $(DEB_BUILD_ARCH), armhf armel mips mipsel powerpc powerpcspe))
+       sed -i -e 's/^debuginfo-level = .*/debuginfo-level = 0/g' "$@"
+endif
+
+debian/rust-src.%: debian/rust-src.%.in
+       m4  -DRUST_LONG_VERSION="$(RUST_LONG_VERSION)" \
+               "$<" > "$@"
+
+debian/dh_auto_configure.stamp: debian/config.toml
+       # fail the build if we have any instances of OLD_LLVM_VERSION in debian, except for debian/changelog
+       ! grep --color=always -i 'll\(..\|d\)-\?$(subst .,\.,$(OLD_LLVM_VERSION))' --exclude=changelog --exclude=copyright --exclude='*.patch' --exclude-dir='.debhelper' -R debian
+       # fail the build if we accidentally vendored openssl, indicates we pulled in unnecessary dependencies
+       test ! -e vendor/openssl
+       # fail the build if our version contains ~exp and we are not releasing to experimental
+       v="$(DEB_VERSION)"; test "$$v" = "$${v%~exp*}" -o "$(DEB_DISTRIBUTION)" = "experimental" -o "$(DEB_DISTRIBUTION)" = "UNRELEASED"
+       $(PRECONFIGURE_CHECK)
+       if [ -d stage0 ]; then mkdir -p build && ln -sfT ../stage0 build/cache; fi
+       # work around #842634
+       if test $$(grep "127.0.0.1\s*localhost" /etc/hosts | wc -l) -gt 1; then \
+         debian/ensure-patch -N debian/patches/d-host-duplicates.patch; fi
+       # We patched some crates so have to rm the checksums
+       find vendor -name .cargo-checksum.json -execdir "$(CURDIR)/debian/prune-checksums" "{}" +
+       # Link against system liblzma, see https://github.com/alexcrichton/xz2-rs/issues/16
+       echo 'fn main() { println!("cargo:rustc-link-lib=lzma"); }' > vendor/lzma-sys/build.rs
+       # We don't run ./configure because we use debian/config.toml directly
+       ln -sf debian/config.toml config.toml
+       touch "$@"
+
+override_dh_auto_configure-arch: debian/dh_auto_configure.stamp
+override_dh_auto_configure-indep: debian/dh_auto_configure.stamp
+ifeq (true,$(BUILD_DOCS))
+# Change config.toml now and not later, since that might trigger a rebuild
+       sed -i -e 's/^docs = false/docs = true/' debian/config.toml
+endif
+
+override_dh_auto_clean:
+       $(RM) -rf build tmp .cargo debian/cargo_home config.stamp config.mk Makefile
+       $(RM) -rf $(TEST_LOG) debian/config.toml debian/rust-src.install debian/rust-src.links debian/*.stamp
+       $(RM) -rf $(SRC_CLEAN) config.toml
+
+debian/dh_auto_build.stamp:
+       $(RUSTBUILD) build $(RUSTBUILD_FLAGS)
+
+override_dh_auto_build-arch: debian/dh_auto_build.stamp
+override_dh_auto_build-indep: debian/dh_auto_build.stamp
+ifeq (true,$(BUILD_WASM))
+       $(RUSTBUILD) build $(RUSTBUILD_FLAGS) \
+         --host $(DEB_BUILD_RUST_TYPE) \
+         --target wasm32-unknown-unknown,wasm32-wasi \
+         src/libstd
+endif
+ifeq (true,$(BUILD_DOCS))
+       $(RUSTBUILD) doc $(RUSTBUILD_FLAGS)
+endif
+
+TEST_LOG = debian/rustc-tests.log
+# This is advertised as "5 tests failed" in README.Debian because our counting
+# method is imprecise and in practise we count some failures twice.
+FAILURES_ALLOWED = 8
+ifneq (,$(filter $(DEB_BUILD_ARCH), ppc64 arm64 mips64el i386))
+  FAILURES_ALLOWED = 12
+endif
+ifneq (,$(filter $(DEB_BUILD_ARCH), mips mipsel s390x))
+  FAILURES_ALLOWED = 24
+endif
+ifneq (,$(filter $(DEB_BUILD_ARCH), powerpc powerpcspe riscv64 sparc64 x32))
+  FAILURES_ALLOWED = 180
+endif
+FAILED_TESTS = grep "FAILED\|^command did not execute successfully" $(TEST_LOG) | grep -v '^test result: FAILED' | grep -v 'FAILED (allowed)'
+override_dh_auto_test-arch:
+       # ensure that rustc_llvm is actually dynamically linked to libLLVM
+       set -e; find build/*/stage2/lib/rustlib/* -name '*rustc_llvm*.so' | \
+       while read x; do \
+               stat -c '%s %n' "$$x"; \
+               objdump -p "$$x" | grep -q "NEEDED.*LLVM"; \
+               test "$$(stat -c %s "$$x")" -lt 6000000; \
+       done
+ifeq (, $(filter nocheck,$(DEB_BUILD_PROFILES)))
+ifeq (, $(filter nocheck,$(DEB_BUILD_OPTIONS)))
+       { $(RUSTBUILD_TEST) $(RUSTBUILD_FLAGS) $(RUSTBUILD_TEST_FLAGS); echo $$?; } | tee -a $(TEST_LOG)
+       # test that the log has at least 1 pass, to prevent e.g. #57709
+       grep -l "^test .* \.\.\. ok$$" $(TEST_LOG)
+       echo "==== Debian rustc test report ===="; \
+       echo "Specific test failures:"; \
+       $(FAILED_TESTS); \
+       num_failures=$$($(FAILED_TESTS) | wc -l); \
+       exit_code=$$(tail -n1 $(TEST_LOG)); \
+       echo "Summary: exit code $$exit_code, counted $$num_failures tests failed."; \
+       echo -n "$(FAILURES_ALLOWED) maximum allowed. "; \
+       if test "$$num_failures" -eq 0 -a "$$exit_code" -ne 0; then \
+         echo "Aborting just in case, because we missed counting some test failures."; \
+         echo "This could happen if we failed to build the tests, or if the testsuite runner is buggy."; \
+         false; \
+       elif test "$$num_failures" -le $(FAILURES_ALLOWED); then \
+         echo "Continuing..."; \
+       else \
+         echo "Aborting the build."; \
+         echo "Check the logs further above for details."; \
+         false; \
+       fi
+# don't continue if RUSTBUILD_TEST_FLAGS is non-empty
+       test -z "$(RUSTBUILD_TEST_FLAGS)"
+endif
+endif
+
+override_dh_auto_test-indep:
+ifeq (, $(filter nocheck,$(DEB_BUILD_PROFILES)))
+ifeq (, $(filter nocheck,$(DEB_BUILD_OPTIONS)))
+ifeq (true,$(BUILD_WASM))
+       # Ignore failures in these tests, but run them so we see what it's like
+       -PATH=$(CURDIR)/debian/bin:$(PATH) $(RUSTBUILD_TEST) $(RUSTBUILD_FLAGS) $(RUSTBUILD_TEST_FLAGS) \
+         --host $(DEB_BUILD_RUST_TYPE) \
+         --target wasm32-unknown-unknown,wasm32-wasi \
+         src/libstd
+endif
+ifeq (true,$(BUILD_DOCS))
+       # Run all rules that test the docs, i.e. that depend on default:doc
+       $(RUSTBUILD_TEST) $(RUSTBUILD_FLAGS) src/tools/linkchecker
+endif
+       test -z "$(RUSTBUILD_TEST_FLAGS)"
+endif
+endif
+
+run_rustbuild:
+       DESTDIR=$(DEB_DESTDIR) $(RUSTBUILD) $(X_CMD) $(RUSTBUILD_FLAGS) $(X_FLAGS)
+
+debian/dh_auto_install.stamp:
+       DESTDIR=$(DEB_DESTDIR) $(RUSTBUILD) install $(RUSTBUILD_FLAGS)
+
+       mkdir -p $(DEB_DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/
+       mv $(DEB_DESTDIR)/usr/lib/lib*.so $(DEB_DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/
+
+       # Replace duplicated compile-time/run-time dylibs with symlinks
+       @set -e; \
+       for f in $(DEB_DESTDIR)/usr/lib/rustlib/$(DEB_HOST_RUST_TYPE)/lib/lib*.so; do \
+         name=$${f##*/}; \
+         if [ -f "$(DEB_DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/$$name" ]; then \
+           echo "ln -sf ../../../$(DEB_HOST_MULTIARCH)/$$name $$f"; \
+           ln -sf ../../../$(DEB_HOST_MULTIARCH)/$$name $$f; \
+         fi; \
+       done
+
+       touch "$@"
+
+override_dh_auto_install-arch: debian/dh_auto_install.stamp
+override_dh_auto_install-indep: debian/dh_auto_install.stamp
+ifeq (true,$(BUILD_WASM))
+       DESTDIR=$(DEB_DESTDIR) $(RUSTBUILD) install $(RUSTBUILD_FLAGS) \
+         --host $(DEB_BUILD_RUST_TYPE) \
+         --target wasm32-unknown-unknown,wasm32-wasi \
+         src/libstd
+endif
+ifeq (true,$(BUILD_DOCS))
+       # Brute force to remove privacy-breach-logo lintian warning.
+       # We could have updated the upstream sources but it would complexify
+       # the rebase
+       @set -e; \
+       find $(DEB_DESTDIR)/usr/share/doc/*/html -iname '*.html' | \
+       while read file; do \
+         topdir=$$(echo "$$file" | sed 's,^$(DEB_DESTDIR)/usr/share/doc/rust/html/,,; s,/[^/]*$$,/,; s,^[^/]*$$,,; s,[^/]\+/,../,g'); \
+         sed -i \
+           -e "s,https://\(doc\|www\).rust-lang.org/\(favicon.ico\|logos/rust-logo-32x32-blk.png\),$${topdir}rust-logo-32x32-blk.png," \
+           -e 's,<img src="https://img.shields.io/[^"]*" alt="\([^"]*\)" />,<span class="deb-privacy-replace--shields-io">\1</span>,g' "$$file"; \
+       done
+       find $(DEB_DESTDIR) \( -iname '*.html' -empty -o -name .lock -o -name '*.inc' \) -delete;
+endif
+
+override_dh_install-arch:
+       dh_install
+       dh_install -p$(LIBSTD_PKG) usr/lib/$(DEB_HOST_MULTIARCH)/
+       dh_install -plibstd-rust-dev usr/lib/rustlib/$(DEB_HOST_RUST_TYPE)/lib/
+
+override_dh_install-indep: debian/rust-src.install debian/rust-src.links
+       dh_install
+ifeq (true,$(BUILD_WASM))
+       dh_install -plibstd-rust-dev-wasm32-cross usr/lib/rustlib/wasm32-*/lib/
+endif
+       chmod -x \
+         debian/rust-gdb/usr/share/rust-gdb/*.py \
+         debian/rust-lldb/usr/share/rust-lldb/*.py
+       $(RM) -rf $(SRC_CLEAN:%=debian/rust-src/usr/src/rustc-$(RUST_LONG_VERSION)/%)
+       # Get rid of lintian warnings
+       find debian/rust-src/usr/src/rustc-$(RUST_LONG_VERSION) \
+               \( -name .gitignore \
+               -o -name 'LICENSE*' \
+               -o -name 'LICENCE' \
+               -o -name 'license' \
+               -o -name 'COPYING*' \
+               \) -delete
+       # Remove files that autoload remote resources, caught by lintian
+       $(RM) -rf debian/rust-src/usr/src/rustc-*/vendor/cssparser/docs/*.html
+       $(RM) -rf debian/rust-src/usr/src/rustc-*/vendor/kuchiki/docs/*.html
+       $(RM) -rf debian/rust-src/usr/src/rustc-*/vendor/url/docs/*.html
+       $(RM) -rf debian/rust-src/usr/src/rustc-*/vendor/xz2/.gitmodules
+
+override_dh_installchangelogs:
+       dh_installchangelogs RELEASES.md
+
+override_dh_installdocs:
+       dh_installdocs -X.tex -X.aux -X.log -X.out -X.toc
+
+override_dh_missing:
+       dh_missing --list-missing
+
+override_dh_compress:
+       dh_compress -X.woff
+
+# The below override is disabled on advice from #debian-devel, because:
+# - only shared libs get the "split dbgsym package" treatment by dh_strip;
+#   static libs simply get their debuginfo discarded
+# - strip(1) sometimes breaks wasm libs
+#
+#override_dh_strip:
+#      # Work around #35733, #468333
+#      find debian/libstd-rust-dev*/ -name '*.rlib' -execdir mv '{}' '{}.a' \;
+#      # This is expected to print out lots of "File format unrecognized" warnings about
+#      # rust.metadata.bin and *.deflate but the .o files inside the rlibs should be stripped
+#      # Some files are still omitted because of #875780 however.
+#      dh_strip -v
+#      find debian/libstd-rust-dev*/ -name '*.rlib.a' -execdir sh -c 'mv "$$1" "$${1%.a}"' - '{}' \;
+
+override_dh_dwz:
+       # otherwise rustc gets an empty multifile which lintian errors on, causing
+       # FTP auto-reject. this is a work-around, the lintian bug is #955752
+       dh_dwz --no-dwz-multifile
+
+override_dh_makeshlibs:
+       dh_makeshlibs -V
+
+       # dh_makeshlibs doesn't support our "libfoo-version.so" naming
+       # structure, so we have to do this ourselves.
+       install -o 0 -g 0 -d debian/$(LIBSTD_PKG)/DEBIAN
+       LC_ALL=C ls debian/$(LIBSTD_PKG)/usr/lib/$(DEB_HOST_MULTIARCH)/lib*.so | \
+       sed -n 's,^.*/\(lib.*\)-\(.\+\)\.so$$,\1 \2,p' | \
+       while read name version; do \
+         echo "$$name $$version $(LIBSTD_PKG) (>= $(DEB_VERSION_UPSTREAM))"; \
+       done > debian/$(LIBSTD_PKG)/DEBIAN/shlibs
+       chmod 644 debian/$(LIBSTD_PKG)/DEBIAN/shlibs
+       chown 0:0 debian/$(LIBSTD_PKG)/DEBIAN/shlibs
+
+override_dh_shlibdeps:
+       dh_shlibdeps -- -x$(LIBSTD_PKG)
+
+QUILT_SPECIAL_SNOWFLAKE_RETURN_CODE = x=$$?; if [ $$x = 2 ]; then exit 0; else exit $$x; fi
+source_orig-stage0:
+       QUILT_PATCHES=debian/patches quilt push -aq; $(QUILT_SPECIAL_SNOWFLAKE_RETURN_CODE)
+       $(MAKE) -f debian/rules clean
+       debian/make_orig-stage0_tarball.sh
+       QUILT_PATCHES=debian/patches quilt pop -aq; $(QUILT_SPECIAL_SNOWFLAKE_RETURN_CODE)
+       rm -rf .pc
+
+get_beta_version = \
+       u="$(DEB_VERSION_UPSTREAM)"; \
+       if [ "$$u" != "$${u%~beta.*+dfsg*}" ]; then \
+       newver=$(shell echo $(RUST_VERSION) | perl -lpe 's/(\d+)\.(\d+)/$$1 . "." . ($$2)/e'); \
+       else \
+       newver=$(shell echo $(RUST_VERSION) | perl -lpe 's/(\d+)\.(\d+)/$$1 . "." . ($$2+1)/e'); \
+       fi
+
+debian/watch-beta: debian/watch-beta.in debian/rules
+       set -e; $(get_beta_version); \
+       m4 -DOLDVER="$$oldver" -DNEWVER="$$newver.0" "$<" > "$@"
+
+source_orig-beta: debian/watch-beta
+       uscan $(USCAN_OPTS) $(if $(USCAN_DESTDIR),--destdir=$(USCAN_DESTDIR),) --verbose --watchfile "$<"
+       set -e; $(get_beta_version); \
+       bd="$(if $(USCAN_DESTDIR),$(USCAN_DESTDIR),..)"; \
+       tar xf $$bd/rustc-$$newver.0-beta.999-src.tar.xz rustc-beta-src/version; \
+       bv="$$(sed -re 's/[0-9]+.[0-9]+.[0-9]+-beta.([0-9]+) \(.*\)/\1/g' rustc-beta-src/version)"; \
+       bash -c 'shopt -s nullglob; for i in '"$$bd"'/rustc*beta.999*; do mv $$i $${i/beta.999/beta.'"$$bv"'}; done'; \
+       rm -f rustc-beta-src/version; \
+       rmdir -p rustc-beta-src; \
+       echo "prepared rustc $$newver.0~beta.$$bv in $$bd"
diff --git a/rust-doc.doc-base.book b/rust-doc.doc-base.book
new file mode 100644 (file)
index 0000000..80c3e08
--- /dev/null
@@ -0,0 +1,13 @@
+Document: rust-book
+Title: The Rust Programming Language
+Section: Programming/Rust
+Abstract:
+ This book will teach you about the Rust Programming Language. Rust is
+ a modern systems programming language focusing on safety and speed. It
+ accomplishes these goals by being memory safe without using garbage
+ collection.
+
+Format: HTML
+Index: /usr/share/doc/rust-doc/html/book/index.html
+Files: /usr/share/doc/rust-doc/html/book/*.html
+       /usr/share/doc/rust-doc/html/book/*/*.html
diff --git a/rust-doc.doc-base.reference b/rust-doc.doc-base.reference
new file mode 100644 (file)
index 0000000..a538f8b
--- /dev/null
@@ -0,0 +1,11 @@
+Document: rust-reference
+Title: The Rust Reference
+Section: Programming/Rust
+Abstract:
+ This document is the primary reference for the Rust programming
+ language.
+
+Format: HTML
+Index: /usr/share/doc/rust-doc/html/reference/index.html
+Files: /usr/share/doc/rust-doc/html/reference/*.html
+       /usr/share/doc/rust-doc/html/reference/*/*.html
diff --git a/rust-doc.docs b/rust-doc.docs
new file mode 100644 (file)
index 0000000..5a0e189
--- /dev/null
@@ -0,0 +1 @@
+debian/tmp/usr/share/doc/rust/html
diff --git a/rust-doc.install b/rust-doc.install
new file mode 100644 (file)
index 0000000..de6024b
--- /dev/null
@@ -0,0 +1 @@
+debian/icons/rust-logo-32x32-blk.png usr/share/doc/rust-doc/html/
diff --git a/rust-doc.links b/rust-doc.links
new file mode 100644 (file)
index 0000000..499b8b6
--- /dev/null
@@ -0,0 +1,10 @@
+# This should eventually become part of a dh_rustdoc program.
+# Something that does e.g.
+# find $(DESTDIR) -name jquery.js -execdir ln -sf -T \
+#        /usr/share/doc/rust-doc/html/jquery.js '{}' \;
+usr/share/javascript/jquery/jquery.min.js                             usr/share/doc/rust-doc/html/jquery.min.js
+usr/share/javascript/mathjax                                          usr/share/doc/rust-doc/html/mathjax
+usr/share/javascript/highlight.js/styles/atelier-dune-light.css       usr/share/doc/rust-doc/html/highlight.css
+usr/share/javascript/highlight.js/highlight.js                        usr/share/doc/rust-doc/html/highlight.js
+usr/share/fonts-font-awesome/css/font-awesome.min.css                 usr/share/doc/rust-doc/html/font-awesome.min.css
+usr/share/fonts-font-awesome/fonts                                    usr/share/doc/rust-doc/fonts
diff --git a/rust-gdb.install b/rust-gdb.install
new file mode 100644 (file)
index 0000000..d274b0b
--- /dev/null
@@ -0,0 +1,3 @@
+src/etc/rust-gdb usr/bin/
+src/etc/gdb_*.py usr/share/rust-gdb/
+src/etc/debugger_pretty_printers_common.py usr/share/rust-gdb/
diff --git a/rust-gdb.links b/rust-gdb.links
new file mode 100644 (file)
index 0000000..51b82a4
--- /dev/null
@@ -0,0 +1 @@
+usr/share/man/man1/gdb.1.gz usr/share/man/man1/rust-gdb.1.gz
diff --git a/rust-lldb.install b/rust-lldb.install
new file mode 100644 (file)
index 0000000..a48bbb6
--- /dev/null
@@ -0,0 +1,3 @@
+src/etc/rust-lldb usr/bin/
+src/etc/lldb_rust_formatters.py usr/share/rust-lldb/
+src/etc/debugger_pretty_printers_common.py usr/share/rust-lldb/
diff --git a/rust-lldb.links b/rust-lldb.links
new file mode 100644 (file)
index 0000000..094906a
--- /dev/null
@@ -0,0 +1 @@
+usr/share/man/man1/lldb-10.1.gz usr/share/man/man1/rust-lldb.1.gz
diff --git a/rust-src.install.in b/rust-src.install.in
new file mode 100644 (file)
index 0000000..ab77d40
--- /dev/null
@@ -0,0 +1,13 @@
+debian/patches  usr/src/rustc-RUST_LONG_VERSION/debian
+# from src/bootstrap/dist.rs:370 onwards
+COPYRIGHT       usr/src/rustc-RUST_LONG_VERSION
+LICENSE-APACHE  usr/src/rustc-RUST_LONG_VERSION
+LICENSE-MIT     usr/src/rustc-RUST_LONG_VERSION
+CONTRIBUTING.md usr/src/rustc-RUST_LONG_VERSION
+README.md       usr/src/rustc-RUST_LONG_VERSION
+RELEASES.md     usr/src/rustc-RUST_LONG_VERSION
+configure       usr/src/rustc-RUST_LONG_VERSION
+x.py            usr/src/rustc-RUST_LONG_VERSION
+config.toml.example    usr/src/rustc-RUST_LONG_VERSION
+Cargo.toml      usr/src/rustc-RUST_LONG_VERSION
+src             usr/src/rustc-RUST_LONG_VERSION
diff --git a/rust-src.links.in b/rust-src.links.in
new file mode 100644 (file)
index 0000000..d323933
--- /dev/null
@@ -0,0 +1 @@
+usr/src/rustc-RUST_LONG_VERSION usr/lib/rustlib/src/rust
diff --git a/rust-src.lintian-overrides b/rust-src.lintian-overrides
new file mode 100644 (file)
index 0000000..ecdd836
--- /dev/null
@@ -0,0 +1,4 @@
+# False positives that change quite often, so just override with a wildcard
+rust-src binary: executable-not-elf-or-script usr/src/rustc-*/*
+rust-src binary: privacy-breach-generic usr/src/rustc-*/*
+rust-src binary: package-contains-eslint-config-file usr/src/rustc-*/src/librustdoc/html/static/.eslintrc.js
diff --git a/rustc.install b/rustc.install
new file mode 100644 (file)
index 0000000..c289154
--- /dev/null
@@ -0,0 +1,3 @@
+usr/bin/rustc
+usr/bin/rustdoc
+debian/architecture.mk usr/share/rustc/
diff --git a/rustc.links b/rustc.links
new file mode 100644 (file)
index 0000000..792007d
--- /dev/null
@@ -0,0 +1 @@
+usr/bin/lld-10 usr/bin/rust-lld
diff --git a/rustc.manpages b/rustc.manpages
new file mode 100644 (file)
index 0000000..f153792
--- /dev/null
@@ -0,0 +1,3 @@
+debian/tmp/usr/share/man/man1/rustc.1
+debian/tmp/usr/share/man/man1/rustdoc.1
+
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/source/include-binaries b/source/include-binaries
new file mode 100644 (file)
index 0000000..33bec95
--- /dev/null
@@ -0,0 +1,6 @@
+debian/icons/rust-logo-32x32-blk.png
+# if you are here because dpkg-source told you to "add stage0/rustc-** in d/source/include-binaries",
+# ignore that instruction and instead:
+# a) if you want to use the orig-stage0 for your next upload, then extract it into stage0/
+# b) if you don't want to use it, then rename "../rustc_${version}.orig-stage0.tar.xz" to something else
+# see also d/source/options and d/source/local-options and #577113.
diff --git a/source/lintian-overrides b/source/lintian-overrides
new file mode 100644 (file)
index 0000000..deef4ad
--- /dev/null
@@ -0,0 +1,7 @@
+# Long documentation
+rustc source: source-is-missing src/stdarch/crates/stdarch-verify/arm-intrinsics.html line length is * characters (>*)
+# Test data
+rustc source: source-is-missing vendor/minifier/tests/files/minified_main.js line length is * characters (>*)
+# Lintian out-of-date
+rustc source: invalid-profile-name-in-build-profiles-field nowasm *
+rustc source: invalid-profile-name-in-source-relation nowasm *
diff --git a/source/options b/source/options
new file mode 100644 (file)
index 0000000..8a8c93f
--- /dev/null
@@ -0,0 +1,4 @@
+# this helps to prevent accidentally including the orig-stage0 tarball in a non
+# orig-stage0 upload, after running `debian/rules source_orig-stage0`.
+# we can get rid of this after #577113 is fixed
+include-removal
diff --git a/update-version.sh b/update-version.sh
new file mode 100755 (executable)
index 0000000..512e7c1
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Don't run this directly, use "debian/rules update-version" instead
+
+prev_stable() {
+local V=$1
+python3 -c 'import sys; k=list(map(int,sys.argv[1].split("."))); k[1]-=1; print(".".join(map(str,k)))' "$V"
+}
+
+cargo_new() {
+local V=$1
+python3 -c 'import sys; k=list(map(int,sys.argv[1].split("."))); k[1]+='"${2:-1}"'; k[0]-=1; print(".".join(map(str,k)))' "$V"
+}
+
+update() {
+local ORIG=$1 NEW=$2 NEW_LONG=$3
+local CARGO_NEW=${4:-$(cargo_new $NEW)}
+local CARGO_NEXT=${4:-$(cargo_new $NEW 2)}
+
+ORIG_M1=$(prev_stable $ORIG)
+NEW_M1=$(prev_stable $NEW)
+ORIG_R="${ORIG/./\\.}" # match a literal dot, otherwise this might sometimes match e.g. debhelper (>= 9.20141010)
+
+WASI_CI="$(grep -Rl "git clone https://github.com/CraneStation/wasi-libc" ../src/ci | head -n1)"
+WASI_COMMIT="$(egrep -o '\b[0-9A-Fa-f]{7}' "$WASI_CI")"
+WASI_REGEX='wasi-libc \(([><=]+) 0.0~git([0-9]+).([0-9a-f]+)([~+]+)\)'
+
+if [ -z "$WASI_COMMIT" -o "$(printf '%s\n' "$WASI_COMMIT" | wc -l)" != 1 ]; then
+  echo >&2 "error: could not determine unique WASI_COMMIT ($WASI_COMMIT), please figure it out from src/ci and update my logic"
+  exit 1
+fi
+
+WASI_COMMIT_OLD="$(sed -nre 's|.*'"${WASI_REGEX}"'.*|\3|gp' control | sort -u)"
+if [ -z "$WASI_COMMIT_OLD"  -o "$(printf '%s\n' "$WASI_COMMIT_OLD" | wc -l)" != 1 ]; then
+  echo >&2 "error: could not determine unique WASI_COMMIT_OLD ($WASI_COMMIT_OLD), please figure it out from debian/control and update my logic"
+  exit 1
+fi
+
+sed -i -e "s|libstd-rust-${ORIG_R}|libstd-rust-$NEW|g" \
+       -e "s|rustc:native\( *\)(<= [^)]*)|rustc:native\1(<= $NEW_LONG++)|g" \
+       -e "s|rustc:native\( *\)(>= ${ORIG_M1/./\\.}|rustc:native\1(>= ${NEW_M1}|g" \
+       -e "s|cargo\( *\)(>= [^)]*)|cargo\1(>= ${CARGO_NEW}.0~~)|g" \
+       -e "s|cargo\( *\)(<< [^)]*)|cargo\1(<< ${CARGO_NEXT}.0~~)|g" \
+       control
+
+if [ "$WASI_COMMIT" != "$WASI_COMMIT_OLD" ]; then
+  sed -ri -e 's|'"${WASI_REGEX}"'|wasi-libc (\1 0.0~gitFIXME.'"${WASI_COMMIT}"'\4)|g' control
+  echo >&2 "note: the version of the wasi-libc Build-Depends has changed and needs to be FIXME with the correct date"
+  echo >&2 "please update that package, upload it to experimental, and supply the correct date in debian/control"
+fi
+
+if [ "$NEW" != "$ORIG" ]; then
+git mv libstd-rust-$ORIG.lintian-overrides libstd-rust-$NEW.lintian-overrides
+fi
+sed -i -e "s|libstd-rust-${ORIG_R}|libstd-rust-$NEW|g" libstd-rust-$NEW.lintian-overrides
+}
+
+cd $(dirname "$0")
+update "$@"
diff --git a/upstream-tarball-unsuspicious.txt b/upstream-tarball-unsuspicious.txt
new file mode 100644 (file)
index 0000000..347b327
--- /dev/null
@@ -0,0 +1,228 @@
+## In this file we list false-positives of the check-orig-suspicious.sh script
+# so that they can be ignored. You should manually audit all of the files here
+# to confirm that they adhere to Debian Policy and the DFSG. In particular, if
+# you are blindly adding files here just to get the build to work, you are
+# probably Doing It Wrong. Ask in #debian-rust or the mailing list for pointers.
+
+# False-positive, very small so suspicious-source thinks "octet-stream"
+src/test/run-pass/raw-str.rs
+
+# False-positive, file(1) misidentifies mime type
+src/ci/docker/*/patches/glibc/*/*.patch
+vendor/itertools*/examples/iris.data
+vendor/regex/tests/unicode.rs
+vendor/regex/tests/suffix_reverse.rs
+
+# False-positive, "verylongtext" but OK
+CONTRIBUTING.md
+src/doc/book/first-edition/src/the-stack-and-the-heap.md
+src/doc/book/*/tools/docx-to-md.xsl
+src/doc/embedded-book/src/*/*.md
+src/doc/rust-by-example/src/flow_control/if_let.md
+src/doc/rust-by-example/src/trait/dyn.md
+src/doc/rustc/src/lints/groups.md
+src/doc/rustc/src/targets/known-issues.md
+src/doc/rustc-dev-guide/.travis.yml
+src/doc/rustc-dev-guide/src/*.md
+src/doc/rustc-dev-guide/src/*/*.md
+src/doc/*/CODE_OF_CONDUCT.md
+src/doc/unstable-book/src/*/*.md
+src/etc/third-party/README.txt
+src/librustc_codegen_ssa/README.md
+src/libstd/sys/cloudabi/abi/cloudabi.rs
+src/libstd/os/raw/*.md
+src/libstd/sys/sgx/abi/entry.S
+vendor/*/.travis.yml
+vendor/*/Cargo.toml
+vendor/*/CHANGELOG.md
+vendor/*/CODE_OF_CONDUCT.md
+vendor/*/CONTRIBUTORS.md
+vendor/*/README.md
+vendor/*/README.tpl
+vendor/*/LICENSE
+vendor/*/*/LICENSE
+vendor/*/*/*/LICENSE
+vendor/ammonia/src/lib.rs
+vendor/clap/.github/CONTRIBUTING.md
+vendor/clap/SPONSORS.md
+# ^ author likes to omit line breaks in their comments
+vendor/failure/book/src/bail-and-ensure.md
+# ^ same with this one
+vendor/handlebars/src/lib.rs
+vendor/maplit/README.rst
+vendor/lazy_static/src/lib.rs
+vendor/pulldown-cmark/tests/suite/footnotes.rs
+vendor/pulldown-cmark/third_party/xi-editor/crdt.md
+vendor/pulldown-cmark/specs/footnotes.txt
+vendor/pulldown-cmark-*/tests/suite/footnotes.rs
+vendor/pulldown-cmark-*/third_party/xi-editor/crdt.md
+vendor/pulldown-cmark-*/specs/footnotes.txt
+vendor/rustc-demangle/src/legacy.rs
+vendor/stable_deref_trait/src/lib.rs
+vendor/unicase/src/lib.rs
+vendor/winapi-*/src/winnt.rs
+vendor/winapi/src/lib.rs
+
+# False-positive, audit-vendor-source automatically flags JS/C files
+# The below ones are OK since they're actually part of rust's own source code
+# and are not "embedded libraries".
+src/ci/docker/scripts/qemu-bare-bones-addentropy.c
+src/doc/book/*/ferris.js
+src/doc/book/ferris.js
+src/etc/wasm32-shim.js
+src/grammar/parser-lalr-main.c
+src/librustdoc/html/static/*.js
+src/librustdoc/html/static/.eslintrc.js
+src/test/auxiliary/rust_test_helpers.c
+src/test/run-make/wasm-*/*.js
+src/test/run-make-fulldeps/*.c
+src/test/run-make-fulldeps/*/*.c
+src/test/rustdoc-js/*.js
+src/test/rustdoc-js-std/*.js
+src/tools/rustdoc-js/tester.js
+src/tools/rustdoc-js-std/tester.js
+vendor/stacker/src/arch/windows.c
+
+# Embedded libraries, justified in README.source
+vendor/backtrace-sys/src/libbacktrace/configure
+vendor/backtrace-sys/src/libbacktrace/config/libtool.m4
+vendor/backtrace-sys/src/libbacktrace/*.c
+vendor/backtrace-sys/src/android-api.c
+vendor/compiler_builtins/compiler-rt/lib/BlocksRuntime/*.c
+vendor/compiler_builtins/compiler-rt/lib/builtins/*.c
+vendor/compiler_builtins/compiler-rt/lib/builtins/*/*.c
+vendor/compiler_builtins/compiler-rt/utils/generate_*.awk
+vendor/dlmalloc/src/dlmalloc.c
+vendor/mdbook/src/theme/book.js
+vendor/mdbook/src/theme/searcher/searcher.js
+vendor/walkdir/compare/nftw.c
+vendor/walkdir-*/compare/nftw.c
+
+# False-positive, misc
+src/doc/rustc-dev-guide/src/queries/example-0.counts.txt
+src/stdarch/.travis.yml
+src/stdarch/crates/core_arch/foo.wasm
+src/test/run-make-fulldeps/target-specs/*.json
+src/test/run-make-fulldeps/libtest-json/output.json
+vendor/backtrace-sys/src/libbacktrace/libtool.m4
+vendor/clap/.mention-bot
+vendor/cloudabi/cloudabi.rs
+vendor/elasticlunr-rs/src/lang/*.rs
+vendor/markup5ever/data/entities.json
+vendor/num/ci/deploy.enc
+vendor/term-0*/scripts/id_rsa.enc
+
+# False-positive, hand-editable small image
+src/etc/installer/gfx/
+src/doc/embedded-book/src/assets/*.svg
+src/doc/embedded-book/src/assets/f3.jpg
+src/doc/embedded-book/src/assets/nrf52-memory-map.png
+src/doc/embedded-book/src/assets/nrf52-spi-frequency-register.png
+src/doc/embedded-book/src/assets/verify.jpeg
+src/doc/nomicon/src/img/safeandunsafe.svg
+src/doc/book/second-edition/src/img/*.png
+src/doc/book/second-edition/src/img/*.svg
+src/doc/book/src/img/ferris/*.svg
+src/doc/book/src/img/*.png
+src/doc/book/src/img/*.svg
+src/doc/book/2018-edition/src/img/ferris/*.svg
+src/doc/book/2018-edition/src/img/*.svg
+src/doc/book/2018-edition/src/img/*.png
+src/doc/book/tools/docx-to-md.xsl
+src/doc/rustc-dev-guide/src/img/rustc_stages.svg
+src/doc/rustc-dev-guide/src/queries/example-0.png
+src/librustdoc/html/static/*.svg
+src/librustdoc/html/static/rust-logo.png
+src/librustdoc/html/static/favicon.ico
+vendor/difference/assets/*.png
+vendor/fortanix-sgx-abi/images/enclave-execution-lifecycle.png
+vendor/heck/no_step_on_snek.png
+vendor/mdbook/src/theme/favicon.png
+vendor/num/doc/favicon.ico
+vendor/num/doc/rust-logo-128x128-blk-v2.png
+vendor/pest/pest-logo.svg
+vendor/pretty_assertions/examples/*.png
+vendor/termion/logo.svg
+
+# Example code
+vendor/html5ever/examples/capi/tokenize.c
+
+# Test data
+src/stdarch/ci/gba.json
+src/stdarch/crates/stdarch-verify/arm-intrinsics.html
+src/stdarch/crates/stdarch-verify/x86-intel.xml
+src/stdarch/crates/std_detect/src/detect/test_data/*.auxv
+src/test/compile-fail/not-utf8.bin
+src/test/mir-opt/*/*.mir
+src/test/mir-opt/*/*.diff
+src/test/mir-opt/*/*/*.mir
+src/test/mir-opt/*/*/*.diff
+src/test/mir-opt/*/*/*/*.mir
+src/test/mir-opt/*/*/*/*.diff
+src/test/*/*.rs
+src/test/*/issues/*.rs
+src/test/*/*/issue-*.rs
+src/test/*/*/issues/*.rs
+src/test/*/*.stderr
+src/test/*/*/*.json
+src/test/*/*/*.stderr
+src/test/*/*/*.stdout
+src/test/*/*/*/*.stderr
+src/test/ui/terminal-width/non-whitespace-trimming*.rs
+src/tools/*/tests/*/*.stderr
+vendor/bstr/src/unicode/data/*Test.txt
+vendor/cssparser/src/css-parsing-tests/*.json
+vendor/cssparser/src/big-data-url.css
+vendor/elasticlunr-rs/tests/data/tr.in.txt
+vendor/flate2/tests/*.gz
+vendor/idna/tests/IdnaTest.txt
+vendor/idna/tests/punycode_tests.json
+vendor/idna-0*/tests/IdnaTest.txt
+vendor/idna-0*/tests/punycode_tests.json
+vendor/itertools/examples/iris.data
+vendor/html5ever/data/bench/*.html
+vendor/html5ever/html5lib-tests/*/*.dat
+vendor/html5ever/html5lib-tests/*/*.test
+vendor/libz-sys/src/smoke.c
+vendor/md-5/tests/data/*.blb
+vendor/md-5/tests/data/*.bin
+vendor/mdbook/src/theme/searcher/searcher.js
+vendor/mdbook/tests/searchindex_fixture.json
+vendor/minifier/tests/files/test.json
+vendor/minifier/tests/files/main.js
+vendor/minifier/tests/files/minified_main.js
+vendor/pest/benches/data.json
+vendor/pretty_assertions/src/format_changeset.rs
+vendor/regex/src/testdata/basic.dat
+vendor/regex/tests/crates_regex.rs
+vendor/regex/tests/fowler.rs
+vendor/regex-0*/src/testdata/basic.dat
+vendor/regex-0*/tests/fowler.rs
+vendor/rustc-demangle/src/lib.rs
+vendor/sha-1/tests/data/*.blb
+vendor/sha-1/tests/data/*.bin
+vendor/tar/tests/archives/*.tar
+vendor/term-0*/tests/data/*
+vendor/toml/tests/*/*.toml
+vendor/toml/tests/*/*.json
+vendor/unicode-segmentation/src/testdata.rs
+vendor/url/tests/*.json
+vendor/url-1*/tests/*.json
+vendor/yaml-rust/tests/specexamples.rs.inc
+vendor/yaml-rust-0*/tests/specexamples.rs.inc
+vendor/ucd-parse/src/sentence_break.rs
+
+# Compromise, ideally we'd autogenerate these
+# Should already by documented in debian/copyright
+src/doc/rustc-dev-guide/src/mir/mir_*.svg
+src/librustdoc/html/static/normalize.css
+vendor/pest_meta/src/grammar.rs
+vendor/unicode-normalization/src/tables.rs
+vendor/unicode-script/src/tables.rs
+vendor/unicode-segmentation/src/tables.rs
+
+# Compromise, ideally we'd package these in their own package
+src/librustdoc/html/static/*.woff
+
+# Compromise, ideally we'd autogenerate these
+vendor/bstr/src/unicode/fsm/*.dfa
diff --git a/upstream/signing-key.asc b/upstream/signing-key.asc
new file mode 100644 (file)
index 0000000..93e2282
--- /dev/null
@@ -0,0 +1,86 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+mQINBFJEwMkBEADlPACa2K7reD4x5zd8afKx75QYKmxqZwywRbgeICeD4bKiQoJZ
+dUjmn1LgrGaXuBMKXJQhyA34e/1YZel/8et+HPE5XpljBfNYXWbVocE1UMUTnFU9
+CKXa4AhJ33f7we2/QmNRMUifw5adPwGMg4D8cDKXk02NdnqQlmFByv0vSaArR5kn
+gZKnLY6o0zZ9Buyy761Im/ShXqv4ATUgYiFc48z33G4j+BDmn0ryGr1aFdP58tHp
+gjWtLZs0iWeFNRDYDje6ODyu/MjOyuAWb2pYDH47Xu7XedMZzenH2TLM9yt/hyOV
+xReDPhvoGkaO8xqHioJMoPQi1gBjuBeewmFyTSPS4deASukhCFOcTsw/enzJagiS
+ZAq6Imehduke+peAL1z4PuRmzDPO2LPhVS7CDXtuKAYqUV2YakTq8MZUempVhw5n
+LqVaJ5/XiyOcv405PnkT25eIVVVghxAgyz6bOU/UMjGQYlkUxI7YZ9tdreLlFyPR
+OUL30E8q/aCd4PGJV24yJ1uit+yS8xjyUiMKm4J7oMP2XdBN98TUfLGw7SKeAxyU
+92BHlxg7yyPfI4TglsCzoSgEIV6xoGOVRRCYlGzSjUfz0bCMCclhTQRBkegKcjB3
+sMTyG3SPZbjTlCqrFHy13e6hGl37Nhs8/MvXUysq2cluEISn5bivTKEeeQARAQAB
+tERSdXN0IExhbmd1YWdlIChUYWcgYW5kIFJlbGVhc2UgU2lnbmluZyBLZXkpIDxy
+dXN0LWtleUBydXN0LWxhbmcub3JnPokCOAQTAQIAIgUCUkTAyQIbAwYLCQgHAwIG
+FQgCCQoLBBYCAwECHgECF4AACgkQhauW5vob5f5fYQ//b1DWK1NSGx5nZ3zYZeHJ
+9mwGCftIaA2IRghAGrNf4Y8DaPqR+w1OdIegWn8kCoGfPfGAVW5XXJg+Oxk6QIaD
+2hJojBUrq1DALeCZVewzTVw6BN4DGuUexsc53a8DcY2Yk5WE3ll6UKq/YPiWiPNX
+9r8FE2MJwMABB6mWZLqJeg4RCrriBiCG26NZxGE7RTtPHyppoVxWKAFDiWyNdJ+3
+UnjldWrT9xFqjqfXWw9Bhz8/EoaGeSSbMIAQDkQQpp1SWpljpgqvctZlc5fHhsG6
+lmzW5RM4NG8OKvq3UrBihvgzwrIfoEDKpXbk3DXqaSs1o81NH5ftVWWbJp/ywM9Q
+uMC6n0YWiMZMQ1cFBy7tukpMkd+VPbPkiSwBhPkfZIzUAWd74nanN5SKBtcnymgJ
++OJcxfZLiUkXRj0aUT1GLA9/7wnikhJI+RvwRfHBgrssXBKNPOfXGWajtIAmZc2t
+kR1E8zjBVLId7r5M8g52HKk+J+y5fVgJY91nxG0zf782JjtYuz9+knQd55JLFJCO
+hhbv3uRvhvkqgauHagR5X9vCMtcvqDseK7LXrRaOdOUDrK/Zg/abi5d+NIyZfEt/
+ObFsv3idAIe/zpU6xa1nYNe3+Ixlb6mlZm3WCWGxWe+GvNW/kq36jZ/v/8pYMyVO
+p/kJqnf9y4dbufuYBg+RLqC5Ag0EUkTAyQEQANxy2tTSeRspfrpBk9+ju+KZ3zc4
+umaIsEa5DxJ2zIKHywVAR67Um0K1YRG07/F5+tD9TIRkdx2pcmpjmSQzqdk3zqa9
+2Zzeijjz2RNyBY8qYmyE08IncjTsFFB8OnvdXcsAgjCFmI1BKnePxrABL/2k8X18
+aysPb0beWqQVsi5FsSpAHu6k1kaLKc+130x6Hf/YJAjeo+S7HeU5NeOz3zD+h5bA
+Q25qMiVHX3FwH7rFKZtFFog9Ogjzi0TkDKKxoeFKyADfIdteJWFjOlCI9KoIhfXq
+Et9JMnxApGqsJElJtfQjIdhMN4Lnep2WkudHAfwJ/412fe7wiW0rcBMvr/BlBGRY
+vM4sTgN058EwIuY9Qmc8RK4gbBf6GsfGNJjWozJ5XmXElmkQCAvbQFoAfi5TGfVb
+77QQrhrQlSpfIYrvfpvjYoqj618SbU6uBhzh758gLllmMB8LOhxWtq9eyn1rMWyR
+KL1fEkfvvMc78zP+Px6yDMa6UIez8jZXQ87Zou9EriLbzF4QfIYAqR9LUSMnLk6K
+o61tSFmFEDobC3tc1jkSg4zZe/wxskn96KOlmnxgMGO0vJ7ASrynoxEnQE8k3WwA
++/YJDwboIR7zDwTy3Jw3mn1FgnH+c7Rb9h9geOzxKYINBFz5Hd0MKx7kZ1U6WobW
+KiYYxcCmoEeguSPHABEBAAGJAh8EGAECAAkFAlJEwMkCGwwACgkQhauW5vob5f7f
+FA//Ra+itJF4NsEyyhx4xYDOPq4uj0VWVjLdabDvFjQtbBLwIyh2bm8uO3AY4r/r
+rM5WWQ8oIXQ2vvXpAQO9g8iNlFez6OLzbfdSG80AG74pQqVVVyCQxD7FanB/KGge
+tAoOstFxaCAg4nxFlarMctFqOOXCFkylWl504JVIOvgbbbyj6I7qCUmbmqazBSMU
+K8c/Nz+FNu2Uf/lYWOeGogRSBgS0CVBcbmPUpnDHLxZWNXDWQOCxbhA1Uf58hcyu
+036kkiWHh2OGgJqlo2WIraPXx1cGw1Ey+U6exbtrZfE5kM9pZzRG7ZY83CXpYWMp
+kyVXNWmf9JcIWWBrXvJmMi0FDvtgg3Pt1tnoxqdilk6yhieFc8LqBn6CZgFUBk0t
+NSaWk3PsN0N6Ut8VXY6sai7MJ0Gih1gE1xadWj2zfZ9sLGyt2jZ6wK++U881YeXA
+ryaGKJ8sIs182hwQb4qN7eiUHzLtIh8oVBHo8Q4BJSat88E5/gOD6IQIpxc42iRL
+T+oNZw1hdwNyPOT1GMkkn86l3o7klwmQUWCPm6vl1aHp3omo+GHC63PpNFO5RncJ
+Ilo3aBKKmoE5lDSMGE8KFso5awTo9z9QnVPkRsk6qeBYit9xE3x3S+iwjcSg0nie
+aAkc0N00nc9V9jfPvt4z/5A5vjHh+NhFwH5h2vBJVPdsz6m5Ag0EVI9keAEQAL3R
+oVsHncJTmjHfBOV4JJsvCum4DuJDZ/rDdxauGcjMUWZaG338ZehnDqG1Yn/ys7zE
+aKYUmqyT+XP+M2IAQRTyxwlU1RsDlemQfWrESfZQCCmbnFScL0E7cBzy4xvtInQe
+UaFgJZ1BmxbzQrx+eBBdOTDv7RLnNVygRmMzmkDhxO1IGEu1+3ETIg/DxFE7VQY0
+It/Ywz+nHu1o4Hemc/GdKxu9hcYvcRVc/Xhueq/zcIM96l0m+CFbs0HMKCj8dgMe
+Ng6pbbDjNM+cV+5BgpRdIpE2l9W7ImpbLihqcZt47J6oWt/RDRVoKOzRxjhULVyV
+2VP9ESr48HnbvxcpvUAEDCQUhsGpur4EKHFJ9AmQ4zf91gWLrDc6QmlACn9o9ARU
+fOV5aFsZI9ni1MJEInJTP37stz/uDECRie4LTL4O6P4Dkto8ROM2wzZq5CiRNfnT
+PP7ARfxlCkpg+gpLYRlxGUvRn6EeYwDtiMQJUQPfpGHSvThUlgDEsDrpp4SQSmdA
+CB+rvaRqCawWKoXs0In/9wylGorRUupeqGC0I0/rh+f5mayFvORzwy/4KK4QIEV9
+aYTXTvSRl35MevfXU1Cumlaqle6SDkLr3ZnFQgJBqap0Y+Nmmz2HfO/pohsbtHPX
+92SN3dKqaoSBvzNGY5WT3CsqxDtik37kR3f9/DHpABEBAAGJBD4EGAECAAkFAlSP
+ZHgCGwICKQkQhauW5vob5f7BXSAEGQECAAYFAlSPZHgACgkQXLSpNHs7CdwemA/+
+KFoGuFqU0uKT9qblN4ugRyil5itmTRVffl4tm5OoWkW8uDnu7Ue3vzdzy+9NV8X2
+wRG835qjXijWP++AGuxgW6LB9nV5OWiKMCHOWnUjJQ6pNQMAgSN69QzkFXVF/q5f
+bkma9TgSbwjrVMyPzLSRwq7HsT3V02Qfr4cyq39QeILGy/NHW5z6LZnBy3BaVSd0
+lGjCEc3yfH5OaB79na4W86WCV5n4IT7cojFM+LdL6P46RgmEtWSG3/CDjnJl6BLR
+WqatRNBWLIMKMpn+YvOOL9TwuP1xbqWr1vZ66wksm53NIDcWhptpp0KEuzbU0/Dt
+OltBhcX8tOmO36LrSadX9rwckSETCVYklmpAHNxPml011YNDThtBidvsicw1vZwR
+HsXn+txlL6RAIRN+J/Rw3uOiJAqN9Qgedpx2q+E15t8MiTg/FXtB9SysnskFT/BH
+z0USNKJUY0btZBw3eXWzUnZf59D8VW1M/9JwznCHAx0c9wy/gRDiwt9w4RoXryJD
+VAwZg8rwByjldoiThUJhkCYvJ0R3xH3kPnPlGXDW49E9R8C2umRC3cYOL4U9dOQ1
+5hSlYydF5urFGCLIvodtE9q80uhpyt8L/5jj9tbwZWv6JLnfBquZSnCGqFZRfXlb
+Jphk9+CBQWwiZSRLZRzqQ4ffl4xyLuolx01PMaatkQbRaw/+JpgRNlurKQ0PsTrO
+8tztO/tpBBj/huc2DGkSwEWvkfWElS5RLDKdoMVs/j5CLYUJzZVikUJRm7m7b+OA
+P3W1nbDhuID+XV1CSBmGifQwpoPTys21stTIGLgznJrIfE5moFviOLqD/LrcYlsq
+CQg0yleu7SjOs//8dM3mC2FyLaE/dCZ8l2DCLhHw0+ynyRAvSK6aGCmZz6jMjmYF
+MXgiy7zESksMnVFMulIJJhR3eB0wx2GitibjY/ZhQ7tD3i0yy9ILR07dFz4pgkVM
+afxpVR7fmrMZ0t+yENd+9qzyAZs0ksxORoc2ze90SCx2jwEX/3K+m4I0hP2H/w5W
+gqdvuRLiqf+4BGW4zqWkLLlNIe/okt0r82SwHtDN0Ui1asmZTGj6sm8SXtwx+5cE
+38MttWqjDiibQOSthRVcETByRYM8KcjYSUCi4PoBc3NpDONkFbZm6XofR/f5mTcl
+2jDw6fIeVc4Hd1jBGajNzEqtneqqbdAkPQaLsuD2TMkQfTDJfE/IljwjrhDa9Mi+
+odtnMWq8vlwOZZ24/8/BNK5qXuCYL67O7AJB4ZQ6BT+g4z96iRLbupzu/XJyXkQF
+rOY/Ghegvn7fDrnt2KC9MpgeFBXzUp+k5rzUdF8jbCx5apVjA1sWXB9Kh3L+DUwF
+Mve696B5tlHyc1KxjHR6w9GRsh4=
+=5FXw
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/watch b/watch
new file mode 100644 (file)
index 0000000..8dd007c
--- /dev/null
+++ b/watch
@@ -0,0 +1,17 @@
+version=4
+# if you need to download other versions replace the URL below with this one:
+# https://static.rust-lang.org/dist/index.html
+# it's a bit slower to download, that's why we use the other one normally
+
+opts="\
+pgpsigurlmangle=s/$/.asc/,\
+uversionmangle=s/(\d)[_.+-]?((beta|alpha)\.?\d*)$/$1~$2/,\
+dversionmangle=s/\+dfsg\d*$//,\
+downloadurlmangle=s/\.[gx]z/.xz/,\
+filenamemangle=s/.*\/(.*)\.[gx]z(\..*)?/$1.xz$2/,\
+repack,\
+repacksuffix=+dfsg1,\
+compression=xz,\
+" \
+ https://forge.rust-lang.org/infra/other-installation-methods.html \
+ (?:.*/)rustc?-(\d[\d.]*(?:-[\w.]+)?)-src\.tar\.[gx]z
diff --git a/watch-beta.in b/watch-beta.in
new file mode 100644 (file)
index 0000000..c492cee
--- /dev/null
@@ -0,0 +1,17 @@
+version=4
+# if you need to download other versions replace the URL below with this one:
+# https://static.rust-lang.org/dist/index.html
+# it's a bit slower to download, that's why we use the other one normally
+
+opts="\
+pgpsigurlmangle=s/$/.asc/,\
+uversionmangle=s/.*/NEWVER~beta.999/,\
+dversionmangle=s/\+dfsg\d*$//,\
+downloadurlmangle=s/rustc-.*-(.*)\.[gx]z/rustc-beta-$1.xz/,\
+filenamemangle=s/.*\/(.*)-[^-]*-(.*)\.[gx]z(\..*)?/$1-NEWVER-beta.999-$2.xz$3/,\
+repack,\
+repacksuffix=+dfsg1,\
+compression=xz,\
+" \
+ https://forge.rust-lang.org/other-installation-methods.html \
+ (?:.*/)rustc?-(.*)-src\.tar\.[gx]z