summaryrefslogtreecommitdiff
path: root/mk/help
diff options
context:
space:
mode:
authorrillig <rillig@pkgsrc.org>2006-10-23 14:40:14 +0000
committerrillig <rillig@pkgsrc.org>2006-10-23 14:40:14 +0000
commitc14791a52e55a19dde451bc29c3d6e5d44b8fa8a (patch)
treed66103b62a45cb6cee43310ee182acb6cc507036 /mk/help
parent33e2b68cc09a2f31b8da0e64b9e298ad8270a2a0 (diff)
downloadpkgsrc-c14791a52e55a19dde451bc29c3d6e5d44b8fa8a.tar.gz
Moved the help system into its own subdirectory. Extracted the AWK
program into its own file, since that way, one can add comments to the code. For convenience, keyword search is case insensitive.
Diffstat (limited to 'mk/help')
-rw-r--r--mk/help/help.awk73
-rw-r--r--mk/help/help.mk38
2 files changed, 111 insertions, 0 deletions
diff --git a/mk/help/help.awk b/mk/help/help.awk
new file mode 100644
index 00000000000..c319ea7599a
--- /dev/null
+++ b/mk/help/help.awk
@@ -0,0 +1,73 @@
+# $NetBSD: help.awk,v 1.1 2006/10/23 14:40:15 rillig Exp $
+#
+
+BEGIN {
+ no = 0; yes = 1;
+ hline = "===============";
+ hline = hline hline hline hline hline;
+ found = no; var = no; comment = no; n = 0;
+ rcsid = "";
+ last_line_was_rcsid = no;
+ last_line_was_empty = yes;
+ topic = ENVIRON["TOPIC"];
+ uctopic = toupper(topic);
+}
+
+/.*/ {
+ if ($0 ~ /^#.*\$.*\$$/) {
+ rcsid = $0;
+ last_line_was_rcsid = yes;
+ } else {
+ if (last_line_was_rcsid && $0 == "#") {
+ # Skip this line
+ } else if ($0 == "") {
+ # Skip completely empty lines, too.
+ } else {
+ lines[n++] = $0;
+ }
+ last_line_was_rcsid = no;
+ }
+}
+
+/./ {
+ # When looking for "configure", catch lines that contain
+ # "configure" and "CONFIGURE", but not "Configure".
+ w1 = ($1 == tolower($1)) ? toupper($1) : $1;
+ w2 = ($2 == tolower($2)) ? toupper($2) : $2;
+
+ if ((w1 == uctopic"?=") ||
+ (w1 == "#"uctopic"=") ||
+ (w1 == "#" && last_line_was_empty &&
+ (w2 == uctopic || w2 == uctopic":"))) {
+ var = 1;
+ }
+}
+
+/^#/ {
+ comment = 1;
+}
+
+/^$/ {
+ if (var && comment) {
+ found = yes;
+ print hline;
+ if (rcsid != "") { print rcsid; print "#"; }
+ for (i = 0; i < n; i++) { print lines[i]; }
+ }
+ var = no; comment = no; n = 0;
+}
+
+/./ {
+ last_line_was_empty = no;
+}
+/^#$/ || /^$/ {
+ last_line_was_empty = yes;
+}
+
+END {
+ if (found) {
+ print hline;
+ } else {
+ print "No help found for "topic".";
+ }
+}
diff --git a/mk/help/help.mk b/mk/help/help.mk
new file mode 100644
index 00000000000..2c05935f47e
--- /dev/null
+++ b/mk/help/help.mk
@@ -0,0 +1,38 @@
+# $NetBSD: help.mk,v 1.1 2006/10/23 14:40:15 rillig Exp $
+#
+
+# This is the integrated pkgsrc online help system. To query for the
+# meaning of a variable, run "make help TOPIC=VARNAME". All variables from
+# certain pkgsrc Makefile fragments that have inline comments are eligible
+# for querying.
+
+.if !defined(_PKGSRC_HELP_MK)
+_PKGSRC_HELP_MK= # defined
+
+_HELP_FILES= mk/*.mk mk/*/*.mk
+
+.if defined(VARNAME)
+TOPIC?= ${VARNAME}
+.endif
+.if defined(topic)
+TOPIC?= ${topic}
+.endif
+
+.PHONY: help
+help:
+.if !defined(TOPIC)
+ @${PRINTF} "usage: %s help topic=<topic>\\n" ${MAKE:Q}
+ @${PRINTF} "\\n"
+ @${PRINTF} "\\t<topic> may be a variable name or a make target,\\n"
+ @${PRINTF} "\\tfor example CONFIGURE_DIRS or patch. For convenience,\\n"
+ @${PRINTF} "\\tyou don't need to use uppercase letters when typing\\n"
+ @${PRINTF} "\\tvariable names.\\n"
+ @${PRINTF} "\\n"
+.else
+ ${_PKG_SILENT}${_PKG_DEBUG} set -e; \
+ cd ${PKGSRCDIR}; \
+ { for i in ${_HELP_FILES}; do ${CAT} "$$i"; ${ECHO} ""; done; } \
+ | env TOPIC=${TOPIC:Q} ${AWK} -f ${PKGSRCDIR}/mk/help/help.awk
+.endif
+
+.endif