xref: /aosp_15_r20/external/curl/scripts/ciconfig.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) Daniel Stenberg, <[email protected]>, et al.
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# these options are enabled by default in the sense that they will attempt to
27*6236dae4SAndroid Build Coastguard Worker# check for and use this feature without the configure flag
28*6236dae4SAndroid Build Coastguard Workermy %defaulton = (
29*6236dae4SAndroid Build Coastguard Worker    # --enable-
30*6236dae4SAndroid Build Coastguard Worker    'shared' => 1,
31*6236dae4SAndroid Build Coastguard Worker    'static' => 1,
32*6236dae4SAndroid Build Coastguard Worker    'fast-install' => 1,
33*6236dae4SAndroid Build Coastguard Worker    'silent-rules' => 1,
34*6236dae4SAndroid Build Coastguard Worker    'optimize' => 1,
35*6236dae4SAndroid Build Coastguard Worker    'http' => 1,
36*6236dae4SAndroid Build Coastguard Worker    'ftp' => 1,
37*6236dae4SAndroid Build Coastguard Worker    'file' => 1,
38*6236dae4SAndroid Build Coastguard Worker    'ldap' => 1,
39*6236dae4SAndroid Build Coastguard Worker    'ldaps' => 1,
40*6236dae4SAndroid Build Coastguard Worker    'rtsp' => 1,
41*6236dae4SAndroid Build Coastguard Worker    'proxy' => 1,
42*6236dae4SAndroid Build Coastguard Worker    'dict' => 1,
43*6236dae4SAndroid Build Coastguard Worker    'telnet' => 1,
44*6236dae4SAndroid Build Coastguard Worker    'tftp' => 1,
45*6236dae4SAndroid Build Coastguard Worker    'pop3' => 1,
46*6236dae4SAndroid Build Coastguard Worker    'imap' => 1,
47*6236dae4SAndroid Build Coastguard Worker    'smb' => 1,
48*6236dae4SAndroid Build Coastguard Worker    'smtp' => 1,
49*6236dae4SAndroid Build Coastguard Worker    'gopher' => 1,
50*6236dae4SAndroid Build Coastguard Worker    'mqtt' => 1,
51*6236dae4SAndroid Build Coastguard Worker    'manual' => 1,
52*6236dae4SAndroid Build Coastguard Worker    'libcurl-option' => 1,
53*6236dae4SAndroid Build Coastguard Worker    'libgcc' => 1,
54*6236dae4SAndroid Build Coastguard Worker    'ipv6' => 1,
55*6236dae4SAndroid Build Coastguard Worker    'openssl-auto-load-config' => 1,
56*6236dae4SAndroid Build Coastguard Worker    'versioned-symbols' => 1,
57*6236dae4SAndroid Build Coastguard Worker    'symbol-hiding' => 1,
58*6236dae4SAndroid Build Coastguard Worker    'threaded-resolver' => 1,
59*6236dae4SAndroid Build Coastguard Worker    'pthreads' => 1,
60*6236dae4SAndroid Build Coastguard Worker    'verbose' => 1,
61*6236dae4SAndroid Build Coastguard Worker    'basic-auth' => 1,
62*6236dae4SAndroid Build Coastguard Worker    'bearer-auth' => 1,
63*6236dae4SAndroid Build Coastguard Worker    'digest-auth' => 1,
64*6236dae4SAndroid Build Coastguard Worker    'kerberos-auth' => 1,
65*6236dae4SAndroid Build Coastguard Worker    'negotiate-auth' => 1,
66*6236dae4SAndroid Build Coastguard Worker    'aws' => 1,
67*6236dae4SAndroid Build Coastguard Worker    'ntlm' => 1,
68*6236dae4SAndroid Build Coastguard Worker    'ntlm-wb' => 1,
69*6236dae4SAndroid Build Coastguard Worker    'tls-srp' => 1,
70*6236dae4SAndroid Build Coastguard Worker    'unix-sockets' => 1,
71*6236dae4SAndroid Build Coastguard Worker    'cookies' => 1,
72*6236dae4SAndroid Build Coastguard Worker    'socketpair' => 1,
73*6236dae4SAndroid Build Coastguard Worker    'http-auth' => 1,
74*6236dae4SAndroid Build Coastguard Worker    'doh' => 1,
75*6236dae4SAndroid Build Coastguard Worker    'mime' => 1,
76*6236dae4SAndroid Build Coastguard Worker    'dateparse' => 1,
77*6236dae4SAndroid Build Coastguard Worker    'netrc' => 1,
78*6236dae4SAndroid Build Coastguard Worker    'progress-meter' => 1,
79*6236dae4SAndroid Build Coastguard Worker    'dnsshuffle' => 1,
80*6236dae4SAndroid Build Coastguard Worker    'get-easy-options' => 1,
81*6236dae4SAndroid Build Coastguard Worker    'alt-svc' => 1,
82*6236dae4SAndroid Build Coastguard Worker    'hsts' => 1,
83*6236dae4SAndroid Build Coastguard Worker
84*6236dae4SAndroid Build Coastguard Worker    # --with-
85*6236dae4SAndroid Build Coastguard Worker    'aix-soname' => 1,
86*6236dae4SAndroid Build Coastguard Worker    'pic' => 1,
87*6236dae4SAndroid Build Coastguard Worker    'zlib' => 1,
88*6236dae4SAndroid Build Coastguard Worker    'zstd' => 1,
89*6236dae4SAndroid Build Coastguard Worker    'brotli' => 1,
90*6236dae4SAndroid Build Coastguard Worker    'random' => 1,
91*6236dae4SAndroid Build Coastguard Worker    'ca-bundle' => 1,
92*6236dae4SAndroid Build Coastguard Worker    'ca-path' => 1,
93*6236dae4SAndroid Build Coastguard Worker    'libssh2' => 1,
94*6236dae4SAndroid Build Coastguard Worker    'nghttp2' => 1,
95*6236dae4SAndroid Build Coastguard Worker    'librtmp' => 1,
96*6236dae4SAndroid Build Coastguard Worker    'libidn2' => 1,
97*6236dae4SAndroid Build Coastguard Worker    'sysroot' => 1,
98*6236dae4SAndroid Build Coastguard Worker    'lber-lib' => 1,
99*6236dae4SAndroid Build Coastguard Worker    'ldap-lib' => 1,
100*6236dae4SAndroid Build Coastguard Worker
101*6236dae4SAndroid Build Coastguard Worker    );
102*6236dae4SAndroid Build Coastguard Worker
103*6236dae4SAndroid Build Coastguard Worker
104*6236dae4SAndroid Build Coastguard Workersub configureopts {
105*6236dae4SAndroid Build Coastguard Worker    my ($opts)=@_;
106*6236dae4SAndroid Build Coastguard Worker    my %thisin;
107*6236dae4SAndroid Build Coastguard Worker    my %thisout;
108*6236dae4SAndroid Build Coastguard Worker
109*6236dae4SAndroid Build Coastguard Worker    while($opts =~ s/--with-([^ =]*)//) {
110*6236dae4SAndroid Build Coastguard Worker        $with{$1}++;
111*6236dae4SAndroid Build Coastguard Worker        $used{$1}++;
112*6236dae4SAndroid Build Coastguard Worker        $thisin{$1}++;
113*6236dae4SAndroid Build Coastguard Worker    }
114*6236dae4SAndroid Build Coastguard Worker    while($opts =~ s/--enable-([^ =]*)//) {
115*6236dae4SAndroid Build Coastguard Worker        $with{$1}++;
116*6236dae4SAndroid Build Coastguard Worker        $used{$1}++;
117*6236dae4SAndroid Build Coastguard Worker        $thisin{$1}++;
118*6236dae4SAndroid Build Coastguard Worker    }
119*6236dae4SAndroid Build Coastguard Worker
120*6236dae4SAndroid Build Coastguard Worker    while($opts =~ s/--without-([^ =]*)//) {
121*6236dae4SAndroid Build Coastguard Worker        $without{$1}++;
122*6236dae4SAndroid Build Coastguard Worker        $used{$1}++;
123*6236dae4SAndroid Build Coastguard Worker        $thisout{$1}++;
124*6236dae4SAndroid Build Coastguard Worker    }
125*6236dae4SAndroid Build Coastguard Worker    while($opts =~ s/--disable-([^ =]*)//) {
126*6236dae4SAndroid Build Coastguard Worker        $without{$1}++;
127*6236dae4SAndroid Build Coastguard Worker        $used{$1}++;
128*6236dae4SAndroid Build Coastguard Worker        $thisout{$1}++;
129*6236dae4SAndroid Build Coastguard Worker    }
130*6236dae4SAndroid Build Coastguard Worker    return join(" ", sort(keys %thisin), "/", sort(keys %thisout));
131*6236dae4SAndroid Build Coastguard Worker}
132*6236dae4SAndroid Build Coastguard Worker
133*6236dae4SAndroid Build Coastguard Worker# run configure --help and check what available WITH/ENABLE options that exist
134*6236dae4SAndroid Build Coastguard Workersub configurehelp {
135*6236dae4SAndroid Build Coastguard Worker    open(C, "./configure --help|");
136*6236dae4SAndroid Build Coastguard Worker    while(<C>) {
137*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^  --(with|enable)-([a-z0-9-]+)/) {
138*6236dae4SAndroid Build Coastguard Worker            $avail{$2}++;
139*6236dae4SAndroid Build Coastguard Worker        }
140*6236dae4SAndroid Build Coastguard Worker    }
141*6236dae4SAndroid Build Coastguard Worker    close(C);
142*6236dae4SAndroid Build Coastguard Worker}
143*6236dae4SAndroid Build Coastguard Worker
144*6236dae4SAndroid Build Coastguard Workersub scanjobs {
145*6236dae4SAndroid Build Coastguard Worker
146*6236dae4SAndroid Build Coastguard Worker    my $jobs;
147*6236dae4SAndroid Build Coastguard Worker    open(CI, "./scripts/cijobs.pl|");
148*6236dae4SAndroid Build Coastguard Worker    while(<CI>) {
149*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^\#\#\#/) {
150*6236dae4SAndroid Build Coastguard Worker            $jobs++;
151*6236dae4SAndroid Build Coastguard Worker        }
152*6236dae4SAndroid Build Coastguard Worker        if($_ =~ /^configure: (.*)/) {
153*6236dae4SAndroid Build Coastguard Worker            my $c= configureopts($1);
154*6236dae4SAndroid Build Coastguard Worker            #print "C: $c\n";
155*6236dae4SAndroid Build Coastguard Worker        }
156*6236dae4SAndroid Build Coastguard Worker    }
157*6236dae4SAndroid Build Coastguard Worker    close(CI);
158*6236dae4SAndroid Build Coastguard Worker}
159*6236dae4SAndroid Build Coastguard Worker
160*6236dae4SAndroid Build Coastguard Workerconfigurehelp();
161*6236dae4SAndroid Build Coastguard Workerscanjobs();
162*6236dae4SAndroid Build Coastguard Worker
163*6236dae4SAndroid Build Coastguard Workerprint "Used configure options (with / without)\n";
164*6236dae4SAndroid Build Coastguard Workerfor my $w (sort keys %used) {
165*6236dae4SAndroid Build Coastguard Worker    printf "  %s: %d %d%s\n", $w, $with{$w}, $without{$w},
166*6236dae4SAndroid Build Coastguard Worker        $defaulton{$w} ? " (auto)":"";
167*6236dae4SAndroid Build Coastguard Worker}
168*6236dae4SAndroid Build Coastguard Worker
169*6236dae4SAndroid Build Coastguard Workerprint "Never used configure options\n";
170*6236dae4SAndroid Build Coastguard Workerfor my $w (sort keys %avail) {
171*6236dae4SAndroid Build Coastguard Worker    if(!$used{$w}) {
172*6236dae4SAndroid Build Coastguard Worker        printf "  %s%s\n", $w,
173*6236dae4SAndroid Build Coastguard Worker            $defaulton{$w} ? " (auto)":"";
174*6236dae4SAndroid Build Coastguard Worker    }
175*6236dae4SAndroid Build Coastguard Worker}
176*6236dae4SAndroid Build Coastguard Worker
177*6236dae4SAndroid Build Coastguard Workerprint "Never ENABLED configure options that aren't on by default\n";
178*6236dae4SAndroid Build Coastguard Workerfor my $w (sort keys %avail) {
179*6236dae4SAndroid Build Coastguard Worker    if(!$with{$w} && !$defaulton{$w}) {
180*6236dae4SAndroid Build Coastguard Worker        printf "  %s\n", $w;
181*6236dae4SAndroid Build Coastguard Worker    }
182*6236dae4SAndroid Build Coastguard Worker}
183*6236dae4SAndroid Build Coastguard Worker
184*6236dae4SAndroid Build Coastguard Worker
185*6236dae4SAndroid Build Coastguard Workerprint "ENABLED configure options that aren't available\n";
186*6236dae4SAndroid Build Coastguard Workerfor my $w (sort keys %with) {
187*6236dae4SAndroid Build Coastguard Worker    if(!$avail{$w}) {
188*6236dae4SAndroid Build Coastguard Worker        printf "  %s\n", $w;
189*6236dae4SAndroid Build Coastguard Worker    }
190*6236dae4SAndroid Build Coastguard Worker}
191