https://github.com/jonathanstowe/TermReadKey/commit/1e3455135ac17f25ce0c4f01722a184a1fb5c4d1 From 1e3455135ac17f25ce0c4f01722a184a1fb5c4d1 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Fri, 25 Nov 2022 17:28:56 +0100 Subject: [PATCH] Configure.pm: Specify the return type of main as int Implicit int is a language feature that was removed in the 1999 version of the C language. I could not fix DeducePrototype because I do not see how it can work reliably with this approach. I don't think TermReadKey uses this function. --- a/Configure.pm +++ b/Configure.pm @@ -503,7 +503,7 @@ by the compiler is returned. =cut sub CheckHeader { #Find a header (or set of headers) that exists - ApplyHeaders("main(){}",@_); + ApplyHeaders("int main(){}",@_); } =head2 CheckStructure @@ -516,7 +516,7 @@ properly will be returned. B will be returned if nothing succeeds. sub CheckStructure { # Check existance of a structure. my($structname,@headers) = @_; - ApplyHeaders("main(){ struct $structname s;}",@headers); + ApplyHeaders("int main(){ struct $structname s;}",@headers); } =head2 CheckField @@ -530,7 +530,7 @@ be returned if nothing succeeds. sub CheckField { # Check for the existance of specified field in structure my($structname,$fieldname,@headers) = @_; - ApplyHeaders("main(){ struct $structname s1; struct $structname s2; + ApplyHeaders("int main(){ struct $structname s1; struct $structname s2; s1.$fieldname = s2.$fieldname; }",@headers); } @@ -544,7 +544,7 @@ that symbol will be returned. B will be returned if nothing succeeds. sub CheckLSymbol { # Check for linkable symbol my($symbol,@libs) = @_; - ApplyLibs("main() { void * f = (void *)($symbol); }",@libs); + ApplyLibs("int main() { void * f = (void *)($symbol); }",@libs); } =head2 CheckSymbol @@ -558,7 +558,8 @@ B will be returned if nothing succeeds. sub CheckSymbol { # Check for linkable/header symbol my($symbol,@lookup) = @_; - ApplyHeadersAndLibs("main() { void * f = (void *)($symbol); }",@lookup); + ApplyHeadersAndLibs("int main() { void * f = (void *)($symbol); }", + @lookup); } =head2 CheckHSymbol @@ -571,7 +572,7 @@ that symbol will be returned. B will be returned if nothing succeeds. sub CheckHSymbol { # Check for header symbol my($symbol,@headers) = @_; - ApplyHeaders("main() { void * f = (void *)($symbol); }",@headers); + ApplyHeaders("int main() { void * f = (void *)($symbol); }",@headers); } =head2 CheckHPrototype (unexported) @@ -591,7 +592,7 @@ sub CheckHPrototype { # Check for header prototype. # names function doesn't exist, this call will _succeed_. Caveat Utilitor. my($function,$proto,@headers) = @_; my(@proto) = @{$proto}; - ApplyHeaders("main() { extern ".$proto[0]." $function(". + ApplyHeaders("int main() { extern ".$proto[0]." $function(". join(",",@proto[1..$#proto])."); }",@headers); } @@ -612,7 +613,8 @@ Example: sub GetSymbol { # Check for linkable/header symbol my($symbol,$printf,$cast,@lookup) = @_,"",""; scalar(ApplyHeadersAndLibsAndExecute( - "main(){ printf(\"\%$printf\",($cast)($symbol));exit(0);}",@lookup)); + "int main(){ printf(\"\%$printf\",($cast)($symbol));exit(0);}", + @lookup)); } =head2 GetTextSymbol @@ -768,7 +770,7 @@ main(){ }"); "double","long double", "char","unsigned char","short int","unsigned short int"); - if(Compile("main(){flurfie a;}")) { @types = (); } + if(Compile("int main(){flurfie a;}")) { @types = (); } $Verbose=0; @@ -781,7 +783,7 @@ main(){ }"); if(Compile(" extern void func($types[$i]); extern void func($types[$j]); -main(){}")) { +int main(){}")) { print "Removing type $types[$j] because it equals $types[$i]\n"; splice(@types,$j,1); $j--; @@ -795,7 +797,7 @@ main(){}")) { if(Compile(" $types[$i] func(void); extern $types[$j] func(void); -main(){}")) { +int main(){}")) { print "Removing type $types[$j] because it equals $types[$i]\n"; splice(@types,$j,1); $j--; @@ -833,7 +835,7 @@ main(){}")) { # Can we check the return type without worry about arguements? if($checkreturn and (!$checknilargs or !$checkniletcargs)) { for (@types) { - if(ApplyHeaders("extern $_ $function(". ($checknilargs?"...":"").");main(){}",[@headers])) { + if(ApplyHeaders("extern $_ $function(". ($checknilargs?"...":"").");int main(){}",[@headers])) { $rettype = $_; # Great, we found the return type. last; } @@ -847,9 +849,9 @@ main(){}")) { my $numargs=-1; my $varargs=0; for (0..32) { - if(ApplyHeaders("main(){ $function(".join(",",("0") x $_).");}",@headers)) { + if(ApplyHeaders("int main(){ $function(".join(",",("0") x $_).");}",@headers)) { $numargs=$_; - if(ApplyHeaders("main(){ $function(".join(",",("0") x ($_+1)).");}",@headers)) { + if(ApplyHeaders("int main(){ $function(".join(",",("0") x ($_+1)).");}",@headers)) { $varargs=1; } last @@ -865,7 +867,7 @@ main(){}")) { if(@args>0 and !defined($rettype)) { for (@types) { - if(defined(ApplyHeaders("extern $_ $function(".join(",",@args).");main(){}",[@headers]))) { + if(defined(ApplyHeaders("extern $_ $function(".join(",",@args).");int main(){}",[@headers]))) { $rettype = $_; # Great, we found the return type. last; }