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 \
+++ /dev/null
-#!/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"
--- /dev/null
+#!/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
+ }
+}