From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS22989 209.51.188.0/24 X-Spam-Status: No, score=-3.7 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 381ED1F47C for ; Sat, 21 Jan 2023 08:56:38 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=clisp.org header.i=@clisp.org header.a=rsa-sha256 header.s=strato-dkim-0002 header.b=gAnnszEM; dkim-atps=neutral Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pJ9ff-0005yU-O8; Sat, 21 Jan 2023 03:56:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pJ9fe-0005yJ-CI for bug-gnulib@gnu.org; Sat, 21 Jan 2023 03:56:18 -0500 Received: from mo4-p00-ob.smtp.rzone.de ([81.169.146.219]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pJ9fb-0006hW-Rg for bug-gnulib@gnu.org; Sat, 21 Jan 2023 03:56:18 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1674291372; cv=none; d=strato.com; s=strato-dkim-0002; b=m5EjOUSYGabPNzeDoqq3aGzOT3+05EulswtqfpFd18Fs0yiEh0+UzMTH9yvNenoEgp LQsAtDJjGnJkJOLQ49B8bYw518sHtrE2hSgphBAAWCvLTHKcGPJVL9dEl/d/KXL35TVX mKLAuKInV1qsIT5d0wGbGeVicnTRHDwrBMvY7x2LGqX7R91I0RRAYWoofiRoS7JBOWrI MAjqTLwWWFIrLprhD0PySMZP1sooBtppszO5eMBNsd58rRRAU48sbAS4bipck/MH5WkH EHXeZ33fgSsABvYs+UFlPXof7DNtP1JaACCGYZ/Vy3uhK3Bv7Bri0usMaiyhS/RTxAny 3eqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1674291372; s=strato-dkim-0002; d=strato.com; h=Message-ID:Date:Subject:To:From:Cc:Date:From:Subject:Sender; bh=PISF66zEtfEeccSctpZRuf2n6LNbh7tWodNTGefLK0w=; b=sj4ZSfVh/+Rv1jM5msijWtqwOvZNcSob+C4OJ40KrcoRp6VtINicTJCSKzMisG7z6c ptPUkPvoHWRlORgm9nigYKlsKJ+6oDrfPwuUdtu7V9DG2QL5xqHnvs4Rvqta5HkjjR+S vLg93LcdEgBP7oRqBmuknEc2sfoyueb5Q5PUekv29jV5fgGACu09rM9X1hDVNBSLv8gL 0koa0OClXrWqs+jOxLmslcWUdEK6bC0Iq8L+gvZyX3OpsRxHDrTBHKKlI38M+wARcIsD x1a5Q400NdXvRIyQDIJsWBOrmaX7+Pnd6ILVJtZY36HjTHQM+Npl0tVN8OTHVLhrQgXH GLCw== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1674291372; s=strato-dkim-0002; d=clisp.org; h=Message-ID:Date:Subject:To:From:Cc:Date:From:Subject:Sender; bh=PISF66zEtfEeccSctpZRuf2n6LNbh7tWodNTGefLK0w=; b=gAnnszEM1yGrc9sKfA+BYULSRygfoecN5yLwPsE9XegTJaq5PaVitRBYgia1f1goFR Ewgutmk8tzBq4+zX5v6cR6tAzAp2xjXkhHnCnQ/YOqAZxBZTvVuCAjbSy0WRt95X2ZyG RQsIYrbZ/ANGFxEBbx+TqNjmNOS8AxTc9WlDmwusrO8mXMpRIkiUl+5FpU/bl5oizYEL dDVTo4WbXEKAZG/vfkcBfqj0EJcJXilaFhfrbQ+z4rNvNKpGlVHDxF+gUoqXArqYGEUk Z+MY+CWAyEg6kfK31Q1r4rSklhiDqSgbS8dQfEkw7rHZ5G+0qm1ded8JSPq6NIOD6wXO O9hA== X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlIWs+iCP5vnk6shH0WWb0LN8XZoH94zq68+3cfpPC2aS1bIwRG2tcswHQhJjAoX9mAQ==" Received: from nimes.localnet by smtp.strato.de (RZmta 49.1.0 AUTH) with ESMTPSA id w8066ez0L8uC7N2 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Sat, 21 Jan 2023 09:56:12 +0100 (CET) From: Bruno Haible To: bug-gnulib@gnu.org Subject: getprogname: Move declaration from "getprogname.h" to Date: Sat, 21 Jan 2023 09:56:12 +0100 Message-ID: <2228587.e3iEh8JYqD@nimes> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Received-SPF: none client-ip=81.169.146.219; envelope-from=bruno@clisp.org; helo=mo4-p00-ob.smtp.rzone.de X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: bug-gnulib@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gnulib discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org Sender: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org Why is the getprogname() function declared in "getprogname.h"? All platforms that have this function =E2=80=94 Mac OS X, FreeBSD, NetBSD, OpenBSD >=3D 5.4, Solaris >=3D 11, Cygwin, Android API level >=3D 21 =E2=80= =94 declare it in . It thus appears very unlikely that, if glibc ever adds this function, they would choose to declare it in a header file other than . I can find no rationale in the mailing list archive from 2016. So, it makes sense to move the declaration of this function to . =46or a transition period, "getprogname.h" can continue to exist, but will emit a deprecation warning. 2023-01-21 Bruno Haible getprogname: Move declaration from "getprogname.h" to . * lib/stdlib.in.h (getprogname): New declaration. * lib/getprogname.h: Add deprecation warning. (getprogname): Remove declaration. * lib/getprogname.c: Include instead of getprogname.h. * m4/stdlib_h.m4 (gl_STDLIB_H): Test whether getprogname is declared. (gl_STDLIB_H_REQUIRE_DEFAULTS): Initialize GNULIB_GETPROGNAME. (gl_STDLIB_H_DEFAULTS): Initialize HAVE_GETPROGNAME. * m4/getprogname.m4 (gl_PREREQ_GETPROGNAME): New macro, extracted from gl_FUNC_GETPROGNAME. Set HAVE_GETPROGNAME. (gl_FUNC_GETPROGNAME): Remove code that was moved to gl_PREREQ_GETPROGNAME. * modules/stdlib (Makefile.am): Substitute GNULIB_GETPROGNAME and HAVE_GETPROGNAME. * modules/getprogname (Depends-on): Add stdlib. (configure.ac): Define a module indicator. Invoke gl_PREREQ_GETPROGNAME. (Makefile.am): Don't compile getprogname.c if not needed. (Include): List instead of getprogname.h. * tests/test-getprogname.c: Include instead of getprogname.h. * NEWS: Mention the change. * lib/argmatch.c: Don't include getprogname.h. * lib/c-stack.c: Likewise. * lib/error.c: Likewise. * lib/git-merge-changelog.c: Likewise. diff --git a/NEWS b/NEWS index b54781a6f8..e8cc0c4ae7 100644 =2D-- a/NEWS +++ b/NEWS @@ -74,6 +74,9 @@ User visible incompatible changes =20 Date Modules Changes =20 +2023-01-21 getprogname The include file is changed from "getprogname.= h" + to . + 2023-01-15 stdalign This module is deprecated. Use alignasof inst= ead. =20 2023-01-07 timer_time Link with $(TIMER_TIME_LIB) instead of diff --git a/lib/argmatch.c b/lib/argmatch.c index 1e5b77bf32..9cddb37d69 100644 =2D-- a/lib/argmatch.c +++ b/lib/argmatch.c @@ -32,7 +32,6 @@ =20 #include "error.h" #include "quotearg.h" =2D#include "getprogname.h" =20 #if USE_UNLOCKED_IO # include "unlocked-io.h" diff --git a/lib/c-stack.c b/lib/c-stack.c index 079d86846d..f0078d51ad 100644 =2D-- a/lib/c-stack.c +++ b/lib/c-stack.c @@ -52,7 +52,6 @@ #include =20 #include "exitfail.h" =2D#include "getprogname.h" #include "idx.h" #include "ignore-value.h" =20 diff --git a/lib/error.c b/lib/error.c index 6875f134ed..ef4372875f 100644 =2D-- a/lib/error.c +++ b/lib/error.c @@ -42,8 +42,6 @@ # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) # define _GL_ARG_NONNULL(a) =2D#else =2D# include "getprogname.h" #endif =20 #if USE_UNLOCKED_IO diff --git a/lib/getprogname.c b/lib/getprogname.c index 32c96043b0..279d79f012 100644 =2D-- a/lib/getprogname.c +++ b/lib/getprogname.c @@ -16,11 +16,10 @@ =20 #include =20 =2D/* Specification. */ =2D#include "getprogname.h" +/* Specification. Also get __argv declaration. */ +#include =20 #include /* get program_invocation_name declaration */ =2D#include /* get __argv declaration */ =20 #ifdef _AIX # include @@ -53,13 +52,12 @@ =20 #if defined __SCO_VERSION__ || defined __sysv5__ # include =2D# include # include #endif =20 #include "basename-lgpl.h" =20 =2D#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, O= penBSD >=3D 5.4, Cygwin */ +#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >=3D 5= =2E4, Solaris >=3D 11, Cygwin, Android API level >=3D 21 */ char const * getprogname (void) { diff --git a/lib/getprogname.h b/lib/getprogname.h index 4b9126f9d7..13314f21e2 100644 =2D-- a/lib/getprogname.h +++ b/lib/getprogname.h @@ -19,22 +19,8 @@ =20 #include =20 =2D#ifdef __cplusplus =2Dextern "C" { =2D#endif =2D =2D/* Return the base name of the executing program. =2D On native Windows this will usually end in ".exe" or ".EXE". */ =2D#ifndef HAVE_GETPROGNAME =2Dextern char const *getprogname (void) =2D# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME =2D _GL_ATTRIBUTE_PURE =2D# endif =2D ; =2D#endif =2D =2D#ifdef __cplusplus =2D} +#if __GNUC__ || (__clang_major__ >=3D 4) +# warning "The include file getprogname.h is deprecated. Use in= stead." #endif =20 #endif diff --git a/lib/git-merge-changelog.c b/lib/git-merge-changelog.c index 5708dd5eac..67a932c5df 100644 =2D-- a/lib/git-merge-changelog.c +++ b/lib/git-merge-changelog.c @@ -176,7 +176,6 @@ #include "minmax.h" #include "c-strstr.h" #include "fwriteerror.h" =2D#include "getprogname.h" =20 #define ASSERT(expr) \ do = \ diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index b79e5f7096..55f31feb42 100644 =2D-- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -430,6 +430,26 @@ _GL_WARN_ON_USE (getloadavg, "getloadavg is not portab= le - " # endif #endif =20 +#if @GNULIB_GETPROGNAME@ +/* Return the base name of the executing program. + On native Windows this will usually end in ".exe" or ".EXE". */ +# if !@HAVE_GETPROGNAME@ +# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME +_GL_FUNCDECL_SYS (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE); +# else +_GL_FUNCDECL_SYS (getprogname, const char *, (void)); +# endif +# endif +_GL_CXXALIAS_SYS (getprogname, const char *, (void)); +_GL_CXXALIASWARN (getprogname); +#elif defined GNULIB_POSIXCHECK +# undef getprogname +# if HAVE_RAW_DECL_GETPROGNAME +_GL_WARN_ON_USE (getprogname, "getprogname is unportable - " + "use gnulib module getprogname for portability"); +# endif +#endif + #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=3Dvalue", getsubopt parses the first of these element= s. diff --git a/m4/getprogname.m4 b/m4/getprogname.m4 index 7c306c80a9..0a4b9c874a 100644 =2D-- a/m4/getprogname.m4 +++ b/m4/getprogname.m4 @@ -5,12 +5,19 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. =20 =2D# serial 5 +# serial 6 =20 AC_DEFUN([gl_FUNC_GETPROGNAME], [ =2D AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_FUNCS_ANDROID([getprogname], [[#include ]]) + if test $ac_cv_func_getprogname =3D no; then + HAVE_GETPROGNAME=3D0 + fi +]) + +AC_DEFUN([gl_PREREQ_GETPROGNAME], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([getexecname]) ac_found=3D0 AC_CHECK_DECLS([program_invocation_name], [ac_found=3D1], [], diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4 index e96be22f58..f1f2d04047 100644 =2D-- a/m4/stdlib_h.m4 +++ b/m4/stdlib_h.m4 @@ -1,4 +1,4 @@ =2D# stdlib_h.m4 serial 66 +# stdlib_h.m4 serial 67 dnl Copyright (C) 2007-2023 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -23,7 +23,7 @@ AC_DEFUN_ONCE([gl_STDLIB_H], # include #endif ]], [_Exit aligned_alloc atoll canonicalize_file_name free =2D getloadavg getsubopt grantpt + getloadavg getprogname getsubopt grantpt initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstem= ps posix_memalign posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv @@ -73,6 +73,7 @@ AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS], gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG]) + gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPROGNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_GNU]) @@ -130,6 +131,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS], HAVE_DECL_FCVT=3D1; AC_SUBST([HAVE_DECL_FCVT]) HAVE_DECL_GCVT=3D1; AC_SUBST([HAVE_DECL_GCVT]) HAVE_DECL_GETLOADAVG=3D1; AC_SUBST([HAVE_DECL_GETLOADAVG]) + HAVE_GETPROGNAME=3D1; AC_SUBST([HAVE_GETPROGNAME]) HAVE_GETSUBOPT=3D1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=3D1; AC_SUBST([HAVE_GRANTPT]) HAVE_INITSTATE=3D1; AC_SUBST([HAVE_INITSTATE]) diff --git a/modules/getprogname b/modules/getprogname index 94e55186d5..dadbffbbd6 100644 =2D-- a/modules/getprogname +++ b/modules/getprogname @@ -7,18 +7,26 @@ lib/getprogname.c m4/getprogname.m4 =20 Depends-on: =2Dbasename-lgpl =2Dextensions =2Dopen +stdlib +basename-lgpl [test $HAVE_GETPROGNAME =3D 0] +extensions [test $HAVE_GETPROGNAME =3D 0] +open [test $HAVE_GETPROGNAME =3D 0] =20 configure.ac: gl_FUNC_GETPROGNAME +gl_CONDITIONAL([GL_COND_OBJ_GETPROGNAME], [test $HAVE_GETPROGNAME =3D 0]) +AM_COND_IF([GL_COND_OBJ_GETPROGNAME], [ + gl_PREREQ_GETPROGNAME +]) +gl_STDLIB_MODULE_INDICATOR([getprogname]) =20 Makefile.am: =2Dlib_SOURCES +=3D getprogname.h getprogname.c +if GL_COND_OBJ_GETPROGNAME +lib_SOURCES +=3D getprogname.c +endif =20 Include: =2D"getprogname.h" + =20 License: LGPLv2+ diff --git a/modules/stdlib b/modules/stdlib index 45d8f59331..1e6e18f53c 100644 =2D-- a/modules/stdlib +++ b/modules/stdlib @@ -42,6 +42,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXX= DEFS_H) \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FIL= E_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ + -e 's/@''GNULIB_GETPROGNAME''@/$(GNULIB_GETPROGNAME)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_GNU''@/$(GNULIB_MALLOC_GNU)/g' \ @@ -91,6 +92,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXX= DEFS_H) \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ diff --git a/tests/test-getprogname.c b/tests/test-getprogname.c index 0c1f1fcfa7..168c0cb91c 100644 =2D-- a/tests/test-getprogname.c +++ b/tests/test-getprogname.c @@ -16,7 +16,8 @@ =20 #include =20 =2D#include "getprogname.h" +#include + #include #include =20