#!/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; then
	tempfile=mktemp
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 | sort -k 1,1 | tee $temp2 | awk '{
		opt = ""
		if (NF > 2) {
			opt = substr($2, 2)
			$2 = $3
		}
		printf "\t{ \"%s\", %s, %d },\n", $1, $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 -v 0 | 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[];'
