#!/bin/sh
#
# Script to generate a C file containing a list of tests
#
# Copyright 2002 Alexandre Julliard
# Copyright 2002 Dimitrie O. Paun
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

cat <<EOF
/* Automatically generated file; DO NOT EDIT!! */

#include <stdio.h>
#include <stdlib.h>
#include "winbase.h"

EOF

for file in "$@"; do
    test=`basename "$file" .c`
    echo "extern void func_$test(void);"
done

cat <<EOF

struct test
{
    const char *name;
    void (*func)(void);
};

static const struct test winetest_testlist[] =
{
EOF

for file in "$@"; do
    test=`basename "$file" .c`
    echo "    { \"$test\", func_$test },"
done

cat <<EOF
    { 0, 0 }
};

#define WINETEST_WANT_MAIN
#include "wine/test.h"
EOF
