From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#19874: simplifying Emacs configure.ac Date: Sat, 18 Jan 2020 21:09:19 -0800 Organization: UCLA Computer Science Department Message-ID: References: <2972759.yA5RhZVnzj@omega> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------5BD3AEFCD78E8370DADF5E89" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="28746"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 Cc: Wolfgang Jenkner , 19874@debbugs.gnu.org, Ashish Shukla To: Bruno Haible Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Jan 19 06:10:26 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1it2qw-0007H0-9v for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 19 Jan 2020 06:10:26 +0100 Original-Received: from localhost ([::1]:47632 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1it2qv-0007WS-C6 for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 19 Jan 2020 00:10:25 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:33773) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1it2qc-0007Kq-MW for bug-gnu-emacs@gnu.org; Sun, 19 Jan 2020 00:10:09 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1it2qY-0000s7-VU for bug-gnu-emacs@gnu.org; Sun, 19 Jan 2020 00:10:06 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:36629) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1it2qY-0000rh-Oo for bug-gnu-emacs@gnu.org; Sun, 19 Jan 2020 00:10:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1it2qY-0002NH-JC for bug-gnu-emacs@gnu.org; Sun, 19 Jan 2020 00:10:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 19 Jan 2020 05:10:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19874 X-GNU-PR-Package: emacs Original-Received: via spool by 19874-submit@debbugs.gnu.org id=B19874.15794105729083 (code B ref 19874); Sun, 19 Jan 2020 05:10:02 +0000 Original-Received: (at 19874) by debbugs.gnu.org; 19 Jan 2020 05:09:32 +0000 Original-Received: from localhost ([127.0.0.1]:42601 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1it2q4-0002MQ-3w for submit@debbugs.gnu.org; Sun, 19 Jan 2020 00:09:32 -0500 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:46804) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1it2q2-0002MB-Ey for 19874@debbugs.gnu.org; Sun, 19 Jan 2020 00:09:31 -0500 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 71E40160060; Sat, 18 Jan 2020 21:09:24 -0800 (PST) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 2CtHlR9-75-R; Sat, 18 Jan 2020 21:09:19 -0800 (PST) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id D2A5816006B; Sat, 18 Jan 2020 21:09:19 -0800 (PST) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id 0mwu7BOd1Sje; Sat, 18 Jan 2020 21:09:19 -0800 (PST) Original-Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 93B08160060; Sat, 18 Jan 2020 21:09:19 -0800 (PST) In-Reply-To: <2972759.yA5RhZVnzj@omega> Content-Language: en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:174857 Archived-At: This is a multi-part message in MIME format. --------------5BD3AEFCD78E8370DADF5E89 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 1/18/20 5:46 AM, Bruno Haible wrote: > This code in Emacs configure.ac: > > # Use the system putenv even if it lacks GNU features, as we don't need them, > # and the gnulib replacement runs afoul of a FreeBSD 10.1 bug; see Bug#19874. > AC_CHECK_FUNCS_ONCE([putenv]) > AC_DEFUN([gl_FUNC_PUTENV], > [test "$ac_cv_func_putenv" = yes || REPLACE_PUTENV=1]) > > appears to be extra convoluted. All platforms have the putenv function. > Therefore REPLACE_PUTENV=1 is never executed here. If Emacs does not need > the putenv override, the simpler way is to invoke gnulib-tool with > '--avoid=putenv'. Thanks for suggesting that. I installed the attached patch to Emacs master to implement something along the lines you suggested. I am cc'ing Ashish Shukla who reported Bug#19874 ("25.0.50; encode-time not working as expected"), as well as Wolfgang Jenkner who helped debug that, to give them a heads-up that the fix for Bug#19874 has changed. --------------5BD3AEFCD78E8370DADF5E89 Content-Type: text/x-patch; charset=UTF-8; name="0001-Remove-Gnulib-putenv-code.patch" Content-Disposition: attachment; filename="0001-Remove-Gnulib-putenv-code.patch" Content-Transfer-Encoding: quoted-printable >From 35a1a007bb7506c72ee6d9757a79014c679e7bae Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 18 Jan 2020 20:54:29 -0800 Subject: [PATCH] Remove Gnulib putenv code MIME-Version: 1.0 Content-Type: text/plain; charset=3DUTF-8 Content-Transfer-Encoding: 8bit It=E2=80=99s not needed, since Emacs always uses the system putenv and al= l platforms have putenv. This improves on the fix for Bug#19874. Suggested by Bruno Haible. * admin/merge-gnulib (GNULIB_MODULES): Remove putenv. * configure.ac: Remove workarounds for Gnulib putenv module. * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate. * lib/putenv.c, m4/putenv.m4: Remove. --- admin/merge-gnulib | 2 +- configure.ac | 5 -- lib/gnulib.mk.in | 12 --- lib/putenv.c | 194 --------------------------------------------- m4/gnulib-comp.m4 | 9 --- m4/putenv.m4 | 60 -------------- 6 files changed, 1 insertion(+), 281 deletions(-) delete mode 100644 lib/putenv.c delete mode 100644 m4/putenv.m4 diff --git a/admin/merge-gnulib b/admin/merge-gnulib index 3dee0b72b3..48c81e61e2 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -38,7 +38,7 @@ GNULIB_MODULES=3D getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ieee754-h ignore-value intprops largefile lstat manywarnings memmem-simple mempcpy memrchr minmax mkostemp mktime nstr= ftime - pathmax pipe2 pselect pthread_sigmask putenv + pathmax pipe2 pselect pthread_sigmask qcopy-acl readlink readlinkat regex sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strnlen strtoimax symlink sys_stat sys_time diff --git a/configure.ac b/configure.ac index 8a13b36e94..d7b4d0352c 100644 --- a/configure.ac +++ b/configure.ac @@ -882,11 +882,6 @@ AC_DEFUN test $func =3D pthread_sigmask || AS_VAR_APPEND([funcs], [" $func"]) done ac_func_list=3D$funcs -# Use the system putenv even if it lacks GNU features, as we don't need = them, -# and the gnulib replacement runs afoul of a FreeBSD 10.1 bug; see Bug#1= 9874. -AC_CHECK_FUNCS_ONCE([putenv]) -AC_DEFUN([gl_FUNC_PUTENV], - [test "$ac_cv_func_putenv" =3D yes || REPLACE_PUTENV=3D1]) # Emacs does not use the wchar or wctype-h modules. AC_DEFUN([gt_TYPE_WINT_T], [GNULIB_OVERRIDES_WINT_T=3D0 diff --git a/lib/gnulib.mk.in b/lib/gnulib.mk.in index ed80f88a87..1c8085b1a4 100644 --- a/lib/gnulib.mk.in +++ b/lib/gnulib.mk.in @@ -127,7 +127,6 @@ # pipe2 \ # pselect \ # pthread_sigmask \ -# putenv \ # qcopy-acl \ # readlink \ # readlinkat \ @@ -2162,17 +2161,6 @@ EXTRA_libgnu_a_SOURCES +=3D pthread_sigmask.c endif ## end gnulib module pthread_sigmask =20 -## begin gnulib module putenv -ifeq (,$(OMIT_GNULIB_MODULE_putenv)) - - -EXTRA_DIST +=3D putenv.c - -EXTRA_libgnu_a_SOURCES +=3D putenv.c - -endif -## end gnulib module putenv - ## begin gnulib module qcopy-acl ifeq (,$(OMIT_GNULIB_MODULE_qcopy-acl)) =20 diff --git a/lib/putenv.c b/lib/putenv.c deleted file mode 100644 index 9e862e63d3..0000000000 --- a/lib/putenv.c +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2020 Free Software - Foundation, Inc. - - NOTE: The canonical source of this file is maintained with the GNU C - Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. - - This program is free software: you can redistribute it and/or modify = it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 3 of the License, or any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see = . */ - -#include - -/* Specification. */ -#include - -#include - -/* Include errno.h *after* sys/types.h to work around header problems - on AIX 3.2.5. */ -#include -#ifndef __set_errno -# define __set_errno(ev) ((errno) =3D (ev)) -#endif - -#include -#include - -#if defined _WIN32 && ! defined __CYGWIN__ -# define WIN32_LEAN_AND_MEAN -# include -#endif - -#if _LIBC -# if HAVE_GNU_LD -# define environ __environ -# else -extern char **environ; -# endif -#endif - -#if _LIBC -/* This lock protects against simultaneous modifications of 'environ'. = */ -# include -__libc_lock_define_initialized (static, envlock) -# define LOCK __libc_lock_lock (envlock) -# define UNLOCK __libc_lock_unlock (envlock) -#else -# define LOCK -# define UNLOCK -#endif - -static int -_unsetenv (const char *name) -{ - size_t len; -#if !HAVE_DECL__PUTENV - char **ep; -#endif - - if (name =3D=3D NULL || *name =3D=3D '\0' || strchr (name, '=3D') !=3D= NULL) - { - __set_errno (EINVAL); - return -1; - } - - len =3D strlen (name); - -#if HAVE_DECL__PUTENV - { - int putenv_result, putenv_errno; - char *name_ =3D malloc (len + 2); - memcpy (name_, name, len); - name_[len] =3D '=3D'; - name_[len + 1] =3D 0; - putenv_result =3D _putenv (name_); - putenv_errno =3D errno; - free (name_); - __set_errno (putenv_errno); - return putenv_result; - } -#else - - LOCK; - - ep =3D environ; - while (*ep !=3D NULL) - if (!strncmp (*ep, name, len) && (*ep)[len] =3D=3D '=3D') - { - /* Found it. Remove this pointer by moving later ones back. */ - char **dp =3D ep; - - do - dp[0] =3D dp[1]; - while (*dp++); - /* Continue the loop in case NAME appears again. */ - } - else - ++ep; - - UNLOCK; - - return 0; -#endif -} - - -/* Put STRING, which is of the form "NAME=3DVALUE", in the environment. - If STRING contains no '=3D', then remove STRING from the environment.= */ -int -putenv (char *string) -{ - const char *name_end =3D strchr (string, '=3D'); - char **ep; - - if (name_end =3D=3D NULL) - { - /* Remove the variable from the environment. */ - return _unsetenv (string); - } - -#if HAVE_DECL__PUTENV - /* Rely on _putenv to allocate the new environment. If other - parts of the application use _putenv, the !HAVE_DECL__PUTENV code - would fight over who owns the environ vector, causing a crash. */ - if (name_end[1]) - return _putenv (string); - else - { - /* _putenv ("NAME=3D") unsets NAME, so invoke _putenv ("NAME=3D ") - to allocate the environ vector and then replace the new - entry with "NAME=3D". */ - int putenv_result, putenv_errno; - char *name_x =3D malloc (name_end - string + sizeof "=3D "); - if (!name_x) - return -1; - memcpy (name_x, string, name_end - string + 1); - name_x[name_end - string + 1] =3D ' '; - name_x[name_end - string + 2] =3D 0; - putenv_result =3D _putenv (name_x); - putenv_errno =3D errno; - for (ep =3D environ; *ep; ep++) - if (strcmp (*ep, name_x) =3D=3D 0) - { - *ep =3D string; - break; - } -# if defined _WIN32 && ! defined __CYGWIN__ - if (putenv_result =3D=3D 0) - { - /* _putenv propagated "NAME=3D " into the subprocess environme= nt; - fix that by calling SetEnvironmentVariable directly. */ - name_x[name_end - string] =3D 0; - putenv_result =3D SetEnvironmentVariable (name_x, "") ? 0 : -1= ; - putenv_errno =3D ENOMEM; /* ENOMEM is the only way to fail. *= / - } -# endif - free (name_x); - __set_errno (putenv_errno); - return putenv_result; - } -#else - for (ep =3D environ; *ep; ep++) - if (strncmp (*ep, string, name_end - string) =3D=3D 0 - && (*ep)[name_end - string] =3D=3D '=3D') - break; - - if (*ep) - *ep =3D string; - else - { - static char **last_environ =3D NULL; - size_t size =3D ep - environ; - char **new_environ =3D malloc ((size + 2) * sizeof *new_environ); - if (! new_environ) - return -1; - new_environ[0] =3D string; - memcpy (new_environ + 1, environ, (size + 1) * sizeof *new_environ= ); - free (last_environ); - last_environ =3D new_environ; - environ =3D new_environ; - } - - return 0; -#endif -} diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4 index cb3b89dd72..48d8030f53 100644 --- a/m4/gnulib-comp.m4 +++ b/m4/gnulib-comp.m4 @@ -133,7 +133,6 @@ AC_DEFUN # Code from module pipe2: # Code from module pselect: # Code from module pthread_sigmask: - # Code from module putenv: # Code from module qcopy-acl: # Code from module readlink: # Code from module readlinkat: @@ -368,12 +367,6 @@ AC_DEFUN gl_PREREQ_PTHREAD_SIGMASK fi gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask]) - gl_FUNC_PUTENV - if test $REPLACE_PUTENV =3D 1; then - AC_LIBOBJ([putenv]) - gl_PREREQ_PUTENV - fi - gl_STDLIB_MODULE_INDICATOR([putenv]) gl_FUNC_READLINK if test $HAVE_READLINK =3D 0 || test $REPLACE_READLINK =3D 1; then AC_LIBOBJ([readlink]) @@ -973,7 +966,6 @@ AC_DEFUN lib/pipe2.c lib/pselect.c lib/pthread_sigmask.c - lib/putenv.c lib/qcopy-acl.c lib/readlink.c lib/readlinkat.c @@ -1112,7 +1104,6 @@ AC_DEFUN m4/pipe2.m4 m4/pselect.m4 m4/pthread_sigmask.m4 - m4/putenv.m4 m4/readlink.m4 m4/readlinkat.m4 m4/regex.m4 diff --git a/m4/putenv.m4 b/m4/putenv.m4 deleted file mode 100644 index e38f8c5694..0000000000 --- a/m4/putenv.m4 +++ /dev/null @@ -1,60 +0,0 @@ -# putenv.m4 serial 24 -dnl Copyright (C) 2002-2020 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Jim Meyering. -dnl -dnl Check whether putenv ("FOO") removes FOO from the environment. -dnl The putenv in libc on at least SunOS 4.1.4 does *not* do that. - -AC_DEFUN([gl_FUNC_PUTENV], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([for putenv compatible with GNU and SVID], - [gl_cv_func_svid_putenv], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],[[ - /* Put it in env. */ - if (putenv ("CONFTEST_putenv=3Dval")) - return 1; - - /* Try to remove it. */ - if (putenv ("CONFTEST_putenv")) - return 2; - - /* Make sure it was deleted. */ - if (getenv ("CONFTEST_putenv") !=3D 0) - return 3; - - return 0; - ]])], - gl_cv_func_svid_putenv=3Dyes, - gl_cv_func_svid_putenv=3Dno, - dnl When crosscompiling, assume putenv is broken. - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu* | gnu*) gl_cv_func_svid_putenv=3D"guessing yes" ;= ; - # Guess yes on musl systems. - *-musl*) gl_cv_func_svid_putenv=3D"guessing yes" ;= ; - # Guess no on native Windows. - mingw*) gl_cv_func_svid_putenv=3D"guessing no" ;; - # If we don't know, obey --enable-cross-g= uesses. - *) gl_cv_func_svid_putenv=3D"$gl_cross_guess= _normal" ;; - esac - ]) - ]) - case "$gl_cv_func_svid_putenv" in - *yes) ;; - *) - REPLACE_PUTENV=3D1 - ;; - esac -]) - -# Prerequisites of lib/putenv.c. -AC_DEFUN([gl_PREREQ_PUTENV], -[ - AC_CHECK_DECLS([_putenv]) -]) --=20 2.17.1 --------------5BD3AEFCD78E8370DADF5E89--