From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id WIoBHMcUMGMXrD8AWB0awg (envelope-from ) for ; Sun, 25 Sep 2022 04:43:51 -0400 Received: by simark.ca (Postfix, from userid 112) id 6FE0F1E112; Sun, 25 Sep 2022 04:43:51 -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=kmE4D1C3; 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=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (ip-8-43-85-97.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 06FA01E0D3 for ; Sun, 25 Sep 2022 04:43:51 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id ACE27385842F for ; Sun, 25 Sep 2022 08:43:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ACE27385842F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1664095430; bh=8d+HoAH3Fslf5Qp9TFJzoVZL6+omvyZfeTtWmWNM0h8=; 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=kmE4D1C3GrGkkm7xg6mz1t1nlsLqgcYWudM5os8zS0HI5BVOo3+sZ6YTPh+0Qo2ly 45HGRD18s0dgbuL+OnK9nhleXFUIe5HZW71ynhUdcgeDIzngBu0OPRGnaDSmbfve1H 4kyIUR9jiuhonOf4fnq6lEN1R8mBTTybGbXzvQrw= Received: from mail-sender-0.a4lg.com (mail-sender-0.a4lg.com [IPv6:2401:2500:203:30b:4000:6bfe:4757:0]) by sourceware.org (Postfix) with ESMTPS id B1889385828F for ; Sun, 25 Sep 2022 08:43:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B1889385828F Received: from [127.0.0.1] (localhost [127.0.0.1]) by mail-sender-0.a4lg.com (Postfix) with ESMTPSA id 0BF37300089; Sun, 25 Sep 2022 08:43:02 +0000 (UTC) To: Tsukasa OI , Andrew Burgess , Mike Frysinger Subject: [PATCH v2 4/5] sim: Check known getopt definition existence Date: Sun, 25 Sep 2022 08:42:05 +0000 Message-Id: <77a26ba8062a1e78957ab7a1773374633b4ef13c.1664095312.git.research_trasio@irq.a4lg.com> 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 portion of ld/configure.ac to find the known getopt definition. If we could find one (and we *will* in most environments), we don't need to rely on the deprecated definition. sim/ChangeLog: * configure.ac: Find the known getopt definition in . * configure: Regenerate. * config.h.in: Likewise. --- 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 8e84759df04..5091dc32a1b 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 b31c2f5d8f3..495f1b21ce9 100755 --- a/sim/configure +++ b/sim/configure @@ -16298,6 +16298,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 ${ld_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 : + ld_cv_decl_getopt_unistd_h=yes +else + ld_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: $ld_cv_decl_getopt_unistd_h" >&5 +$as_echo "$ld_cv_decl_getopt_unistd_h" >&6; } +if test $ld_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..c24c676d4da 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(ld_cv_decl_getopt_unistd_h, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [extern int getopt (int, char *const*, const char *);])], +ld_cv_decl_getopt_unistd_h=yes, ld_cv_decl_getopt_unistd_h=no)]) +AC_MSG_RESULT($ld_cv_decl_getopt_unistd_h) +if test $ld_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