as per Graydon's comment
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 packagebar
, thenfoo/src/bar/main.rs
could be themain
entry point for building abar
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 packagebar
, rustpkg will install libraries for bar tofoo/lib/x86_64-apple-darwin/
. The libraries will have names of the formfoo/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 packagebar
, rustpkg will install executables forbar
tofoo/bin/x86_64-apple-darwin/
. The executables will have names of the formfoo/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 packagebar
andfoo/src/bar/main.rs
exists, thenrustpkg build
will createfoo/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.