From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 6CglH3B5PmMCeQYAWB0awg (envelope-from ) for ; Thu, 06 Oct 2022 02:45:04 -0400 Received: by simark.ca (Postfix, from userid 112) id 7D1CD1E112; Thu, 6 Oct 2022 02:45:04 -0400 (EDT) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=xqluxc3w; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 12ABA1E0CB for ; Thu, 6 Oct 2022 02:45:04 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B54F3383FB90 for ; Thu, 6 Oct 2022 06:45:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B54F3383FB90 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1665038703; bh=y7veUuyidcegyUIsz+84p57E/RAoGZjmRfBMfgYqPNY=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=xqluxc3w50/RoPRYcPQnMOCdrTClBECP/qzNhw2ak3yA2PQC4JbJghX8tHMFlc39V F9Gc9iqO5NpO3dMCf3/KqOmMv6We1Ja2tlYD3lgBoVJWvUUOg5s7HM5LlO8x4riMEu V2jSGI9BVpbaIzHyDxjv9kBEV8bFChYfOvBykYh8= Received: from mail-sender-0.a4lg.com (mail-sender.a4lg.com [153.120.152.154]) by sourceware.org (Postfix) with ESMTPS id D70DF384D15F for ; Thu, 6 Oct 2022 06:44:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D70DF384D15F Received: from [127.0.0.1] (localhost [127.0.0.1]) by mail-sender-0.a4lg.com (Postfix) with ESMTPSA id D6AEB300089; Thu, 6 Oct 2022 06:44:41 +0000 (UTC) To: Tsukasa OI , Andrew Burgess , Mike Frysinger Subject: [PATCH v3 4/5] sim: Check known getopt definition existence Date: Thu, 6 Oct 2022 06:43:52 +0000 Message-Id: In-Reply-To: References: Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Tsukasa OI via Gdb-patches Reply-To: Tsukasa OI Cc: gdb-patches@sourceware.org Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" Clang generates a warning if there is a function declaration/definition with zero arguments. Such declarations/definitions without a prototype (an argument list) are deprecated forms of indefinite arguments ("-Wdeprecated-non-prototype"). On the default configuration, it causes a build failure (unless "--disable-werror" is specified). include/getopt.h defines some getopt function definitions but one of them has a form "extern int getopt ();". If this form is selected in include/getopt.h, Clang generates a warning and the build fails by default. In really old environments, this getopt definition with no arguments is necessary (because the definition may change between environments). However, this definition is now a cause of problems on modern environments. A good news is, this definition is not always selected (e.g. if used by binutils/*.c). This is because configuration scripts of binutils, gas, gprof and ld tries to find known definition of getopt function is used and defines HAVE_DECL_GETOPT macro. If this macro is defined when getopt.h is included, a good form of getopt is used and Clang won't generate warnings. This commit adds a modified portion of ld/configure.ac to find the known getopt definition. If we could find one (and we *will* in most modern environments), we don't need to rely on the deprecated definition. --- sim/config.h.in | 3 +++ sim/configure | 32 ++++++++++++++++++++++++++++++++ sim/configure.ac | 10 ++++++++++ 3 files changed, 45 insertions(+) diff --git a/sim/config.h.in b/sim/config.h.in index 84c363c0aec..9a94b289e46 100644 --- a/sim/config.h.in +++ b/sim/config.h.in @@ -41,6 +41,9 @@ /* Define to 1 if you have the `chmod' function. */ #undef HAVE_CHMOD +/* Is the prototype for getopt in in the expected format? */ +#undef HAVE_DECL_GETOPT + /* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. */ #undef HAVE_DECL_TZNAME diff --git a/sim/configure b/sim/configure index 75d1935df38..dac7f085be1 100755 --- a/sim/configure +++ b/sim/configure @@ -16428,6 +16428,38 @@ $as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; } fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a known getopt prototype in unistd.h" >&5 +$as_echo_n "checking for a known getopt prototype in unistd.h... " >&6; } +if ${sim_cv_decl_getopt_unistd_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +extern int getopt (int, char *const*, const char *); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + sim_cv_decl_getopt_unistd_h=yes +else + sim_cv_decl_getopt_unistd_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sim_cv_decl_getopt_unistd_h" >&5 +$as_echo "$sim_cv_decl_getopt_unistd_h" >&6; } +if test $sim_cv_decl_getopt_unistd_h = yes; then + +$as_echo "#define HAVE_DECL_GETOPT 1" >>confdefs.h + +fi + diff --git a/sim/configure.ac b/sim/configure.ac index 66a1020efe0..be0cfdbea32 100644 --- a/sim/configure.ac +++ b/sim/configure.ac @@ -177,6 +177,16 @@ SIM_AC_OPTION_STDIO SIM_AC_OPTION_TRACE SIM_AC_OPTION_WARNINGS +AC_MSG_CHECKING(for a known getopt prototype in unistd.h) +AC_CACHE_VAL(sim_cv_decl_getopt_unistd_h, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [extern int getopt (int, char *const*, const char *);])], +sim_cv_decl_getopt_unistd_h=yes, sim_cv_decl_getopt_unistd_h=no)]) +AC_MSG_RESULT($sim_cv_decl_getopt_unistd_h) +if test $sim_cv_decl_getopt_unistd_h = yes; then + AC_DEFINE([HAVE_DECL_GETOPT], 1, + [Is the prototype for getopt in in the expected format?]) +fi + dnl These are unfortunate. They are conditionally called by other sim macros dnl but always used by common/Make-common.in. So we have to subst here even dnl when the rest of the code is in the respective macros. Once we merge the -- 2.34.1