Empowering everyone to build reliable and efficient software.
Go to file
bors 706be5ba1f Auto merge of #21619 - brson:featureck-tidy, r=alexcrichton
Builds on my [feature staging PR](https://github.com/rust-lang/rust/pull/21248) to clean up the tidy scripts a bit, and make them much faster (6s vs ~40s).

Adds make rules 'tidy-basic', 'tidy-binaries', 'tidy-errors' and 'tidy-features'.

This is the output of `make tidy` here:

```
cfg: version 1.0.0-dev (a8c878d41 2015-01-25 01:49:14 -0800)
cfg: build triple x86_64-unknown-linux-gnu
cfg: host triples x86_64-unknown-linux-gnu
cfg: target triples x86_64-unknown-linux-gnu
cfg: host for x86_64-unknown-linux-gnu is x86_64
cfg: os for x86_64-unknown-linux-gnu is unknown-linux-gnu
cfg: good valgrind for x86_64-unknown-linux-gnu is 1
cfg: using CC=gcc (CFG_CC)
cfg: enabling valgrind run-pass tests (CFG_ENABLE_VALGRIND_RPASS)
cfg: valgrind-rpass command set to "/usr/bin/valgrind" --error-exitcode=100 --soname-synonyms=somalloc=NONE --quiet --suppressions=/home/brian/dev/rust3/src/etc/x86.supp  --tool=memcheck --leak-check=full
cfg: no lualatex found, deferring to xelatex
cfg: no xelatex found, deferring to pdflatex
cfg: no pdflatex found, disabling LaTeX docs
cfg: no pandoc found, omitting PDF and EPUB docs
cfg: including test rules
cfg: javac not available, skipping lexer test...
check: formatting

* linted .rs files: 4948
* linted .py files: 27
* linted .js files: 2
* linted .sh files: 5
* linted .pl files: 0
* linted .c files: 28
* linted .h files: 3
* other linted files: 0
* total lines of code: 481217
* total non-blank lines of code: 423682

check: binaries
check: extended errors

* 249 error codes
* highest error code: E0315

check: feature sanity

* advanced_slice_patterns         lang    unstable    None    
* alloc                           lib     unstable    None    
* asm                             lang    unstable    None    
* associated_types                lang    stable      1.0.0   
* box_syntax                      lang    unstable    None    
* collections                     lib     unstable    None    
* concat_idents                   lang    unstable    None    
* core                            lib     unstable    None    
* default_type_params             lang    stable      1.0.0   
* globs                           lang    stable      1.0.0   
* hash                            lib     unstable    None    
* if_let                          lang    stable      1.0.0   
* import_shadowing                lang    unstable    None    
* int_uint                        lang    unstable    None    
* intrinsics                      lang    unstable    None    
* io                              lib     unstable    None    
* issue_5723_bootstrap            lang    stable      1.0.0   
* lang_items                      lang    unstable    None    
* link_args                       lang    unstable    None    
* link_llvm_intrinsics            lang    unstable    None    
* linkage                         lang    unstable    None    
* log_syntax                      lang    unstable    None    
* macro_rules                     lang    stable      1.0.0   
* main                            lang    unstable    None    
* managed_boxes                   lang    unstable    None    
* non_ascii_idents                lang    unstable    None    
* old_impl_check                  lang    unstable    None    
* old_orphan_check                lang    unstable    None    
* on_unimplemented                lang    unstable    None    
* opt_out_copy                    lang    unstable    None    
* optin_builtin_traits            lang    unstable    None    
* os                              lib     unstable    None    
* path                            lib     unstable    None    
* phase                           lang    unstable    None    
* plugin                          lang    unstable    None    
* plugin_registrar                lang    unstable    None    
* quad_precision_float            lang    unstable    None    
* quote                           lang    unstable    None    
* rand                            lib     unstable    None    
* rust1                           lib     stable      1.0.0   
* rustc_diagnostic_macros         lang    unstable    None    
* rustc_private                   lib     unstable    None    
* rustdoc                         lib     unstable    None    
* simd                            lang    unstable    None    
* simd_ffi                        lang    unstable    None    
* slicing_syntax                  lang    unstable    None    
* staged_api                      lang    unstable    None    
* start                           lang    unstable    None    
* std_misc                        lib     unstable    None    
* struct_inherit                  lang    unstable    None    
* struct_variant                  lang    stable      1.0.0   
* test                            lib     unstable    None    
* test_accepted_feature           lang    stable      1.0.0   
* test_removed_feature            lang    unstable    None    
* thread_local                    lang    unstable    None    
* trace_macros                    lang    unstable    None    
* tuple_indexing                  lang    stable      1.0.0   
* unboxed_closures                lang    unstable    None    
* unicode                         lib     unstable    None    
* unsafe_destructor               lang    unstable    None    
* visible_private_types           lang    unstable    None    
* while_let                       lang    stable      1.0.0   
```

There's a lot of informational output now, which comes after things like 'NOTE's.
2015-02-05 23:14:28 +00:00
man rustc: Recognize -L framework=foo 2015-02-04 13:54:49 -08:00
mk mk: Print test summary after tidy when running 'make check' 2015-02-05 14:37:17 -08:00
src Auto merge of #21619 - brson:featureck-tidy, r=alexcrichton 2015-02-05 23:14:28 +00:00
.gitattributes webfonts: proper fix 2014-07-08 20:29:36 +02:00
.gitignore gitignore: Add the autogenerated/downloaded unicode data files. 2014-08-03 17:32:53 +10:00
.gitmodules Use rust-installer for installation 2014-12-11 17:14:17 -08:00
.mailmap Update .mailmap 2014-10-23 23:01:31 +02:00
.travis.yml Allow travis to use newer-faster infrastructure for building. http://blog.travis-ci.com/2014-12-17-faster-builds-with-container-based-infrastructure/ 2015-01-01 02:00:29 -05:00
AUTHORS.txt Correct Orpheus Lummis's email and name 2015-01-28 10:04:56 -05:00
configure openbsd support 2015-02-01 14:41:38 +01:00
CONTRIBUTING.md discuss.rust-lang.org -> internals.rust-lang.org 2015-01-27 15:44:05 -08:00
COPYRIGHT copyright: update paths and entries 2015-01-22 15:45:47 +01:00
LICENSE-APACHE Update license, add license boilerplate to most files. Remainder will follow. 2012-12-03 17:12:14 -08:00
LICENSE-MIT update mit-license and copyright 2015-01-10 23:35:33 -05:00
Makefile.in mk: Add tidy commands to 'make tips' 2015-02-05 14:37:16 -08:00
README.md doc: Add links to users.rust-lang.org 2015-01-29 15:49:00 -08:00
RELEASES.md Link to http://rustbyexample.com/ 2015-01-09 08:25:42 +01:00

The Rust Programming Language

This is a compiler for Rust, including standard libraries, tools and documentation.

Quick Start

  1. Download a binary installer for your platform.
  2. Read The Rust Programming Language.
  3. Enjoy!

Note: Windows users can read the detailed using Rust on Windows notes on the wiki.

Building from Source

  1. Make sure you have installed the dependencies:

    • g++ 4.7 or clang++ 3.x
    • python 2.6 or later (but not 3.x)
    • GNU make 3.81 or later
    • curl
    • git
  2. Download and build Rust:

    You can either download a tarball or build directly from the repo.

    To build from the tarball do:

     $ curl -O https://static.rust-lang.org/dist/rustc-nightly-src.tar.gz
     $ tar -xzf rustc-nightly-src.tar.gz
     $ cd rustc-nightly
    

    Or to build from the repo do:

     $ git clone https://github.com/rust-lang/rust.git
     $ cd rust
    

    Now that you have Rust's source code, you can configure and build it:

     $ ./configure
     $ make && make install
    

    Note: You may need to use sudo make install if you do not normally have permission to modify the destination directory. The install locations can be adjusted by passing a --prefix argument to configure. Various other options are also supported, pass --help for more information on them.

    When complete, make install will place several programs into /usr/local/bin: rustc, the Rust compiler, and rustdoc, the API-documentation tool.

  3. Read The Rust Programming Language.

  4. Enjoy!

Building on Windows

To easily build on windows we can use MSYS2:

  1. Grab the latest MSYS2 installer and go through the installer.
  2. Now from the MSYS2 terminal we want to install the mingw64 toolchain and the other tools we need.
# choose one based on platform
$ pacman -S mingw-w64-i686-toolchain
$ pacman -S mingw-w64-x86_64-toolchain

$ pacman -S base-devel
  1. With that now start mingw32_shell.bat or mingw64_shell.bat from where you installed MSYS2 (i.e. C:\msys). Which one you choose depends on if you want 32 or 64 bit Rust.

  2. From there just navigate to where you have Rust's source code, configure and build it:

     $ ./configure
     $ make && make install
    

Notes

Since the Rust compiler is written in Rust, it must be built by a precompiled "snapshot" version of itself (made in an earlier state of development). As such, source builds require a connection to the Internet, to fetch snapshots, and an OS that can execute the available snapshot binaries.

Snapshot binaries are currently built and tested on several platforms:

  • Windows (7, 8, Server 2008 R2), x86 and x86-64 (64-bit support added in Rust 0.12.0)
  • Linux (2.6.18 or later, various distributions), x86 and x86-64
  • OSX 10.7 (Lion) or greater, x86 and x86-64

You may find that other platforms work, but these are our officially supported build environments that are most likely to work.

Rust currently needs about 1.5 GiB of RAM to build without swapping; if it hits swap, it will take a very long time to build.

There is a lot more documentation in the wiki.

Getting help and getting involved

The Rust community congregates in a few places:

License

Rust is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.