Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Jan 1999 20:49:43 +1300 (NZDT)
From:      jabley@patho.gen.nz
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   kern/9551: replacement of perl in sys/boot with awk
Message-ID:  <199901180749.UAA15682@buddha.clear.net.nz>

next in thread | raw e-mail | index | archive | help

>Number:         9551
>Category:       kern
>Synopsis:       replacement of perl in sys/boot with awk
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jan 17 23:50:01 PST 1999
>Closed-Date:
>Last-Modified:
>Originator:     Joe Abley
>Release:        FreeBSD 3.0-CURRENT i386
>Organization:
CLEAR Communications
>Environment:

	3.0-CURRENT

>Description:

	sys/boot contains perl. This seems to be considered a bad thing.
	Here is some awk.

>How-To-Repeat:

	Not applicable

>Fix:
	Following unified diff patches Makefiles in sys/boot to call
	awk instead of perl:

diff -U3 -r ./old/sys/boot/alpha/boot2/Makefile ./new/sys/boot/alpha/boot2/Makefile
--- ./old/sys/boot/alpha/boot2/Makefile	Tue Jan 12 20:34:15 1999
+++ ./new/sys/boot/alpha/boot2/Makefile	Mon Jan 18 20:33:55 1999
@@ -47,7 +47,7 @@
 	vers.o ${LIBSTAND} ${LIBALPHA} ${LIBSTAND} >${.OBJDIR}/${BASE}.list
 
 ${BASE}.help: help.common help.alpha
-	perl ${.CURDIR}/../../common/merge_help.pl ${.ALLSRC} > ${.TARGET}
+	cat ${.ALLSRC} | awk -f ${.CURDIR}/../../common/merge_help.awk > ${.TARGET}
 
 beforeinstall:
 .if exists(${.OBJDIR}/loader.help)
Only in ./new/sys/boot/common: merge_help.awk
Only in ./old/sys/boot/common: merge_help.pl
diff -U3 -r ./old/sys/boot/ficl/Makefile ./new/sys/boot/ficl/Makefile
--- ./old/sys/boot/ficl/Makefile	Fri Nov  6 07:36:26 1998
+++ ./new/sys/boot/ficl/Makefile	Mon Jan 18 20:34:18 1999
@@ -16,8 +16,8 @@
 .PATH:		${.CURDIR}/softwords
 CFLAGS+=	-I${.CURDIR}
 
-softcore.c:	${SOFTWORDS} softcore.pl
-	(cd ${.CURDIR}/softwords; perl softcore.pl ${SOFTWORDS}) > ${.TARGET}
+softcore.c:	${SOFTWORDS} softcore.awk
+	(cd ${.CURDIR}/softwords; cat ${SOFTWORDS} | awk -f softcore.awk) > ${.TARGET}
 
 .include <bsd.lib.mk>
 
Only in ./new/sys/boot/ficl/softwords: softcore.awk
Only in ./old/sys/boot/ficl/softwords: softcore.pl
diff -U3 -r ./old/sys/boot/i386/loader/Makefile ./new/sys/boot/i386/loader/Makefile
--- ./old/sys/boot/i386/loader/Makefile	Tue Jan 12 20:34:37 1999
+++ ./new/sys/boot/i386/loader/Makefile	Mon Jan 18 20:35:23 1999
@@ -79,7 +79,7 @@
 	strip ${.TARGET}
 
 ${BASE}.help: help.common help.i386
-	perl ${.CURDIR}/../../common/merge_help.pl ${.ALLSRC} > ${.TARGET}
+	cat ${.ALLSRC} | awk -f ${.CURDIR}/../../common/merge_help.awk > ${.TARGET}
 
 beforeinstall:
 .if exists(${DESTDIR}/boot/loader)

	Following is sys/ficl/softwords/softcore.awk:

#!/usr/bin/awk -f
# Convert forth source files to a giant C string
# Joe Abley <jabley@patho.gen.nz>, 12 January 1999

BEGIN \
{
  printf "/***************************************************************\n";
  printf "** s o f t c o r e . c\n";
  printf "** Forth Inspired Command Language -\n";
  printf "** Words from CORE set written in FICL\n";
  printf "** Author: John Sadler (john_sadler@alum.mit.edu)\n";
  printf "** Created: 27 December 1997\n";
  printf "** Last update: %s\n", strftime();
  printf "***************************************************************/\n";
  printf "\n/*\n";
  printf "** This file contains definitions that are compiled into the\n";
  printf "** system dictionary by the first virtual machine to be created.\n";
  printf "** Created automagically by ficl/softwords/softcore.awk\n";
  printf "*/\n";
  printf "\n#include \"ficl.h\"\n";
  printf "\nstatic char softWords[] =\n";

  commenting = 0;
}

# some general early substitutions
{
  gsub("\t", "    ");			# replace each tab with 4 spaces
  gsub("\"", "\\\"");			# escape quotes
  gsub("\\\\[[:space:]]+$", "");	# toss empty comments
}

# strip out empty lines
/^ *$/ \
{
  next;
}

# emit / ** lines as multi-line C comments
/^\\[[:space:]]\*\*/ && (commenting == 0) \
{
  sub("^\\\\[[:space:]]", "");
  printf "/*\n%s\n", $0;
  commenting = 1;
  next;
}

/^\\[[:space:]]\*\*/ \
{
  sub("^\\\\[[:space:]]", "");
  printf "%s\n", $0;
  next;
}

# function to close a comment, used later
function end_comments()
{
  commenting = 0;
  printf "*/\n";
}

# pass commented preprocessor directives
/^\\[[:space:]]#/ \
{
  if (commenting) end_comments();
  sub("^\\\\[[:space:]]", "");
  printf "%s\n", $0;
  next;
}

# toss all other full-line comments
/^\\/ \
{
  if (commenting) end_comments();
  next;
}

# emit all other lines as quoted string fragments
{
  if (commenting) end_comments();

  sub("\\\\[[:space:]]+.*$", "");	# lop off trailing \ comments
  sub("[[:space:]]+$", "");		# remove trailing spaces
  printf "    \"%s \\n\"\n", $0;
  next;
}

END \
{
  if (commenting) end_comments();
  printf "    \"quit \";\n";
  printf "\n\nvoid ficlCompileSoftCore(FICL_VM *pVM)\n";
  printf "{\n";
  printf "    assert(ficlExec(pVM, softWords) != VM_ERREXIT);\n";
  printf "}\n";
}

	Following is sys/boot/common/merge_help.awk:

#!/usr/bin/awk -f
#
# $Id: mergehelp.awk,v 1.3 1999/01/13 20:06:52 jabley Exp $
#
# Merge two boot loader help files for FreeBSD 3.0
# Joe Abley <jabley@patho.gen.nz>

BEGIN \
{
  state = 0;
  first = 0;
  ind = 0;
}

# beginning of first command
/^###/ && (state == 0) \
{
  state = 1;
  next;
}

# entry header
/^# T[[:graph:]]+ (S[[:graph:]]+ )*D[[:graph:]][[:print:]]*$/ && (state == 1) \
{
  match($0, " T[[:graph:]]+");
  T = substr($0, RSTART + 2, RLENGTH - 2);
  match($0, " S[[:graph:]]+");
  S = (RLENGTH == -1) ? "" : substr($0, RSTART + 2, RLENGTH - 2);
  match($0, " D[[:graph:]][[:print:]]*$");
  D = substr($0, RSTART + 2);

  # find a suitable place to store this one...
  ind++;
  if (ind == 1)
  {
    first = ind;
    help[ind, "T"] = T;
    help[ind, "S"] = S;
    help[ind, "link"] = -1;
  } else {
    i = first; j = -1;
    while (help[i, "T"] help[i, "S"] < T S)
    {
      j = i;
      i = help[i, "link"];
      if (i == -1) break;
    }

    if (i == -1)
    {
      help[j, "link"] = ind;
      help[ind, "link"] = -1;
    } else {
      help[ind, "link"] = i;
      if (j == -1)
        first = ind;
      else
        help[j, "link"] = ind;
    }
  }
  help[ind, "T"] = T;
  help[ind, "S"] = S;
  help[ind, "D"] = D;

  # set our state
  state = 2;
  help[ind, "text"] = 0;
  next;
}

# end of last command, beginning of next one
/^###/ && (state == 2) \
{
  state = 1;
}

(state == 2) \
{
  sub("[[:blank:]]+$", "");
  if (help[ind, "text"] == 0 && $0 ~ /^[[:blank:]]*$/) next;
  help[ind, "text", help[ind, "text"]] = $0;
  help[ind, "text"]++;
  next;
}

# show them what we have (it's already sorted in help[])
END \
{
  node = first;
  while (node != -1)
  {
    printf "################################################################################\n";
    printf "# T%s ", help[node, "T"];
    if (help[node, "S"] != "") printf "S%s ", help[node, "S"];
    printf "D%s\n\n", help[node, "D"];
    for (i = 0; i < help[node, "text"]; i++)
      printf "%s\n", help[node, "text", i];
    node = help[node, "link"];
  }
  printf "################################################################################\n";
}

>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901180749.UAA15682>