rust/doc/rustpkg.md
2013-04-22 18:17:32 -07:00

4.4 KiB

% Rustpkg Reference Manual

Introduction

This document is the reference manual for the Rustpkg packaging and build tool for the Rust programming language.

Disclaimer

Rustpkg is a work in progress, as is this reference manual. If the actual behavior of rustpkg differs from the behavior described in this reference, that reflects either an incompleteness or a bug in rustpkg.

Package searching

rustpkg searches for packages using the RUST_PATH environment variable, which is a colon-separated list (semicolon-separated on Windows) of directories.

Each directory in this list is a workspace for rustpkg.

RUST_PATH implicitly contains an entry for ./.rust (as well as ../.rust, ../../.rust, and so on for every parent of . up to the filesystem root). That means that if RUST_PATH is not set, then rustpkg will still search for workspaces in ./.rust and so on. RUST_PATH also implicitly contains an entry for the system path: /usr/local or the equivalent on Windows. This entry comes after the implicit entries for ./.rust and so on. Finally, the last implicit entry in RUST_PATH is ~/.rust or the equivalent on Windows.

Each workspace may contain one or more packages.

Package structure

A valid workspace must contain each of the following subdirectories:

  • 'src/': contains one subdirectory per package. Each subdirectory contains source files for a given package.

    For example, if foo is a workspace containing the package bar, then foo/src/bar/main.rs could be the main entry point for building a bar executable.

  • 'lib/': rustpkg install installs libraries into a target-specific subdirectory of this directory.

    For example, on a 64-bit machine running Mac OS X, if foo is a workspace containing the package bar, rustpkg will install libraries for bar to foo/lib/x86_64-apple-darwin/. The libraries will have names of the form foo/lib/x86_64-apple-darwin/libbar-[hash].dylib, where [hash] is a hash of the package ID.

  • 'bin/': rustpkg install installs executable binaries into a target-specific subdirectory of this directory.

    For example, on a 64-bit machine running Mac OS X, if foo is a workspace, containing the package bar, rustpkg will install executables for bar to foo/bin/x86_64-apple-darwin/. The executables will have names of the form foo/bin/x86_64-apple-darwin/bar.

  • 'build/': rustpkg build stores temporary build artifacts in a target-specific subdirectory of this directory.

    For example, on a 64-bit machine running Mac OS X, if foo is a workspace containing the package bar and foo/src/bar/main.rs exists, then rustpkg build will create foo/build/x86_64-apple-darwin/bar/main.o.

Package identifiers

A package identifier identifies a package uniquely. A package can be stored in a workspace on the local file system, or on a remote Web server, in which case the package ID resembles a URL. For example, github.com/mozilla/rust is a package ID that would refer to the git repository browsable at http://github.com/mozilla/rust.

Source files

rustpkg searches for four different fixed filenames in order to determine the crates to build:

  • main.rs: Assumed to be a main entry point for building an executable.
  • lib.rs: Assumed to be a library crate.
  • test.rs: Assumed to contain tests declared with the #[test] attribute.
  • bench.rs: Assumed to contain benchmarks declared with the #[bench] attribute.

Custom build scripts

A file called pkg.rs at the root level in a workspace is called a package script. If a package script exists, rustpkg executes it to build the package rather than inferring crates as described previously.

Command reference

build

rustpkg build foo searches for a package with ID foo and builds it in any workspace(s) where it finds one. Supposing such packages are found in workspaces X, Y, and Z, the command leaves behind files in X's, Y's, and Z's build directories, but not in their lib or bin directories.

clean

rustpkg clean foo deletes the contents of foo's build directory.

install

rustpkg install foo builds the libraries and/or executables that are targets for foo, and then installs them either into foo's lib and bin directories, or into the lib and bin subdirectories of the first entry in RUST_PATH.

test

rustpkg test foo builds foo's test.rs file if necessary, then runs the resulting test executable.