1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl 2*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 3*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 4*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 5*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 6*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 7*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 8*6236dae4SAndroid Build Coastguard Worker# 9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Viktor Szakats 10*6236dae4SAndroid Build Coastguard Worker# 11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 14*6236dae4SAndroid Build Coastguard Worker# 15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 18*6236dae4SAndroid Build Coastguard Worker# 19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 21*6236dae4SAndroid Build Coastguard Worker# 22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 23*6236dae4SAndroid Build Coastguard Worker# 24*6236dae4SAndroid Build Coastguard Worker########################################################################### 25*6236dae4SAndroid Build Coastguard Worker 26*6236dae4SAndroid Build Coastguard Worker# Bundle up individual tests into a single binary. The resulting binary can run 27*6236dae4SAndroid Build Coastguard Worker# individual tests by passing their name (without '.c') as the first argument. 28*6236dae4SAndroid Build Coastguard Worker# 29*6236dae4SAndroid Build Coastguard Worker# Usage: mk-bundle.pl [<directory>] 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Workeruse strict; 32*6236dae4SAndroid Build Coastguard Workeruse warnings; 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard Workermy $src_dir = @ARGV ? $ARGV[0] : "."; 35*6236dae4SAndroid Build Coastguard Worker 36*6236dae4SAndroid Build Coastguard Worker# Read list of tests 37*6236dae4SAndroid Build Coastguard Workeropen my $fh, "<", "$src_dir/Makefile.inc" or die "Cannot open '$src_dir/Makefile.inc': $!"; 38*6236dae4SAndroid Build Coastguard Worker 39*6236dae4SAndroid Build Coastguard Workerprint <<HEADER 40*6236dae4SAndroid Build Coastguard Worker/* !checksrc! disable COPYRIGHT all */ 41*6236dae4SAndroid Build Coastguard Worker/* !checksrc! disable INCLUDEDUP all */ 42*6236dae4SAndroid Build Coastguard Worker 43*6236dae4SAndroid Build Coastguard Worker#define CURLTESTS_BUNDLED 44*6236dae4SAndroid Build Coastguard Worker#define CURLTESTS_BUNDLED_TEST_H 45*6236dae4SAndroid Build Coastguard Worker#include "first.h" 46*6236dae4SAndroid Build Coastguard WorkerHEADER 47*6236dae4SAndroid Build Coastguard Worker ; 48*6236dae4SAndroid Build Coastguard Worker 49*6236dae4SAndroid Build Coastguard Worker# TODO: Some of these might be subject for de-duplication or sync. 50*6236dae4SAndroid Build Coastguard Workermy @reused_symbols = ( 51*6236dae4SAndroid Build Coastguard Worker "ReadThis", 52*6236dae4SAndroid Build Coastguard Worker "ReadWriteSockets", 53*6236dae4SAndroid Build Coastguard Worker "Sockets", 54*6236dae4SAndroid Build Coastguard Worker "Tdata", 55*6236dae4SAndroid Build Coastguard Worker "WriteThis", 56*6236dae4SAndroid Build Coastguard Worker "addFd", 57*6236dae4SAndroid Build Coastguard Worker "checkFdSet", 58*6236dae4SAndroid Build Coastguard Worker "checkForCompletion", 59*6236dae4SAndroid Build Coastguard Worker "close_file_descriptors", 60*6236dae4SAndroid Build Coastguard Worker "curl", # shadow 61*6236dae4SAndroid Build Coastguard Worker "curlSocketCallback", 62*6236dae4SAndroid Build Coastguard Worker "curlTimerCallback", 63*6236dae4SAndroid Build Coastguard Worker "cyclic_add", 64*6236dae4SAndroid Build Coastguard Worker "easy", # unit 65*6236dae4SAndroid Build Coastguard Worker "fopen_works", 66*6236dae4SAndroid Build Coastguard Worker "getMicroSecondTimeout", 67*6236dae4SAndroid Build Coastguard Worker "geterr", 68*6236dae4SAndroid Build Coastguard Worker "hash_static", # unit 69*6236dae4SAndroid Build Coastguard Worker "header_callback", 70*6236dae4SAndroid Build Coastguard Worker "ioctlcallback", 71*6236dae4SAndroid Build Coastguard Worker "msgbuff", 72*6236dae4SAndroid Build Coastguard Worker "mydtor", # unit 73*6236dae4SAndroid Build Coastguard Worker "num_open", 74*6236dae4SAndroid Build Coastguard Worker "progress_callback", 75*6236dae4SAndroid Build Coastguard Worker "read_callback", 76*6236dae4SAndroid Build Coastguard Worker "readcallback", 77*6236dae4SAndroid Build Coastguard Worker "recv_pong", 78*6236dae4SAndroid Build Coastguard Worker "removeFd", 79*6236dae4SAndroid Build Coastguard Worker "rlim2str", 80*6236dae4SAndroid Build Coastguard Worker "run_thread", 81*6236dae4SAndroid Build Coastguard Worker "send_ping", 82*6236dae4SAndroid Build Coastguard Worker "showem", 83*6236dae4SAndroid Build Coastguard Worker "store_errmsg", 84*6236dae4SAndroid Build Coastguard Worker "suburl", 85*6236dae4SAndroid Build Coastguard Worker "test_failure", # shadow 86*6236dae4SAndroid Build Coastguard Worker "test_fire", 87*6236dae4SAndroid Build Coastguard Worker "test_lock", 88*6236dae4SAndroid Build Coastguard Worker "test_once", 89*6236dae4SAndroid Build Coastguard Worker "test_parse", # unit 90*6236dae4SAndroid Build Coastguard Worker "test_rlimit", 91*6236dae4SAndroid Build Coastguard Worker "test_unlock", 92*6236dae4SAndroid Build Coastguard Worker "testbuf", 93*6236dae4SAndroid Build Coastguard Worker "testcase", # unit 94*6236dae4SAndroid Build Coastguard Worker "testdata", 95*6236dae4SAndroid Build Coastguard Worker "testfd", 96*6236dae4SAndroid Build Coastguard Worker "testname", 97*6236dae4SAndroid Build Coastguard Worker "testpost", 98*6236dae4SAndroid Build Coastguard Worker "tests", # unit 99*6236dae4SAndroid Build Coastguard Worker "teststring", 100*6236dae4SAndroid Build Coastguard Worker "trailers_callback", 101*6236dae4SAndroid Build Coastguard Worker "transfer_status", 102*6236dae4SAndroid Build Coastguard Worker "unit_setup", # unit 103*6236dae4SAndroid Build Coastguard Worker "unit_stop", # unit 104*6236dae4SAndroid Build Coastguard Worker "updateFdSet", 105*6236dae4SAndroid Build Coastguard Worker "userdata", 106*6236dae4SAndroid Build Coastguard Worker "websocket", 107*6236dae4SAndroid Build Coastguard Worker "websocket_close", 108*6236dae4SAndroid Build Coastguard Worker "write_callback", 109*6236dae4SAndroid Build Coastguard Worker "write_cb", 110*6236dae4SAndroid Build Coastguard Worker "writecb", 111*6236dae4SAndroid Build Coastguard Worker "xferinfo", 112*6236dae4SAndroid Build Coastguard Worker ); 113*6236dae4SAndroid Build Coastguard Worker 114*6236dae4SAndroid Build Coastguard Worker# TODO: Some of these may be #undef-ed manually at the end of each source 115*6236dae4SAndroid Build Coastguard Workermy @reused_macros = ( 116*6236dae4SAndroid Build Coastguard Worker "HEADER_REQUEST", 117*6236dae4SAndroid Build Coastguard Worker "NUM_HANDLES", 118*6236dae4SAndroid Build Coastguard Worker "SAFETY_MARGIN", 119*6236dae4SAndroid Build Coastguard Worker "TEST_HANG_TIMEOUT", 120*6236dae4SAndroid Build Coastguard Worker ); 121*6236dae4SAndroid Build Coastguard Worker 122*6236dae4SAndroid Build Coastguard Workermy $tlist = ""; 123*6236dae4SAndroid Build Coastguard Worker 124*6236dae4SAndroid Build Coastguard Workerwhile(my $line = <$fh>) { 125*6236dae4SAndroid Build Coastguard Worker chomp $line; 126*6236dae4SAndroid Build Coastguard Worker if($line =~ /([a-z0-9]+)_SOURCES\ =\ ([a-z0-9]+)\.c/) { 127*6236dae4SAndroid Build Coastguard Worker my $name = $1; 128*6236dae4SAndroid Build Coastguard Worker my $namu = uc($name); 129*6236dae4SAndroid Build Coastguard Worker my $src = "$2.c"; 130*6236dae4SAndroid Build Coastguard Worker 131*6236dae4SAndroid Build Coastguard Worker # Make common symbols unique across test sources 132*6236dae4SAndroid Build Coastguard Worker foreach my $symb ("test", @reused_symbols) { 133*6236dae4SAndroid Build Coastguard Worker print "#undef $symb\n"; 134*6236dae4SAndroid Build Coastguard Worker print "#define $symb ${symb}_$name\n"; 135*6236dae4SAndroid Build Coastguard Worker } 136*6236dae4SAndroid Build Coastguard Worker 137*6236dae4SAndroid Build Coastguard Worker print "#define $namu\n"; 138*6236dae4SAndroid Build Coastguard Worker print "#include \"$src\"\n"; 139*6236dae4SAndroid Build Coastguard Worker print "#undef $namu\n"; 140*6236dae4SAndroid Build Coastguard Worker 141*6236dae4SAndroid Build Coastguard Worker # Reset macros re-used by multiple tests 142*6236dae4SAndroid Build Coastguard Worker foreach my $undef ("test", @reused_macros) { 143*6236dae4SAndroid Build Coastguard Worker print "#undef $undef\n"; 144*6236dae4SAndroid Build Coastguard Worker } 145*6236dae4SAndroid Build Coastguard Worker 146*6236dae4SAndroid Build Coastguard Worker print "\n"; 147*6236dae4SAndroid Build Coastguard Worker 148*6236dae4SAndroid Build Coastguard Worker $tlist .= " {\"$name\", test_$name},\n"; 149*6236dae4SAndroid Build Coastguard Worker } 150*6236dae4SAndroid Build Coastguard Worker} 151*6236dae4SAndroid Build Coastguard Worker 152*6236dae4SAndroid Build Coastguard Workerclose $fh; 153*6236dae4SAndroid Build Coastguard Worker 154*6236dae4SAndroid Build Coastguard Workerprint <<FOOTER 155*6236dae4SAndroid Build Coastguard Workerstatic const struct onetest s_tests[] = { 156*6236dae4SAndroid Build Coastguard Worker$tlist}; 157*6236dae4SAndroid Build Coastguard Worker 158*6236dae4SAndroid Build Coastguard Worker#undef CURLTESTS_BUNDLED_TEST_H 159*6236dae4SAndroid Build Coastguard Worker 160*6236dae4SAndroid Build Coastguard Worker#include "first.c" 161*6236dae4SAndroid Build Coastguard WorkerFOOTER 162*6236dae4SAndroid Build Coastguard Worker ; 163