#!/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 "windef.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
