mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-18 09:53:26 +00:00
docs: Sketch out rustpkg manual
This commit is contained in:
parent
05f9586d06
commit
d834c0d59d
103
doc/rustpkg.md
Normal file
103
doc/rustpkg.md
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
% 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
|
||||||
|
|
||||||
|
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.
|
14
mk/docs.mk
14
mk/docs.mk
@ -81,6 +81,20 @@ doc/rust.pdf: doc/rust.tex
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
DOCS += doc/rustpkg.html
|
||||||
|
doc/rustpkg.html: rustpkg.md doc/version_info.html doc/rust.css doc/manual.css
|
||||||
|
@$(call E, pandoc: $@)
|
||||||
|
$(Q)$(CFG_NODE) $(S)doc/prep.js --highlight $< | \
|
||||||
|
"$(CFG_PANDOC)" \
|
||||||
|
--standalone --toc \
|
||||||
|
--section-divs \
|
||||||
|
--number-sections \
|
||||||
|
--from=markdown --to=html \
|
||||||
|
--css=rust.css \
|
||||||
|
--css=manual.css \
|
||||||
|
--include-before-body=doc/version_info.html \
|
||||||
|
--output=$@
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Node (tutorial related)
|
# Node (tutorial related)
|
||||||
######################################################################
|
######################################################################
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
|
|
||||||
// file at the top-level directory of this distribution and at
|
|
||||||
// http://rust-lang.org/COPYRIGHT.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
||||||
// option. This file may not be copied, modified, or distributed
|
|
||||||
// except according to those terms.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The test runner should check that, after `rustpkg build simple-lib`:
|
|
||||||
* testsuite/simple-lib/build/ exists
|
|
||||||
* testsuite/simple-lib/build/ contains a library named libsimple_lib
|
|
||||||
* testsuite/simple-lib/build/ does not contain an executable
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern mod std;
|
|
||||||
|
|
||||||
pub mod foo;
|
|
||||||
pub mod bar;
|
|
Loading…
Reference in New Issue
Block a user