From 0de7a0d3bf29a240c5e0fef79b5b3eae8a6a01f5 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sun, 8 Jan 2023 09:38:59 -0500 Subject: [PATCH] Create src/mkcustom.h which is included by config.h Put declarations for missing functions which we create in src/misc.c into a file which is included by config.h via AH_BOTTOM(). This ensures those prototypes are available, even in files added to lib/... from gnulib. * src/mkcustom.h: Add a new file with function declarations. * configure.ac: Include src/mkcustom.h in config.h with AH_BOTTOM() * Makefile.am: Add the header to the SRCS list. * src/makeint.h: Remove content that we added to src/mkcustom.h. * src/config.ami: Add #include "mkcustom.h" to specialized config.h. * src/config.h-vms: Ditto. * src/config.h.W32: Ditto. * src/configh.dos: Ditto. --- Makefile.am | 4 +-- configure.ac | 4 +++ src/config.ami | 3 +++ src/config.h-vms | 3 +++ src/config.h.W32 | 3 +++ src/configh.dos | 3 +++ src/makeint.h | 39 ----------------------------- src/mkcustom.h | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 83 insertions(+), 41 deletions(-) create mode 100644 src/mkcustom.h diff --git a/Makefile.am b/Makefile.am index 082ba42c..49190d64 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,8 +34,8 @@ make_SRCS = src/ar.c src/arscan.c src/commands.c src/commands.h \ src/getopt.h src/getopt1.c src/gettext.h src/guile.c \ src/hash.c src/hash.h src/implicit.c src/job.c src/job.h \ src/load.c src/loadapi.c src/main.c src/makeint.h src/misc.c \ - src/os.h src/output.c src/output.h src/read.c src/remake.c \ - src/rule.c src/rule.h src/shuffle.h src/shuffle.c \ + src/mkcustom.h src/os.h src/output.c src/output.h src/read.c \ + src/remake.c src/rule.c src/rule.h src/shuffle.h src/shuffle.c \ src/signame.c src/strcache.c src/variable.c src/variable.h \ src/version.c src/vpath.c diff --git a/configure.ac b/configure.ac index 8466d36f..f5781853 100644 --- a/configure.ac +++ b/configure.ac @@ -471,6 +471,10 @@ AC_SUBST_FILE([MAINT_MAKEFILE]) # Allow building with dmalloc AM_WITH_DMALLOC +# Add custom header to config.h +AH_BOTTOM([/* Include customized declarations. */ +#include "../src/mkcustom.h"]) + # Forcibly disable SET_MAKE. If it's set it breaks things like the test # scripts, etc. SET_MAKE= diff --git a/src/config.ami b/src/config.ami index 543baae3..4b70419f 100644 --- a/src/config.ami +++ b/src/config.ami @@ -329,3 +329,6 @@ this program. If not, see . */ /* Define to `int' if does not define. */ #define ssize_t int + +/* Include customized declarations. */ +#include "../src/mkcustom.h" diff --git a/src/config.h-vms b/src/config.h-vms index c6cd31df..0aeffd6b 100644 --- a/src/config.h-vms +++ b/src/config.h-vms @@ -428,3 +428,6 @@ this program. If not, see . */ /* Build host information. */ #define MAKE_HOST "VMS" + +/* Include customized declarations. */ +#include "../src/mkcustom.h" diff --git a/src/config.h.W32 b/src/config.h.W32 index df811e4d..bf23d8d9 100644 --- a/src/config.h.W32 +++ b/src/config.h.W32 @@ -629,3 +629,6 @@ char *ttyname (int); #ifdef HAVE_CYGWIN_SHELL #undef BATCH_MODE_ONLY_SHELL #endif + +/* Include customized declarations. */ +#include "../src/mkcustom.h" diff --git a/src/configh.dos b/src/configh.dos index a00fecde..f49462ac 100644 --- a/src/configh.dos +++ b/src/configh.dos @@ -109,3 +109,6 @@ this program. If not, see . */ /* Define to 'unsigned long' or 'unsigned long long' if doesn't define. */ #define uintmax_t unsigned long long + +/* Include customized declarations. */ +#include "../src/mkcustom.h" diff --git a/src/makeint.h b/src/makeint.h index b5f63b16..fe49cffd 100644 --- a/src/makeint.h +++ b/src/makeint.h @@ -18,28 +18,6 @@ this program. If not, see . */ using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h (which it would do because makeint.h was found in $srcdir). */ #include -#undef HAVE_CONFIG_H -#define HAVE_CONFIG_H 1 - -/* Specify we want GNU source code. This must be defined before any - system headers are included. */ - -#define _GNU_SOURCE 1 - -/* AIX requires this to be the first thing in the file. */ -#if HAVE_ALLOCA_H -# include -#else -# ifdef _AIX - #pragma alloca -# else -# if !defined(__GNUC__) && !defined(WINDOWS32) -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -#endif /* Some versions of GCC (e.g., 10.x) set the warn_unused_result attribute on __builtin_alloca. This causes alloca(0) to fail and is not easily worked @@ -82,7 +60,6 @@ char *alloca (); # define __NO_STRING_INLINES #endif -#include #include #include #include @@ -712,9 +689,6 @@ char *getwd (void); # define strcasecmp stricmp # elif HAVE_STRCMPI # define strcasecmp strcmpi -# else -/* Create our own, in misc.c */ -int strcasecmp (const char *s1, const char *s2); # endif #endif @@ -723,22 +697,9 @@ int strcasecmp (const char *s1, const char *s2); # define strncasecmp strnicmp # elif HAVE_STRNCMPI # define strncasecmp strncmpi -# else -/* Create our own, in misc.c */ -int strncasecmp (const char *s1, const char *s2, size_t n); # endif #endif -#if !HAVE_MEMPCPY -/* Create our own, in misc.c */ -void *mempcpy (void *dest, const void *src, size_t n); -#endif - -#if !HAVE_STPCPY -/* Create our own, in misc.c */ -char *stpcpy (char *dest, const char *src); -#endif - #define OUTPUT_SYNC_NONE 0 #define OUTPUT_SYNC_LINE 1 #define OUTPUT_SYNC_TARGET 2 diff --git a/src/mkcustom.h b/src/mkcustom.h new file mode 100644 index 00000000..035c50b7 --- /dev/null +++ b/src/mkcustom.h @@ -0,0 +1,65 @@ +/* Miscellaneous global declarations and portability cruft for GNU Make. +Copyright (C) 2023 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make 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 (at your option) any later +version. + +GNU Make 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 . */ + +/* + This file is included at the end of config.h + + That means it's included _everywhere_ as the first thing, + INCLUDING content imported from gnulib. BE AWARE!! +*/ + +#undef HAVE_CONFIG_H +#define HAVE_CONFIG_H 1 + +/* Specify we want GNU source code. This must be defined before any + system headers are included. */ + +#define _GNU_SOURCE 1 + +/* AIX requires this to be the first thing in the file. */ +#if HAVE_ALLOCA_H +# include +#else +# ifdef _AIX + #pragma alloca +# else +# if !defined(__GNUC__) && !defined(WINDOWS32) +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +#endif + +/* Declare function prototypes for src/misc.c functions if needed. */ + +#include + +#if !HAVE_STRCASECMP && !HAVE_STRICMP && !HAVE_STRCMPI +int strcasecmp (const char *s1, const char *s2); +#endif + +#if !HAVE_STRNCASECMP && !HAVE_STRNICMP && !HAVE_STRNCMPI +int strncasecmp (const char *s1, const char *s2, size_t n); +#endif + +#if !HAVE_MEMPCPY +void *mempcpy (void *dest, const void *src, size_t n); +#endif + +#if !HAVE_STPCPY +char *stpcpy (char *dest, const char *src); +#endif