#!/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
#

# ***** Keep in sync with tools/winapi/msvcmaker:_generate_testlist_c *****

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

/* stdarg.h is needed for Winelib */
#include <stdarg.h>
#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
