]> git.ipfire.org Git - thirdparty/rsync.git/commitdiff
Turn help-from-md into an awk script.
authorWayne Davison <wayne@opencoder.net>
Tue, 16 Jun 2020 01:14:08 +0000 (18:14 -0700)
committerWayne Davison <wayne@opencoder.net>
Tue, 16 Jun 2020 01:32:00 +0000 (18:32 -0700)
Makefile.in
help-from-md [deleted file]
help-from-md.awk [new file with mode: 0755]

index a0681c8984a272932ddea8b7913699d7b5b358ec..5e5038d7ddd9f2c73d175dfb46bbe7fe3fe76009 100644 (file)
@@ -104,7 +104,7 @@ options.o: latest-year.h help-rsync.h help-rsyncd.h
 flist.o: rounding.h
 
 help-rsync.h help-rsyncd.h: rsync.1.md
-       ./help-from-md "$(srcdir)/$<" $@
+       awk -f $(srcdir)/help-from-md.awk -v helpfile=$@ $(srcdir)/$<
 
 rounding.h: rounding.c rsync.h proto.h
        @for r in 0 1 3; do \
diff --git a/help-from-md b/help-from-md
deleted file mode 100755 (executable)
index a5b6157..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-if [[ "$#" != 2 ]]; then
-    echo "Usage: $0 MD_FILE HELP_FILE.h"
-    exit 1
-fi
-
-mdfile="$1"
-helpfile="$2"
-newfile="$helpfile.new"
-findfile="${helpfile/./\\.}"
-
-sed '1,/^\[comment\].*'"$findfile"'/d' <"$mdfile" | \
-    sed '1,/^```/d' | \
-    sed '/^```/,$d' | \
-    sed 's/"/\\"/g' | \
-    sed 's/^/  rprintf(F,"/' | \
-    sed 's/$/\\n");/' >"$newfile"
-
-if [[ ! -s "$newfile" ]]; then
-    rm "$newfile"
-    echo "Discarding empty output for $helpfile file from $mdfile"
-    exit 1
-fi
-
-(cat <<EOT
-/* DO NOT EDIT THIS FILE!  It is auto-generated from the option list in $mdfile! */
-EOT
-cat "$newfile"
-) >"$helpfile"
-rm "$newfile"
diff --git a/help-from-md.awk b/help-from-md.awk
new file mode 100755 (executable)
index 0000000..ca358c8
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/awk -f
+
+# The caller must set -v helpfile=help-NAME.h and pass arg NAME.NUM.md
+
+BEGIN {
+    heading = "/* DO NOT EDIT THIS FILE!  It is auto-generated from the option list in " ARGV[1] "! */"
+    findcomment = helpfile
+    sub("\\.", "\\.", findcomment)
+    findcomment = "\\[comment\\].*" findcomment
+    backtick_cnt = 0
+    prints = ""
+}
+
+/^```/ {
+    backtick_cnt++
+    next
+}
+
+foundcomment {
+    if (backtick_cnt > 1) exit
+    if (backtick_cnt == 1) {
+       gsub(/"/, "\\\"")
+       prints = prints "\n  rprintf(F,\"" $0 "\\n\");"
+    }
+    next
+}
+
+$0 ~ findcomment {
+    foundcomment = 1
+    backtick_cnt = 0
+}
+
+END {
+    if (foundcomment && backtick_cnt > 1)
+       print heading "\n" prints > helpfile
+    else {
+       print "Failed to find " helpfile " section in " ARGV[1]
+       exit 1
+    }
+}