#!/bin/sh -
#	$NetBSD: mkbuiltins,v 1.21 2004/06/06 07:03:11 christos Exp $
#
# Copyright (c) 1991, 1993
#	The Regents of the University of California.  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

havehist=1
if [ "X$1" = "X-h" ]; then
	havehist=0
	shift
fi

shell=$1
builtins=$2
objdir=$3

havejobs=0
if grep '^#define JOBS[	 ]*1' ${shell} > /dev/null
then
	havejobs=1
fi

exec <$builtins 3> ${objdir}/builtins.c 4> ${objdir}/builtins.h

echo '/*
 * This file was generated by the mkbuiltins program.
 */

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

const struct builtincmd builtincmd[] = {
' >&3

echo '/*
 * This file was generated by the mkbuiltins program.
 */

#ifndef __KLIBC__
#include <sys/cdefs.h>
#endif

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

extern const struct builtincmd builtincmd[];
extern const struct builtincmd splbltincmd[];

' >&4

specials=

while read line
do
	set -- $line
	[ -z "$1" ] && continue
	case "$1" in
	\#if*|\#def*|\#end*)
		echo $line >&3
		echo $line >&4
		continue
		;;
	esac
	l1="${line###}"
	[ "$l1" != "$line" ] && continue


	func=$1
	shift
	[ x"$1" = x'-j' ] && {
		[ $havejobs = 0 ] && continue
		shift
	}
	[ x"$1" = x'-h' ] && {
		[ $havehist = 0 ] && continue
		shift
	}
	echo 'int '"$func"'(int, char **);' >&4
	while
		[ $# != 0 -a "$1" != '#' ]
	do
		[ "$1" = '-s' ] && {
			specials="$specials $2 $func"
			shift 2
			continue;
		}
		[ "$1" = '-u' ] && shift
		echo '	{ "'$1'",	'"$func"' },' >&3
		shift
	done
done

echo '	{ 0, 0 },' >&3
echo '};' >&3
echo >&3
echo 'const struct builtincmd splbltincmd[] = {' >&3

set -- $specials
while
	[ $# != 0 ]
do
	echo '	{ "'$1'",	'"$2"' },' >&3
	shift 2
done

echo '	{ 0, 0 },' >&3
echo "};" >&3
