#!/usr/bin/perl
#
# Script to generate a C file containing a list of tests
#
# Copyright 2002 Alexandre Julliard
#
# 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
#

use strict;

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

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

EOF

my @testlist = @ARGV;
foreach (@testlist)
{
    s!(.*/)*([^/]+)\.c$!$2!;
    printf "extern void func_%s(void);\n", $_;
}

print <<EOF;

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

static const struct test winetest_testlist[] =
{
EOF

foreach (@testlist)
{
    printf "    { \"%s\", func_%s },\n", $_, $_;
}
print <<EOF;
    { 0, 0 }
};

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