about summary refs log tree commit diff
path: root/src/tools/html-checker
diff options
context:
space:
mode:
authorKen Matsui <26405363+ken-matsui@users.noreply.github.com>2021-11-07 10:25:04 +0900
committerKen Matsui <26405363+ken-matsui@users.noreply.github.com>2021-11-07 10:25:04 +0900
commitf06a71149bdeeac0c88dba6e1ad0774487b5d3de (patch)
tree390c4167877ba08477ba0038f53829ad4146ca51 /src/tools/html-checker
parent0727994435c75fdedd3e9d226cf434089b0ab585 (diff)
Support early stopping too old pre-installed `tidy` command for macOS in the HTML checker
Diffstat (limited to 'src/tools/html-checker')
-rw-r--r--src/tools/html-checker/main.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/tools/html-checker/main.rs b/src/tools/html-checker/main.rs
index 7bdf527d884..f52fbdfe2d7 100644
--- a/src/tools/html-checker/main.rs
+++ b/src/tools/html-checker/main.rs
@@ -79,11 +79,34 @@ fn find_all_html_files(dir: &Path) -> (usize, usize) {
     (files_read, errors)
 }
 
+/// Default `tidy` command for macOS is too old that it does not have `mute-id` and `mute` options.
+/// `tidy` on macOS Monterey was released on 31 October 2006, and the same date can be seen seven
+/// years ago at <https://stackoverflow.com/questions/22283382/overwrite-osx-tidy>. Accordingly,
+/// the macOS environment using pre-installed `tidy` should immediately suspend HTML checker process
+/// and show a hint to install a newer one.
+#[cfg(target_os = "macos")]
+fn check_tidy_version() -> Result<(), String> {
+    let output = Command::new("tidy").arg("-v").output().expect("failed to run tidy command");
+    let version = String::from_utf8(output.stdout).expect("failed to read version of tidy command");
+    if version.contains("HTML Tidy for Mac OS X released on 31 October 2006") {
+        eprintln!("The pre-installed HTML Tidy for macOS is not supported.");
+        eprintln!("Consider installing a newer one and re-running.");
+        eprintln!("If you're using Homebrew, you can install it by the following command:");
+        eprintln!("    brew install tidy-html5");
+        eprintln!();
+        Err("HTML check failed: 1 error".to_string())
+    } else {
+        Ok(())
+    }
+}
+
 fn main() -> Result<(), String> {
     let args = env::args().collect::<Vec<_>>();
     if args.len() != 2 {
         return Err(format!("Usage: {} <doc folder>", args[0]));
     }
+    #[cfg(target_os = "macos")]
+    check_tidy_version()?;
 
     println!("Running HTML checker...");