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