summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChayoung You <yousbe@gmail.com>2020-04-06 22:05:17 +0900
committerAndrew Gallant <jamslam@gmail.com>2020-05-08 23:24:40 -0400
commit16a1221fc70d586a07bd0421722635c61df525be (patch)
tree611f5a62193657edf7eef8b895e99e863e7f3a22
parent793c1179ccd7e755d635beee8be5c1e2202d404b (diff)
doc: use asciidoctor instead of a2x
AsciiDoc development is continued under asciidoctor. See https://github.com/asciidoc/asciidoc. We do however fallback to a2x if asciidoctor is not present. This is to ease migration, but at some point, it's likely that support for a2x will be dropped. Originally reported downstream: https://github.com/Homebrew/linuxbrew-core/issues/19885 Closes #1544
-rw-r--r--.github/workflows/ci.yml2
-rw-r--r--.github/workflows/release.yml2
-rw-r--r--CHANGELOG.md2
-rw-r--r--FAQ.md7
-rw-r--r--build.rs45
-rw-r--r--ci/docker/README.md2
-rwxr-xr-xci/macos-install-packages2
-rwxr-xr-xci/ubuntu-install-packages2
8 files changed, 54 insertions, 10 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3bdcd645..eee64bd7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -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:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 86719c03..d687d824 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -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]
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c22be35..63b1ae24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,8 @@ Bug fixes:
Note how to escape a `$` when using `--replace`.
* [BUG #1537](https://github.com/BurntSushi/ripgrep/issues/1537):
Fix match bug caused by inner literal optimization.
+* [BUG #1544](https://github.com/BurntSushi/ripgrep/issues/1544):
+ ripgrep now uses `asciidoctor` instead of `a2x` to generate its man page.
* [BUG #1571](https://github.com/BurntSushi/ripgrep/issues/1571):
Add note about configuration files in `--type-{add,clear}` docs.
* [BUG #1573](https://github.com/BurntSushi/ripgrep/issues/1573):
diff --git a/FAQ.md b/FAQ.md
index 63331266..3eed7942 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -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
diff --git a/build.rs b/build.rs
index e3c08a5d..6fa7c1ac 100644
--- a/build.rs
+++ b/build.rs
@@ -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.");
diff --git a/ci/docker/README.md b/ci/docker/README.md
index 58f367ef..89baa249 100644
--- a/ci/docker/README.md
+++ b/ci/docker/README.md
@@ -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
diff --git a/ci/macos-install-packages b/ci/macos-install-packages
index 309562f7..dc0955c5 100755
--- a/ci/macos-install-packages
+++ b/ci/macos-install-packages
@@ -1,3 +1,3 @@
#!/bin/sh
-brew install asciidoc docbook-xsl
+brew install asciidoctor
diff --git a/ci/ubuntu-install-packages b/ci/ubuntu-install-packages
index edaac6f4..b372e0e4 100755
--- a/ci/ubuntu-install-packages
+++ b/ci/ubuntu-install-packages
@@ -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