| .TH RUSTPKG "1" "July 2013" "rustpkg 0.7" "User Commands" |
| .SH NAME |
| rustpkg \- package manager for Rust applications |
| .SH SYNOPSIS |
| .B rustpkg |
| [\fICOMMAND\fR] [\fIOPTIONS\fR] \fIINPUT\fR |
| |
| .SH DESCRIPTION |
| |
| This tool is a package manager for applications written in the Rust language, |
| available at <\fBhttps://www.rust-lang.org\fR>. It provides commands to build, |
| install and test Rust programs. |
| |
| \fBrustpkg\fR is still a work in progress. See \fBdoc/rustpkg.md\fR in the Rust source distribution for future plans. |
| |
| .SH COMMANDS |
| |
| .TP |
| \fBbuild\fR |
| Searches for a package with the specified name and builds it in the workspace in |
| which it is found. |
| .TP |
| \fBclean\fR |
| Remove all generated files from the \fIbuild\fR directory in the target's workspace. |
| .TP |
| \fBinstall\fR |
| Builds the specified target, and all its dependencies, and then installs the |
| build products into the \fIlib\fR and \fIbin\fR directories of their respective |
| workspaces. |
| .TP |
| \fBinit\fR |
| Initializes the current working directory into a workspace. |
| |
| .SS "BUILD COMMAND" |
| |
| rustpkg build \fI[pkgname]\fR |
| |
| The \fBbuild\fR command searches for a package with specified package name and |
| builds it in any workspace(s) where it finds one. Any dependent packages are |
| also built. The output files produced by the build phase are stored in the |
| \fIbuild\fR subdirectories of each package. The executables and libraries are |
| not copied to the 'bin' or 'lib' directories; that is the purpose of the |
| \fBinstall\fR command. |
| |
| .SS "CLEAN COMMAND" |
| |
| rustpkg clean \fI[pkgname]\fR |
| |
| deletes the contents of package's build directory. |
| |
| .SS "INSTALL COMMAND" |
| |
| rustpkg install \fI[url]\fR |
| |
| builds the libraries and/or executables that are targets for the specified |
| package name or URL, and then installs them either into package's \fIlib\fR |
| and \fIbin\fR directories, or into the \fIlib\fR and \fIbin\fR subdirectories |
| of the first entry in RUST_PATH. |
| |
| Examples: |
| |
| $ rustpkg install github.com/mozilla/servo.git#1.2 |
| $ rustpkg install rust-glfw |
| |
| .SS "INIT COMMAND" |
| |
| rustpkg init |
| |
| This will turn the current working directory into a workspace. The first |
| command you run when starting off a new project. |
| |
| Example: |
| |
| $ rustpkg init |
| |
| .SH "ENVIRONMENT" |
| |
| .TP |
| RUST_PATH |
| A colon-separated (semicolon-separated) list of paths denoting workspaces |
| to search for Rust source files. See the section \fBPATHS\fR for full details. |
| |
| .SH "PATHS" |
| |
| The \fBrustpkg\fR tool searches for packages in the folders specified by the |
| \fBRUST_PATH\fR environment variable. Each folder constitutes a |
| \fIworkspace\fR, which contains one or more modules available to import. |
| |
| In addition to the RUST_PATH settings, the following implicit paths are |
| \fIalways\fR searched, in the following order: |
| |
| 1. Any folders named ".rust" in the current directory, \fIand every parent\fR |
| of the curent directory, up to the filesystem root; |
| |
| 2. The system path "/usr/local" on Unix-style systems, or the equivalent on |
| Windows; and |
| |
| 3. A folder named ".rust" in the user's home directory (ie. "~/.rust" on Unix- |
| style systems or the equivalent on Windows). |
| |
| .SH "PACKAGE STRUCTURE" |
| |
| A valid workspace must contain each of the following subdirectories: |
| |
| .TP |
| \fBsrc/\fR |
| Contains the Rust source code, with one subdirectory per package. Each |
| subdirectory contains source files for a given package. |
| .TP |
| \fBlib/\fR |
| "rustpkg install" installs libraries into a target-specific subdirectory of this directory. |
| .TP |
| \fBbin/\fR |
| "rustpkg install" installs executable binaries into a target-specific subdirectory of this directory. |
| .TP |
| \fBbuild/\fR |
| "rustpkg build" stores temporary build artifacts in a target-specific subdirectory of this directory. |
| |
| For example, if "foo" is a workspace containing the package "bar", then |
| "foo/src/bar/main.rs" would be the "main" entry point for building a "bar" |
| executable. |
| |
| .SH "PACKAGE IDENTIFIERS" |
| |
| A package identifier uniquely identifies a package. 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, \fIgithub.com/mozilla/rust\fR is a package ID |
| that would refer to the git repository browsable at \fIhttp://github.com/mozilla/rust\fR. |
| |
| A package ID can also specify a version, like: |
| \fIgithub.com/mozilla/rust#0.3\fR. In this case, \fBrustpkg\fR will check that |
| the repository \fIgithub.com/mozilla/rust\fR has a tag named \fI0.3\fR, and |
| report an error otherwise. |
| |
| .SH "SPECIAL MODULES" |
| |
| \fBrustpkg\fR searches for four different known filenames in the src directory |
| in order to determine which crates to build: |
| |
| .TP |
| \fBmain.rs\fR |
| Assumed to be a main entry point for building an executable (install destination is 'bin' directory). |
| .TP |
| \fBlib.rs\fR |
| Assumed to be a library crate (install destination is 'lib' directory). |
| .TP |
| \fBtest.rs\fR |
| Assumed to contain tests declared with the \fI#[test]\fR attribute. |
| .TP |
| \fBbench.rs\fR |
| Assumed to contain benchmarks declared with the \fI#[bench]\fR attribute. |
| |
| .SH "CRATE VERSIONS" |
| |
| \fBrustpkg\fR packages do not need to declare their versions with an attribute |
| inside one of the source files, because rustpkg infers it from the version |
| control system. When building a package that is in a git repository, |
| rustpkg assumes that the most recent tag specifies the current version. When |
| building a package that is not under version control, or that has no tags, |
| rustpkg defaults the version to 0.1. |
| |
| .SH "DEPENDENCIES" |
| |
| rustpkg infers dependencies from "extern mod" directives. Thus, there should |
| be no need to pass a "-L" flag to rustpkg to tell it where to find a library. |
| (In the future, it will also be possible to write an "extern mod" directive |
| referring to a remote package.) |
| |
| .SH "CUSTOM BUILD SCRIPTS" |
| |
| A file called \fIpkg.rs\fR at the root level in a workspace is called a \fIpackage |
| script\fR. If a package script exists, rustpkg executes it to build the |
| package rather than inferring crates as described previously. |
| |
| Inside \fIpkg.rs\fR, it's possible to call back into rustpkg to finish up the |
| build. The \fIrustpkg::api\fR module contains functions to build, install, or |
| clean libraries and executables in the way rustpkg normally would without |
| custom build logic. |
| |
| .SH "SEE ALSO" |
| |
| rust, rustc, rustdoc, rusti |
| |
| .SH "BUGS" |
| See <\fBhttps://github.com/mozilla/rust/issues\fR> for issues. |
| |
| .SH "AUTHOR" |
| See \fBAUTHORS.txt\fR in the Rust source distribution. Graydon Hoare |
| <\fIgraydon@mozilla.com\fR> is the project leader. |
| |
| .SH "COPYRIGHT" |
| This work is dual-licensed under Apache 2.0 and MIT terms. See \fBCOPYRIGHT\fR |
| file in the rust source distribution. |