#!/bin/sh -
#	$NetBSD: mkbuiltins,v 1.17 2002/11/24 22:35:41 christos Exp $
#
# Copyright (c) 1991, 1993
#	The Regents of the University of California.  All rights reserved.
# Copyright (c) 1997-2005
#	Herbert Xu <herbert@gondor.apana.org.au>.  All rights reserved.
#
# This code is derived from software contributed to Berkeley by
# Kenneth Almquist.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. Neither the name of the University nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#	@(#)mkbuiltins	8.2 (Berkeley) 5/4/95

tempfile=tempfile
if ! type tempfile > /dev/null 2>&1 && ! type mktemp > /dev/null 2>&1; then
	_my_tempfile()
	{
		local index=0
		while test -f "${TMPDIR:-/tmp}/builtin.$$.$index"; do
			index=`expr $index + 1`
		done

		touch "${TMPDIR:-/tmp}/builtin.$$.$index"
		echo "${TMPDIR:-/tmp}/builtin.$$.$index"
	}

	tempfile="_my_tempfile"
elif ! type tempfile > /dev/null 2>&1; then
	tempfile="mktemp ${TMPDIR:-/tmp}/builtin.XXXXXX"
fi

trap 'rm -f $temp $temp2' EXIT
temp=$($tempfile)
temp2=$($tempfile)

builtins=$1

exec > builtins.c
cat <<\!
/*
 * This file was generated by the mkbuiltins program.
 */

#include "shell.h"
#include "builtins.h"

!
< $builtins sed '/^#/d; /^$/d' > $temp
awk '{	printf "int %s(int, char **);\n", $1}' $temp
echo '
const struct builtincmd builtincmd[] = {'
awk '{	for (i = 2 ; i <= NF ; i++) {
		line = $i "\t" $1
		if ($i ~ /^-/)
			line = $(++i) "\t" line
		print line
	}}' $temp | LC_COLLATE=C sort -k 1,1 | tee $temp2 | awk '{
		opt = ""
		if (NF > 2) {
			opt = substr($2, 2)
			$2 = $3
		}
		printf "\t{ \"%s\", %s, %d },\n", $1,
			(opt ~ /n/) ? "NULL" : $2,
			(opt ~ /s/) + (opt ~ /[su]/) * 2 + (opt ~ /a/) * 4
	}'
echo '};'

exec > builtins.h
cat <<\!
/*
 * This file was generated by the mkbuiltins program.
 */

!
sed 's/	-[a-z]*//' $temp2 | nl -b a -v 0 | LC_COLLATE=C sort -u -k 3,3 |
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ |
	awk '{	printf "#define %s (builtincmd + %d)\n", $3, $1}'
printf '\n#define NUMBUILTINS %d\n' $(wc -l < $temp2)
echo '
#define BUILTIN_SPECIAL 0x1
#define BUILTIN_REGULAR 0x2
#define BUILTIN_ASSIGN 0x4

struct builtincmd {
	const char *name;
	int (*builtin)(int, char **);
	unsigned flags;
};

extern const struct builtincmd builtincmd[];'
