use strict;
use warnings;
my $src_dir = @ARGV ? $ARGV[0] : ".";
open my $fh, "<", "$src_dir/Makefile.inc" or die "Cannot open '$src_dir/Makefile.inc': $!";
print <<HEADER
/* !checksrc! disable COPYRIGHT all */
/* !checksrc! disable INCLUDEDUP all */
/* !checksrc! disable UNUSEDIGNORE all */
#define CURLTESTS_BUNDLED
#define CURLTESTS_BUNDLED_TEST_H
#include "first.h"
HEADER
;
my @reused_symbols = (
"ReadThis",
"ReadWriteSockets",
"Sockets",
"Tdata",
"WriteThis",
"addFd",
"checkFdSet",
"checkForCompletion",
"close_file_descriptors",
"curl",
"curlSocketCallback",
"curlTimerCallback",
"cyclic_add",
"easy",
"fopen_works",
"getMicroSecondTimeout",
"geterr",
"hash_static",
"header_callback",
"ioctlcallback",
"msgbuff",
"mydtor",
"num_open",
"progress_callback",
"read_callback",
"readcallback",
"recv_pong",
"removeFd",
"rlim2str",
"run_thread",
"seek_callback",
"send_ping",
"showem",
"store_errmsg",
"suburl",
"test_failure",
"test_fire",
"test_lock",
"test_once",
"test_parse",
"test_rlimit",
"test_unlock",
"testbuf",
"testcase",
"testdata",
"testfd",
"testname",
"testpost",
"tests",
"teststring",
"trailers_callback",
"transfer_status",
"unit_setup",
"unit_stop",
"updateFdSet",
"userdata",
"websocket",
"websocket_close",
"write_callback",
"write_cb",
"writecb",
"xferinfo",
);
my @reused_macros = (
"HEADER_REQUEST",
"NUM_HANDLES",
"SAFETY_MARGIN",
"TEST_HANG_TIMEOUT",
);
my $tlist = "";
while(my $line = <$fh>) {
chomp $line;
if($line =~ /([a-z0-9]+)_SOURCES\ =\ ([a-z0-9]+)\.c/) {
my $name = $1;
my $namu = uc($name);
my $src = "$2.c";
foreach my $symb ("test", @reused_symbols) {
print "#undef $symb\n";
print "#define $symb ${symb}_$name\n";
}
print "#define $namu\n";
print "#include \"$src\"\n";
print "#undef $namu\n";
foreach my $undef ("test", @reused_macros) {
print "#undef $undef\n";
}
print "\n";
$tlist .= " {\"$name\", test_$name},\n";
}
}
close $fh;
print <<FOOTER
static const struct onetest s_tests[] = {
$tlist};
#undef CURLTESTS_BUNDLED_TEST_H
#include "first.c"
FOOTER
;