xref: /aosp_15_r20/external/curl/tests/mk-bundle.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
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