Skip to content

Commit

Permalink
doc: use asciidoctor instead of a2x
Browse files Browse the repository at this point in the history
AsciiDoc development is continued under asciidoctor. See
https://github.com/asciidoc/asciidoc.
  • Loading branch information
yous committed Apr 7, 2020
1 parent 49de7b1 commit e83e14c
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 10 deletions.
2 changes: 0 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ jobs:
TARGET_DIR: ./target
# Emit backtraces on panics.
RUST_BACKTRACE: 1
# Apparently needed to use a2x on macOS.
XML_CATALOG_FILES: /usr/local/etc/xml/catalog
runs-on: ${{ matrix.os }}
strategy:
matrix:
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,6 @@ jobs:
RUST_BACKTRACE: 1
# Build static releases with PCRE2.
PCRE2_SYS_STATIC: 1
# Apparently needed to use a2x on macOS.
XML_CATALOG_FILES: /usr/local/etc/xml/catalog
strategy:
matrix:
build: [linux, linux-arm, macos, win-msvc, win-gnu, win32-msvc]
Expand Down
7 changes: 4 additions & 3 deletions FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,10 @@ patch release out with a fix. However, no promises are made.
Does ripgrep have a man page?
</h3>

Yes! Whenever ripgrep is compiled on a system with `asciidoc` present, then a
man page is generated from ripgrep's argv parser. After compiling ripgrep, you
can find the man page like so from the root of the repository:
Yes! Whenever ripgrep is compiled on a system with `asciidoctor` or `asciidoc`
present, then a man page is generated from ripgrep's argv parser. After
compiling ripgrep, you can find the man page like so from the root of the
repository:

```
$ find ./target -name rg.1 -print0 | xargs -0 ls -t | head -n1
Expand Down
45 changes: 45 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,51 @@ fn git_revision_hash() -> Option<String> {
}

fn generate_man_page<P: AsRef<Path>>(outdir: P) -> io::Result<()> {
// If asciidoctor isn't installed, fallback to asciidoc.
if let Err(err) = process::Command::new("asciidoctor").output() {
eprintln!(
"Could not run 'asciidoctor' binary, falling back to 'a2x'."
);
eprintln!("Error from running 'asciidoctor': {}", err);
return legacy_generate_man_page::<P>(outdir);
}
// 1. Read asciidoctor template.
// 2. Interpolate template with auto-generated docs.
// 3. Save interpolation to disk.
// 4. Use asciidoctor to convert to man page.
let outdir = outdir.as_ref();
let cwd = env::current_dir()?;
let tpl_path = cwd.join("doc").join("rg.1.txt.tpl");
let txt_path = outdir.join("rg.1.txt");

let mut tpl = String::new();
File::open(&tpl_path)?.read_to_string(&mut tpl)?;
let options =
formatted_options()?.replace("&#123;", "{").replace("&#125;", "}");
tpl = tpl.replace("{OPTIONS}", &options);

let githash = git_revision_hash();
let githash = githash.as_ref().map(|x| &**x);
tpl = tpl.replace("{VERSION}", &app::long_version(githash, false));

File::create(&txt_path)?.write_all(tpl.as_bytes())?;
let result = process::Command::new("asciidoctor")
.arg("--doctype")
.arg("manpage")
.arg("--backend")
.arg("manpage")
.arg(&txt_path)
.spawn()?
.wait()?;
if !result.success() {
let msg =
format!("'asciidoctor' failed with exit code {:?}", result.code());
return Err(ioerr(msg));
}
Ok(())
}

fn legacy_generate_man_page<P: AsRef<Path>>(outdir: P) -> io::Result<()> {
// If asciidoc isn't installed, then don't do anything.
if let Err(err) = process::Command::new("a2x").output() {
eprintln!("Could not run 'a2x' binary, skipping man page generation.");
Expand Down
2 changes: 1 addition & 1 deletion ci/docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ via the [Cross](https://github.com/rust-embedded/cross) tool.
The Cross tool actually provides its own Docker images, and all Docker images
in this directory are derived from one of them. We provide our own in order
to customize the environment. For example, we need to install some things like
`asciidoc` in order to generate man pages. We also install compression tools
`asciidoctor` in order to generate man pages. We also install compression tools
like `xz` so that tests for the `-z/--search-zip` flag are run.

If you make a change to a Docker image, then you can re-build it. `cd` into the
Expand Down
2 changes: 1 addition & 1 deletion ci/macos-install-packages
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/bin/sh

brew install asciidoc docbook-xsl
brew install asciidoctor
2 changes: 1 addition & 1 deletion ci/ubuntu-install-packages
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libxslt1-dev asciidoc docbook-xsl xsltproc libxml2-utils \
asciidoctor \
zsh xz-utils liblz4-tool musl-tools

0 comments on commit e83e14c

Please sign in to comment.