Package: emacs;
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Thu, 22 Sep 2016 08:36:02 UTC
Severity: normal
Tags: patch
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 24506 in the body.
You can then email your comments to 24506 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#24506
; Package emacs
.
(Thu, 22 Sep 2016 08:36:02 GMT) Full text and rfc822 format available.Paul Eggert <eggert <at> cs.ucla.edu>
:bug-gnu-emacs <at> gnu.org
.
(Thu, 22 Sep 2016 08:36:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Paul Eggert <eggert <at> cs.ucla.edu> To: bug-gnu-emacs <at> gnu.org Cc: Paul Eggert <eggert <at> cs.ucla.edu> Subject: [PROPOSED PATCH] Limit <config.h>’s includes Date: Thu, 22 Sep 2016 01:34:11 -0700
This follows up on recent problems with the fact that config.h includes stdlib.h etc.; some files need to include stdlib.h later. config.h generally should limit itself to includes that are universally safe; outside of MS-Windows, only stdbool.h makes the cut among the files currently included. So, move the other includes to just the files that need them. * configure.ac (config_opsysfile): Remove, as this generic hook is no longer needed. * lib-src/etags.c, src/unexmacosx.c, src/w32.c, src/w32notify.c: * src/w32proc.c (_GNU_SOURCE): Remove, as it’s OK for config.h to do this now. * src/conf_post.h: Include <ms-w32.h>, instead of the generic config_opsysfile, for simplicity as this old way of configuring is now done only for the MS-Windows port. Do not include <ms-w32.h> if DEFER_MS_W32_H, for the benefit of the few files that want its effects later. Do not include <alloca.h>, <string.h>, or <stdlib.h>. Other files modified to include these headers as needed, or to not include headers that are no longer needed. * src/lisp.h: Include <alloca.h> and <string.h> here, since some of the inline functions need them. * src/regex.c: Include <alloca.h> if not emacs. (If emacs, we can rely on SAFE_ALLOCA.) There is no longer any need to worry about HAVE_ALLOCA_H. * src/unexmacosx.c: Rely on config.h not including stdlib.h. * src/w32.c, src/w32notify.c, src/w32proc.c (DEFER_MS_W32_H): Define before including <config.h> first, and include <ms-w32.h> after the troublesome headers. --- configure.ac | 8 -------- lib-src/emacsclient.c | 1 + lib-src/etags.c | 4 ---- lib-src/hexl.c | 2 ++ lib-src/make-docfile.c | 4 ++-- lib-src/movemail.c | 2 +- lib-src/pop.c | 2 ++ lib-src/profile.c | 1 + lib-src/update-game-score.c | 1 - lib/openat-die.c | 1 + lwlib/lwlib-Xm.c | 1 + lwlib/lwlib.c | 1 + src/alloc.c | 1 + src/buffer.c | 1 + src/callproc.c | 1 + src/charset.c | 1 + src/conf_post.h | 36 ++++++++++++------------------------ src/dbusbind.c | 1 + src/dispnew.c | 1 + src/doprnt.c | 1 + src/editfns.c | 1 + src/emacs-module.c | 2 -- src/emacs.c | 1 + src/eval.c | 1 + src/filelock.c | 1 + src/fns.c | 1 + src/font.c | 1 + src/fontset.c | 1 + src/frame.c | 1 + src/keymap.c | 1 + src/lisp.h | 2 ++ src/lread.c | 1 + src/process.c | 1 + src/regex.c | 16 ++-------------- src/sysdep.c | 1 + src/systty.h | 1 - src/term.c | 1 + src/unexcw.c | 1 - src/unexmacosx.c | 14 +++++--------- src/w32.c | 8 ++++---- src/w32notify.c | 8 ++++---- src/w32proc.c | 8 ++++---- src/widget.c | 1 + src/xdisp.c | 1 + src/xfaces.c | 1 + src/xfns.c | 1 + src/xfont.c | 1 + src/xgselect.c | 1 - src/xterm.c | 1 + 49 files changed, 71 insertions(+), 80 deletions(-) diff --git a/configure.ac b/configure.ac index 6488f90..fe7f132 100644 --- a/configure.ac +++ b/configure.ac @@ -4882,14 +4882,6 @@ AC_DEFUN [Define to the canonical Emacs configuration name.]) AC_DEFINE_UNQUOTED(EMACS_CONFIG_OPTIONS, "${emacs_config_options}", [Define to the options passed to configure.]) -AH_TEMPLATE(config_opsysfile, [Some platforms that do not use configure - define this to include extra configuration information.]) - -case $opsys in - mingw32) - AC_DEFINE(config_opsysfile, <ms-w32.h>, []) - ;; -esac XMENU_OBJ= XOBJ= diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 458519d..59b6ac9 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -74,6 +74,7 @@ char *w32_getenv (const char *); #include <stdarg.h> #include <ctype.h> #include <stdio.h> +#include <stdlib.h> #include <getopt.h> #include <unistd.h> diff --git a/lib-src/etags.c b/lib-src/etags.c index 3620b0f..6fdb063 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -90,10 +90,6 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4"; #include <config.h> -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 /* enables some compiler checks on GNU */ -#endif - /* WIN32_NATIVE is for XEmacs. MSDOS, WINDOWSNT, DOS_NT are for Emacs. */ #ifdef WIN32_NATIVE diff --git a/lib-src/hexl.c b/lib-src/hexl.c index 9a5ca7e..5bd8579 100644 --- a/lib-src/hexl.c +++ b/lib-src/hexl.c @@ -22,6 +22,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <ctype.h> #include <binary-io.h> diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index f463f13..9ba9b6e 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -37,11 +37,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdarg.h> -#include <stdbool.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> -#include <stdlib.h> /* config.h unconditionally includes this anyway */ +#include <stdlib.h> +#include <string.h> #ifdef WINDOWSNT /* Defined to be sys_fopen in ms-w32.h, but only #ifdef emacs, so this diff --git a/lib-src/movemail.c b/lib-src/movemail.c index 45779da..8111c87 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -59,8 +59,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> -#include <stdbool.h> #include <stdio.h> +#include <stdlib.h> #include <errno.h> #include <time.h> diff --git a/lib-src/pop.c b/lib-src/pop.c index 99ec1cf..99424c5 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c @@ -63,10 +63,12 @@ void sys_freeaddrinfo (struct addrinfo * ai); extern struct servent *hes_getservbyname (/* char *, char * */); #endif +#include <alloca.h> #include <pwd.h> #include <netdb.h> #include <errno.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <unistd.h> diff --git a/lib-src/profile.c b/lib-src/profile.c index 0e60377..edd36ca 100644 --- a/lib-src/profile.c +++ b/lib-src/profile.c @@ -35,6 +35,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <inttypes.h> #include <stdio.h> +#include <stdlib.h> #include <intprops.h> #include <systime.h> diff --git a/lib-src/update-game-score.c b/lib-src/update-game-score.c index 7675e9b..7e1b332 100644 --- a/lib-src/update-game-score.c +++ b/lib-src/update-game-score.c @@ -37,7 +37,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <errno.h> #include <inttypes.h> #include <limits.h> -#include <stdbool.h> #include <string.h> #include <stdlib.h> #include <stdio.h> diff --git a/lib/openat-die.c b/lib/openat-die.c index f09123e..8dab8b9 100644 --- a/lib/openat-die.c +++ b/lib/openat-die.c @@ -2,5 +2,6 @@ This should never happen with Emacs. */ #include <config.h> #include "openat.h" +#include <stdlib.h> void openat_save_fail (int errnum) { abort (); } void openat_restore_fail (int errnum) { abort (); } diff --git a/lwlib/lwlib-Xm.c b/lwlib/lwlib-Xm.c index c92edd2..45faff8 100644 --- a/lwlib/lwlib-Xm.c +++ b/lwlib/lwlib-Xm.c @@ -22,6 +22,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <unistd.h> #include <stdio.h> +#include <stdlib.h> #include <setjmp.h> #include <X11/StringDefs.h> diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c index d1c5195..e66147f 100644 --- a/lwlib/lwlib.c +++ b/lwlib/lwlib.c @@ -26,6 +26,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <sys/types.h> #include <stdio.h> +#include <stdlib.h> #include "lwlib-int.h" #include "lwlib-utils.h" #include <X11/StringDefs.h> diff --git a/src/alloc.c b/src/alloc.c index 41b2f9e..cbfc0dc 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -22,6 +22,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <errno.h> #include <stdio.h> +#include <stdlib.h> #include <limits.h> /* For CHAR_BIT. */ #include <signal.h> /* For SIGABRT, SIGDANGER. */ diff --git a/src/buffer.c b/src/buffer.c index 24c997f..3d205bb 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -25,6 +25,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <sys/param.h> #include <errno.h> #include <stdio.h> +#include <stdlib.h> #include <unistd.h> #include <verify.h> diff --git a/src/callproc.c b/src/callproc.c index 454ed6d..8ed2855 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -22,6 +22,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <errno.h> #include <stdio.h> +#include <stdlib.h> #include <sys/types.h> #include <unistd.h> diff --git a/src/charset.c b/src/charset.c index 0c831f1..14d976a 100644 --- a/src/charset.c +++ b/src/charset.c @@ -30,6 +30,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <errno.h> #include <stdio.h> +#include <stdlib.h> #include <unistd.h> #include <limits.h> #include <sys/types.h> diff --git a/src/conf_post.h b/src/conf_post.h index 6d54524..c0993a3 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -18,22 +18,23 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ -/* Commentary: +/* Put the code here rather than in configure.ac using AH_BOTTOM. + This way, the code does not get processed by autoheader. For + example, undefs here are not commented out. - Rather than writing this code directly in AH_BOTTOM, we include it - via this file. This is so that it does not get processed by - autoheader. Eg, any undefs here would otherwise be commented out. -*/ + To help make dependencies clearer elsewhere, this file typically + does not #include other files. The exceptions are first stdbool.h + because it is unlikely to interfere with configuration and bool is + such a core part of the C language, and second ms-w32.h (DOS_NT + only) because it historically was included here and changing that + would take some work. */ -/* Code: */ +#include <stdbool.h> -/* Include any platform specific configuration file. */ -#ifdef config_opsysfile -# include config_opsysfile +#if defined DOS_NT && !DEFER_MS_W32_H +# include <ms-w32.h> #endif -#include <stdbool.h> - /* GNUC_PREREQ (V, W, X) is true if this is GNU C version V.W.X or later. It can be used in a preprocessor expression. */ #ifndef __GNUC_MINOR__ @@ -55,14 +56,6 @@ typedef unsigned int bool_bf; typedef bool bool_bf; #endif -#ifndef WINDOWSNT -/* On AIX 3 this must be included before any other include file. */ -#include <alloca.h> -#if ! HAVE_ALLOCA -# error "alloca not available on this machine" -#endif -#endif - /* Simulate __has_attribute on compilers that lack it. It is used only on arguments like alloc_size that are handled in this simulation. */ #ifndef __has_attribute @@ -239,9 +232,6 @@ extern void _DebPrint (const char *fmt, ...); extern char *emacs_getenv_TZ (void); extern int emacs_setenv_TZ (char const *); -#include <string.h> -#include <stdlib.h> - #if __GNUC__ >= 3 /* On GCC 3.0 we might get a warning. */ #define NO_INLINE __attribute__((noinline)) #else @@ -365,5 +355,3 @@ extern int emacs_setenv_TZ (char const *); #else # define UNINIT /* empty */ #endif - -/* conf_post.h ends here */ diff --git a/src/dbusbind.c b/src/dbusbind.c index 7a94c81..a0146a3 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -20,6 +20,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_DBUS #include <stdio.h> +#include <stdlib.h> #include <dbus/dbus.h> #include "lisp.h" diff --git a/src/dispnew.c b/src/dispnew.c index 82d0b76..70d4de0 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -21,6 +21,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include "sysstdio.h" +#include <stdlib.h> #include <unistd.h> #include "lisp.h" diff --git a/src/doprnt.c b/src/doprnt.c index 9d8b783..44a75f8 100644 --- a/src/doprnt.c +++ b/src/doprnt.c @@ -103,6 +103,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include <float.h> #include <unistd.h> #include <limits.h> diff --git a/src/editfns.c b/src/editfns.c index 835e432..8f6fc80 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -49,6 +49,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <limits.h> #include <intprops.h> +#include <stdlib.h> #include <strftime.h> #include <verify.h> diff --git a/src/emacs-module.c b/src/emacs-module.c index 724d24a..0535a34 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -21,11 +21,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include "emacs-module.h" -#include <stdbool.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> -#include <string.h> #include "lisp.h" #include "dynlib.h" diff --git a/src/emacs.c b/src/emacs.c index 9b23009..13378c4 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -24,6 +24,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <errno.h> #include <fcntl.h> #include <stdio.h> +#include <stdlib.h> #include <sys/types.h> #include <sys/file.h> diff --git a/src/eval.c b/src/eval.c index e08a25a..abc42a1 100644 --- a/src/eval.c +++ b/src/eval.c @@ -22,6 +22,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <limits.h> #include <stdio.h> +#include <stdlib.h> #include "lisp.h" #include "blockinput.h" #include "commands.h" diff --git a/src/filelock.c b/src/filelock.c index bde34e2..a2e1df9 100644 --- a/src/filelock.c +++ b/src/filelock.c @@ -27,6 +27,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <sys/stat.h> #include <signal.h> #include <stdio.h> +#include <stdlib.h> #ifdef HAVE_PWD_H #include <pwd.h> diff --git a/src/fns.c b/src/fns.c index 31f0fd2..4f12dd5 100644 --- a/src/fns.c +++ b/src/fns.c @@ -20,6 +20,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> +#include <stdlib.h> #include <unistd.h> #include <filevercmp.h> #include <intprops.h> diff --git a/src/font.c b/src/font.c index 144ba07..89f7c8e 100644 --- a/src/font.c +++ b/src/font.c @@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <float.h> #include <stdio.h> +#include <stdlib.h> #include <c-ctype.h> diff --git a/src/fontset.c b/src/fontset.c index 67696d0..fe595d8 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -26,6 +26,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include "lisp.h" #include "blockinput.h" diff --git a/src/frame.c b/src/frame.c index 166623c..8831b9a 100644 --- a/src/frame.c +++ b/src/frame.c @@ -20,6 +20,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include <errno.h> #include <limits.h> diff --git a/src/keymap.c b/src/keymap.c index b27df1d..c4a59ad 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -41,6 +41,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include "lisp.h" #include "commands.h" diff --git a/src/lisp.h b/src/lisp.h index f653d85..7430898 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -21,10 +21,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #ifndef EMACS_LISP_H #define EMACS_LISP_H +#include <alloca.h> #include <setjmp.h> #include <stdalign.h> #include <stdarg.h> #include <stddef.h> +#include <string.h> #include <float.h> #include <inttypes.h> #include <limits.h> diff --git a/src/lread.c b/src/lread.c index dc7c00b..d5e0460 100644 --- a/src/lread.c +++ b/src/lread.c @@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include "sysstdio.h" +#include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> diff --git a/src/process.c b/src/process.c index 29bf43e..d77c5bf 100644 --- a/src/process.c +++ b/src/process.c @@ -22,6 +22,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include <errno.h> #include <sys/types.h> /* Some typedefs are used in sys/file.h. */ #include <sys/file.h> diff --git a/src/regex.c b/src/regex.c index 41c1d3f..1917a84 100644 --- a/src/regex.c +++ b/src/regex.c @@ -50,6 +50,7 @@ #include <config.h> #include <stddef.h> +#include <stdlib.h> #ifdef emacs /* We need this for `regex.h', and perhaps for the Emacs include files. */ @@ -443,25 +444,12 @@ init_syntax_once (void) #else /* not REGEX_MALLOC */ -/* Emacs already defines alloca, sometimes. */ -# ifndef alloca - -/* Make alloca work the best possible way. */ -# ifdef __GNUC__ -# define alloca __builtin_alloca -# else /* not __GNUC__ */ -# ifdef HAVE_ALLOCA_H -# include <alloca.h> -# endif /* HAVE_ALLOCA_H */ -# endif /* not __GNUC__ */ - -# endif /* not alloca */ - # ifdef emacs # define REGEX_USE_SAFE_ALLOCA USE_SAFE_ALLOCA # define REGEX_SAFE_FREE() SAFE_FREE () # define REGEX_ALLOCATE SAFE_ALLOCA # else +# include <alloca.h> # define REGEX_ALLOCATE alloca # endif diff --git a/src/sysdep.c b/src/sysdep.c index 190d6fbe..0121f01 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -26,6 +26,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <grp.h> #endif /* HAVE_PWD_H */ #include <limits.h> +#include <stdlib.h> #include <unistd.h> #include <c-ctype.h> diff --git a/src/systty.h b/src/systty.h index fbdc6b1..a53c874 100644 --- a/src/systty.h +++ b/src/systty.h @@ -26,7 +26,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <fcntl.h> #endif /* not DOS_NT */ -#include <stdbool.h> #include <sys/ioctl.h> #ifdef HPUX diff --git a/src/term.c b/src/term.c index c22d07a..d691a7a 100644 --- a/src/term.c +++ b/src/term.c @@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <errno.h> #include <fcntl.h> #include <stdio.h> +#include <stdlib.h> #include <sys/file.h> #include <sys/time.h> #include <unistd.h> diff --git a/src/unexcw.c b/src/unexcw.c index 6343b38..c0d1bc1 100644 --- a/src/unexcw.c +++ b/src/unexcw.c @@ -21,7 +21,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include "unexec.h" #include "lisp.h" -#include <string.h> #include <stdio.h> #include <fcntl.h> #include <a.out.h> diff --git a/src/unexmacosx.c b/src/unexmacosx.c index 185a9d1..ea8e884 100644 --- a/src/unexmacosx.c +++ b/src/unexmacosx.c @@ -85,20 +85,16 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ be changed accordingly. */ -/* Enable GNU extensions in gnulib replacement headers. */ -#define _GNU_SOURCE 1 - -/* config.h #define:s malloc/realloc/free and then includes stdlib.h. - We want the undefined versions, but if config.h includes stdlib.h - with the #define:s in place, the prototypes will be wrong and we get - warnings. To prevent that, include stdlib.h before config.h. */ - -#include <stdlib.h> #include <config.h> + +/* Although <config.h> redefines malloc to unexec_malloc, etc., this + file wants stdlib.h to declare the originals. */ #undef malloc #undef realloc #undef free +#include <stdlib.h> + #include "unexec.h" #include "lisp.h" diff --git a/src/w32.c b/src/w32.c index 6cb8e74..e0a3406 100644 --- a/src/w32.c +++ b/src/w32.c @@ -21,8 +21,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ Geoff Voelker (voelker <at> cs.washington.edu) 7-29-94 */ -/* Enable GNU extensions in gnulib replacement headers. */ -#define _GNU_SOURCE 1 +#define DEFER_MS_W32_H +#include <config.h> #include <mingw_time.h> #include <stddef.h> /* for offsetof */ @@ -40,9 +40,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <sys/utime.h> #include <math.h> -/* must include CRT headers *before* config.h */ +/* Include CRT headers *before* ms-w32.h. */ +#include <ms-w32.h> -#include <config.h> #include <mbstring.h> /* for _mbspbrk, _mbslwr, _mbsrchr, ... */ #undef access diff --git a/src/w32notify.c b/src/w32notify.c index 15e8a86..32a03f7 100644 --- a/src/w32notify.c +++ b/src/w32notify.c @@ -81,14 +81,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ thread to exit. The main thread waits for some time for the worker thread to exit, and if it doesn't, terminates it forcibly. */ -/* Enable GNU extensions in gnulib replacement headers. */ -#define _GNU_SOURCE 1 +#define DEFER_MS_W32_H +#include <config.h> #include <stddef.h> #include <errno.h> -/* must include CRT headers *before* config.h */ -#include <config.h> +/* Include CRT headers *before* ms-w32.h. */ +#include <ms-w32.h> #include <windows.h> diff --git a/src/w32proc.c b/src/w32proc.c index e23b1b3..aef4e44 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -22,8 +22,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ Adapted from alarm.c by Tim Fleehart */ -/* Enable GNU extensions in gnulib replacement headers. */ -#define _GNU_SOURCE 1 +#define DEFER_MS_W32_H +#include <config.h> #include <mingw_time.h> #include <stdio.h> @@ -38,8 +38,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <mbstring.h> #include <locale.h> -/* must include CRT headers *before* config.h */ -#include <config.h> +/* Include CRT headers *before* ms-w32.h. */ +#include <ms-w32.h> #undef signal #undef wait diff --git a/src/widget.c b/src/widget.c index 28bb475..59ed431 100644 --- a/src/widget.c +++ b/src/widget.c @@ -32,6 +32,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include "widget.h" #include <stdio.h> +#include <stdlib.h> #include "lisp.h" #include "xterm.h" diff --git a/src/xdisp.c b/src/xdisp.c index 4bf1470..67d14c8 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -288,6 +288,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include <limits.h> #include "lisp.h" diff --git a/src/xfaces.c b/src/xfaces.c index 056f90c..5837f35 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -200,6 +200,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ used to fill in unspecified attributes of the default face. */ #include <config.h> +#include <stdlib.h> #include "sysstdio.h" #include <sys/types.h> #include <sys/stat.h> diff --git a/src/xfns.c b/src/xfns.c index dd39e78..8571d0e 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -19,6 +19,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include <math.h> #include <unistd.h> diff --git a/src/xfont.c b/src/xfont.c index 8fbe94c..45b0e0a 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -21,6 +21,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #include <X11/Xlib.h> #include "lisp.h" diff --git a/src/xgselect.c b/src/xgselect.c index ac88afd..7850a16 100644 --- a/src/xgselect.c +++ b/src/xgselect.c @@ -25,7 +25,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <glib.h> #include <errno.h> -#include <stdbool.h> #include "blockinput.h" #include "systime.h" diff --git a/src/xterm.c b/src/xterm.c index 4c14e62..7476694 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -22,6 +22,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> +#include <stdlib.h> #ifdef USE_CAIRO #include <math.h> #endif -- 2.7.4
bug-gnu-emacs <at> gnu.org
:bug#24506
; Package emacs
.
(Thu, 22 Sep 2016 17:28:02 GMT) Full text and rfc822 format available.Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Andy Moreton <andrewjmoreton <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Subject: Re: bug#24506: Limit <config.h>’s includes Date: Thu, 22 Sep 2016 18:26:19 +0100
On Thu 22 Sep 2016, Paul Eggert wrote: > This follows up on recent problems with the fact that config.h > includes stdlib.h etc.; some files need to include stdlib.h later. > config.h generally should limit itself to includes that are > universally safe; outside of MS-Windows, only stdbool.h makes > the cut among the files currently included. So, move the > other includes to just the files that need them. The check at the top of src/conf_post.h needs a minor fix: #if defined DOS_NT && !defined DEFER_MS_W32_H After that, it bootstraps on Windows using 64bit MSYS2 (gcc 6.2.0) and appears to be functional. AndyM
Paul Eggert <eggert <at> cs.ucla.edu>
:Paul Eggert <eggert <at> cs.ucla.edu>
:Message #13 received at 24506-done <at> debbugs.gnu.org (full text, mbox):
From: Paul Eggert <eggert <at> cs.ucla.edu> To: Andy Moreton <andrewjmoreton <at> gmail.com> Cc: 24506-done <at> debbugs.gnu.org Subject: Re: bug#24506: Limit <config.h>’s includes Date: Fri, 30 Sep 2016 12:43:48 -0700
Thanks for checking it on MSYS2. I made the change you suggested, installed the resulting patch, and am marking this as done. In <http://lists.gnu.org/archive/html/emacs-devel/2016-09/msg00640.html> I proposed also changing conf_post.h to conf-post.h as per the usual GNU file name conventions. I'll wait a bit on this, as I want to shake out any problems with the main patch first.
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sat, 29 Oct 2016 11:24:03 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.