From 4b03eb5c3822765a49b7ab4b05294ce7c012522b Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Wed, 2 Aug 2017 15:16:43 -0400 Subject: [PATCH] Fix compile error for old versions of GCC. Use -Wno-format-truncation only if supported by compiler. ASTERISK-27171 #close Change-Id: Iac0aed7a5bcaa16c21b7d62c4e4678d244c4ccb6 --- apps/Makefile | 2 +- channels/Makefile | 2 +- configure | 38 ++++++++++++++++++++------------------ configure.ac | 10 ++++++++++ main/Makefile | 2 +- makeopts.in | 1 + 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/apps/Makefile b/apps/Makefile index d688173501..d7f755ff15 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -29,7 +29,7 @@ include $(ASTTOPDIR)/Makefile.moddir_rules $(call MOD_ADD_C,app_confbridge,$(wildcard confbridge/*.c)) -app_voicemail.o: _ASTCFLAGS+=-Wno-format-truncation +app_voicemail.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION) ifneq ($(findstring $(OSARCH), mingw32 cygwin ),) LIBS+= -lres_ael_share.so -lres_monitor.so -lres_speech.so diff --git a/channels/Makefile b/channels/Makefile index ae7107f7c1..242d3f46af 100644 --- a/channels/Makefile +++ b/channels/Makefile @@ -29,7 +29,7 @@ $(call MOD_ADD_C,chan_pjsip,$(wildcard pjsip/*.c)) $(call MOD_ADD_C,chan_dahdi,$(wildcard dahdi/*.c) sig_analog.c sig_pri.c sig_ss7.c) $(call MOD_ADD_C,chan_misdn,misdn_config.c misdn/isdn_lib.c misdn/isdn_msg_parser.c) -chan_mgcp.o: _ASTCFLAGS+=-Wno-format-truncation +chan_mgcp.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION) chan_misdn.o: _ASTCFLAGS+=-Imisdn misdn_config.o: _ASTCFLAGS+=-Imisdn diff --git a/configure b/configure index 5bb75236bd..9bbff7677c 100755 --- a/configure +++ b/configure @@ -701,6 +701,7 @@ BIND8_CFLAGS AST_RPATH AST_NATIVE_ARCH AST_SHADOW_WARNINGS +AST_NO_FORMAT_TRUNCATION AST_NO_STRICT_OVERFLOW AST_FORTIFY_SOURCE AST_TRAMPOLINES @@ -1356,7 +1357,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -1541,7 +1541,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1794,15 +1793,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1940,7 +1930,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -2093,7 +2083,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -14927,7 +14916,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -14973,7 +14962,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -14997,7 +14986,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15042,7 +15031,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15066,7 +15055,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -19069,6 +19058,19 @@ $as_echo "no" >&6; } fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wno-format-truncation" >&5 +$as_echo_n "checking for -Wno-format-truncation... " >&6; } +if $(${CC} -O2 -Wno-format-truncation -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AST_NO_FORMAT_TRUNCATION=-Wno-format-truncation +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + AST_NO_FORMAT_TRUNCATION= +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wshadow" >&5 $as_echo_n "checking for -Wshadow... " >&6; } if $(${CC} -Wshadow -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then diff --git a/configure.ac b/configure.ac index a2eaab4ada..32b5fc09b2 100644 --- a/configure.ac +++ b/configure.ac @@ -1252,6 +1252,16 @@ else fi AC_SUBST(AST_NO_STRICT_OVERFLOW) +AC_MSG_CHECKING(for -Wno-format-truncation) +if $(${CC} -O2 -Wno-format-truncation -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then + AC_MSG_RESULT(yes) + AST_NO_FORMAT_TRUNCATION=-Wno-format-truncation +else + AC_MSG_RESULT(no) + AST_NO_FORMAT_TRUNCATION= +fi +AC_SUBST(AST_NO_FORMAT_TRUNCATION) + AC_MSG_CHECKING(for -Wshadow) if $(${CC} -Wshadow -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then AC_MSG_RESULT(yes) diff --git a/main/Makefile b/main/Makefile index d816443d07..e64aace265 100644 --- a/main/Makefile +++ b/main/Makefile @@ -140,7 +140,7 @@ endif $(CMD_PREFIX) rm $@.fix ast_expr2f.o: _ASTCFLAGS+=-Wno-unused -cdr.o: _ASTCFLAGS+=-Wno-format-truncation +cdr.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION) testexpr2: ast_expr2f.c ast_expr2.c ast_expr2.h $(CC) -g -c -Iinclude -DSTANDALONE ast_expr2f.c diff --git a/makeopts.in b/makeopts.in index 07360a71b4..887a155675 100644 --- a/makeopts.in +++ b/makeopts.in @@ -116,6 +116,7 @@ AST_ASTERISKSSL=@AST_ASTERISKSSL@ AST_DECLARATION_AFTER_STATEMENT=@AST_DECLARATION_AFTER_STATEMENT@ AST_TRAMPOLINES=@AST_TRAMPOLINES@ AST_NO_STRICT_OVERFLOW=@AST_NO_STRICT_OVERFLOW@ +AST_NO_FORMAT_TRUNCATION=@AST_NO_FORMAT_TRUNCATION@ AST_SHADOW_WARNINGS=@AST_SHADOW_WARNINGS@ AST_NESTED_FUNCTIONS=@AST_NESTED_FUNCTIONS@ AST_CLANG_BLOCKS=@AST_CLANG_BLOCKS@ -- 2.13.3