Merge pull request #9625 from dra27/warn-error

--enable-warn-error configure option
master
David Allsopp 2020-06-10 11:32:13 +01:00 committed by GitHub
commit 2f38a52086
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 38 deletions

45
configure vendored
View File

@ -913,6 +913,7 @@ enable_flambda_invariants
with_target_bindir with_target_bindir
enable_reserved_header_bits enable_reserved_header_bits
enable_stdlib_manpages enable_stdlib_manpages
enable_warn_error
enable_force_safe_string enable_force_safe_string
enable_flat_float_array enable_flat_float_array
enable_function_sections enable_function_sections
@ -1593,6 +1594,7 @@ Optional Features:
headers for profiling info headers for profiling info
--disable-stdlib-manpages --disable-stdlib-manpages
do not build or install the library man pages do not build or install the library man pages
--enable-warn-error treat C compiler warnings as errors
--disable-force-safe-string --disable-force-safe-string
do not force strings to be safe do not force strings to be safe
--disable-flat-float-array --disable-flat-float-array
@ -3251,6 +3253,12 @@ if test "${enable_stdlib_manpages+set}" = set; then :
fi fi
# Check whether --enable-warn-error was given.
if test "${enable_warn_error+set}" = set; then :
enableval=$enable_warn_error;
fi
# There are two configure-time string safety options, # There are two configure-time string safety options,
@ -12610,21 +12618,26 @@ fi
case $ocaml_cv_cc_vendor in #( case $ocaml_cv_cc_vendor in #(
xlc-*) : xlc-*) :
outputobj='-o $(EMPTY)'; gcc_warnings="-qflag=i:i" ;; #( outputobj='-o $(EMPTY)'
warn_error_flag=''
cc_warnings='-qflag=i:i' ;; #(
# all warnings enabled # all warnings enabled
msvc-*) : msvc-*) :
outputobj=-Fo; gcc_warnings="" ;; #( outputobj='-Fo'
warn_error_flag='-WX'
cc_warnings='' ;; #(
*) : *) :
outputobj='-o $(EMPTY)' outputobj='-o $(EMPTY)'
gcc_warnings='-Wall -Wdeclaration-after-statement' warn_error_flag='-Werror'
case 4.12.0+dev0-2020-04-22 in #( cc_warnings='-Wall -Wdeclaration-after-statement' ;;
*+dev*) : esac
gcc_warnings="$gcc_warnings -Werror" ;; #(
case $enable_warn_error,4.12.0+dev0-2020-04-22 in #(
yes,*|,*+dev*) :
cc_warnings="$cc_warnings $warn_error_flag" ;; #(
*) : *) :
;; ;;
esac esac
;;
esac
# We select high optimization levels, provided we can turn off: # We select high optimization levels, provided we can turn off:
# - strict type-based aliasing analysis (too risky for the OCaml runtime) # - strict type-based aliasing analysis (too risky for the OCaml runtime)
@ -12647,7 +12660,7 @@ case $host in #(
gcc-[01234]-*) : gcc-[01234]-*) :
as_fn_error $? "This version of Mingw GCC is too old. Please use GCC version 5 or above." "$LINENO" 5 ;; #( as_fn_error $? "This version of Mingw GCC is too old. Please use GCC version 5 or above." "$LINENO" 5 ;; #(
gcc-*) : gcc-*) :
internal_cflags="-Wno-unused $gcc_warnings \ internal_cflags="-Wno-unused $cc_warnings \
-fexcess-precision=standard" -fexcess-precision=standard"
# TODO: see whether the code can be fixed to avoid -Wno-unused # TODO: see whether the code can be fixed to avoid -Wno-unused
common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields" common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields"
@ -12661,7 +12674,7 @@ esac ;; #(
case $ocaml_cv_cc_vendor in #( case $ocaml_cv_cc_vendor in #(
clang-*) : clang-*) :
common_cflags="-O2 -fno-strict-aliasing -fwrapv"; common_cflags="-O2 -fno-strict-aliasing -fwrapv";
internal_cflags="$gcc_warnings -fno-common" ;; #( internal_cflags="$cc_warnings -fno-common" ;; #(
gcc-[012]-*) : gcc-[012]-*) :
# Some versions known to miscompile OCaml, e,g, 2.7.2.1, some 2.96. # Some versions known to miscompile OCaml, e,g, 2.7.2.1, some 2.96.
# Plus: C99 support unknown. # Plus: C99 support unknown.
@ -12674,29 +12687,29 @@ $as_echo "$as_me: WARNING: This version of GCC is rather old. Reducing optimizat
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Consider using GCC version 4.2 or above." >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Consider using GCC version 4.2 or above." >&5
$as_echo "$as_me: WARNING: Consider using GCC version 4.2 or above." >&2;}; $as_echo "$as_me: WARNING: Consider using GCC version 4.2 or above." >&2;};
common_cflags="-std=gnu99 -O"; common_cflags="-std=gnu99 -O";
internal_cflags="$gcc_warnings" ;; #( internal_cflags="$cc_warnings" ;; #(
gcc-4-[234]) : gcc-4-[234]) :
# No -fexcess-precision option before GCC 4.5 # No -fexcess-precision option before GCC 4.5
common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \
-fno-builtin-memcmp"; -fno-builtin-memcmp";
internal_cflags="$gcc_warnings" ;; #( internal_cflags="$cc_warnings" ;; #(
gcc-4-*) : gcc-4-*) :
common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \
-fno-builtin-memcmp"; -fno-builtin-memcmp";
internal_cflags="$gcc_warnings -fexcess-precision=standard" ;; #( internal_cflags="$cc_warnings -fexcess-precision=standard" ;; #(
gcc-*) : gcc-*) :
common_cflags="-O2 -fno-strict-aliasing -fwrapv"; common_cflags="-O2 -fno-strict-aliasing -fwrapv";
internal_cflags="$gcc_warnings -fno-common \ internal_cflags="$cc_warnings -fno-common \
-fexcess-precision=standard" ;; #( -fexcess-precision=standard" ;; #(
msvc-*) : msvc-*) :
common_cflags="-nologo -O2 -Gy- -MD" common_cflags="-nologo -O2 -Gy- -MD $cc_warnings"
common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" common_cppflags="-D_CRT_SECURE_NO_DEPRECATE"
internal_cppflags='-DUNICODE -D_UNICODE' internal_cppflags='-DUNICODE -D_UNICODE'
internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE="
internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)" ;; #( internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)" ;; #(
xlc-*) : xlc-*) :
common_cflags="-O5 -qtune=balanced -qnoipa -qinline $CFLAGS"; common_cflags="-O5 -qtune=balanced -qnoipa -qinline $CFLAGS";
internal_cflags="$gcc_warnings" ;; #( internal_cflags="$cc_warnings" ;; #(
*) : *) :
common_cflags="-O" ;; common_cflags="-O" ;;
esac ;; esac ;;

View File

@ -348,6 +348,10 @@ AC_ARG_ENABLE([stdlib-manpages],
[AS_HELP_STRING([--disable-stdlib-manpages], [AS_HELP_STRING([--disable-stdlib-manpages],
[do not build or install the library man pages])]) [do not build or install the library man pages])])
AC_ARG_ENABLE([warn-error],
[AS_HELP_STRING([--enable-warn-error],
[treat C compiler warnings as errors])])
AC_ARG_VAR([WINDOWS_UNICODE_MODE], AC_ARG_VAR([WINDOWS_UNICODE_MODE],
[how to handle Unicode under Windows: ansi, compatible]) [how to handle Unicode under Windows: ansi, compatible])
@ -556,15 +560,20 @@ AS_IF(
AS_CASE([$ocaml_cv_cc_vendor], AS_CASE([$ocaml_cv_cc_vendor],
[xlc-*], [xlc-*],
[outputobj='-o $(EMPTY)'; gcc_warnings="-qflag=i:i"], # all warnings enabled [outputobj='-o $(EMPTY)'
warn_error_flag=''
cc_warnings='-qflag=i:i'], # all warnings enabled
[msvc-*], [msvc-*],
[outputobj=-Fo; gcc_warnings=""], [outputobj='-Fo'
warn_error_flag='-WX'
cc_warnings=''],
[outputobj='-o $(EMPTY)' [outputobj='-o $(EMPTY)'
gcc_warnings='-Wall -Wdeclaration-after-statement' warn_error_flag='-Werror'
AS_CASE([AC_PACKAGE_VERSION], cc_warnings='-Wall -Wdeclaration-after-statement'])
[*+dev*],
[gcc_warnings="$gcc_warnings -Werror"]) AS_CASE([$enable_warn_error,AC_PACKAGE_VERSION],
]) [yes,*|,*+dev*],
[cc_warnings="$cc_warnings $warn_error_flag"])
# We select high optimization levels, provided we can turn off: # We select high optimization levels, provided we can turn off:
# - strict type-based aliasing analysis (too risky for the OCaml runtime) # - strict type-based aliasing analysis (too risky for the OCaml runtime)
@ -588,7 +597,7 @@ AS_CASE([$host],
[AC_MSG_ERROR(m4_normalize([This version of Mingw GCC is too old. [AC_MSG_ERROR(m4_normalize([This version of Mingw GCC is too old.
Please use GCC version 5 or above.]))], Please use GCC version 5 or above.]))],
[gcc-*], [gcc-*],
[internal_cflags="-Wno-unused $gcc_warnings \ [internal_cflags="-Wno-unused $cc_warnings \
-fexcess-precision=standard" -fexcess-precision=standard"
# TODO: see whether the code can be fixed to avoid -Wno-unused # TODO: see whether the code can be fixed to avoid -Wno-unused
common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields" common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields"
@ -599,7 +608,7 @@ AS_CASE([$host],
[AS_CASE([$ocaml_cv_cc_vendor], [AS_CASE([$ocaml_cv_cc_vendor],
[clang-*], [clang-*],
[common_cflags="-O2 -fno-strict-aliasing -fwrapv"; [common_cflags="-O2 -fno-strict-aliasing -fwrapv";
internal_cflags="$gcc_warnings -fno-common"], internal_cflags="$cc_warnings -fno-common"],
[gcc-[[012]]-*], [gcc-[[012]]-*],
# Some versions known to miscompile OCaml, e,g, 2.7.2.1, some 2.96. # Some versions known to miscompile OCaml, e,g, 2.7.2.1, some 2.96.
# Plus: C99 support unknown. # Plus: C99 support unknown.
@ -612,29 +621,29 @@ AS_CASE([$host],
Reducing optimization level."])); Reducing optimization level."]));
AC_MSG_WARN([Consider using GCC version 4.2 or above.]); AC_MSG_WARN([Consider using GCC version 4.2 or above.]);
common_cflags="-std=gnu99 -O"; common_cflags="-std=gnu99 -O";
internal_cflags="$gcc_warnings"], internal_cflags="$cc_warnings"],
[gcc-4-[[234]]], [gcc-4-[[234]]],
# No -fexcess-precision option before GCC 4.5 # No -fexcess-precision option before GCC 4.5
[common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ [common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \
-fno-builtin-memcmp"; -fno-builtin-memcmp";
internal_cflags="$gcc_warnings"], internal_cflags="$cc_warnings"],
[gcc-4-*], [gcc-4-*],
[common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ [common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \
-fno-builtin-memcmp"; -fno-builtin-memcmp";
internal_cflags="$gcc_warnings -fexcess-precision=standard"], internal_cflags="$cc_warnings -fexcess-precision=standard"],
[gcc-*], [gcc-*],
[common_cflags="-O2 -fno-strict-aliasing -fwrapv"; [common_cflags="-O2 -fno-strict-aliasing -fwrapv";
internal_cflags="$gcc_warnings -fno-common \ internal_cflags="$cc_warnings -fno-common \
-fexcess-precision=standard"], -fexcess-precision=standard"],
[msvc-*], [msvc-*],
[common_cflags="-nologo -O2 -Gy- -MD" [common_cflags="-nologo -O2 -Gy- -MD $cc_warnings"
common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" common_cppflags="-D_CRT_SECURE_NO_DEPRECATE"
internal_cppflags='-DUNICODE -D_UNICODE' internal_cppflags='-DUNICODE -D_UNICODE'
internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE="
internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"], internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"],
[xlc-*], [xlc-*],
[common_cflags="-O5 -qtune=balanced -qnoipa -qinline $CFLAGS"; [common_cflags="-O5 -qtune=balanced -qnoipa -qinline $CFLAGS";
internal_cflags="$gcc_warnings"], internal_cflags="$cc_warnings"],
[common_cflags="-O"])]) [common_cflags="-O"])])
internal_cppflags="-DCAML_NAME_SPACE $internal_cppflags" internal_cppflags="-DCAML_NAME_SPACE $internal_cppflags"

View File

@ -49,7 +49,6 @@ function run {
# Takes 3 arguments # Takes 3 arguments
# $1:the Windows port. Recognized values: mingw, msvc and msvc64 # $1:the Windows port. Recognized values: mingw, msvc and msvc64
# $2: the prefix to use to install # $2: the prefix to use to install
# $3: C compiler flags to use to turn warnings into errors
function set_configuration { function set_configuration {
case "$1" in case "$1" in
mingw) mingw)
@ -77,9 +76,7 @@ function set_configuration {
./configure --cache-file="$CACHE_DIRECTORY/config.cache-$1" \ ./configure --cache-file="$CACHE_DIRECTORY/config.cache-$1" \
$dep $build $host --prefix="$2" --enable-ocamltest ) $dep $build $host --prefix="$2" --enable-ocamltest )
FILE=$(pwd | cygpath -f - -m)/Makefile.config # FILE=$(pwd | cygpath -f - -m)/Makefile.config
echo "Edit $FILE to turn C compiler warnings into errors"
sed -i -e '/^ *OC_CFLAGS *=/s/\r\?$/ '"$3"'\0/' "$FILE"
# run "Content of $FILE" cat Makefile.config # run "Content of $FILE" cat Makefile.config
} }
@ -110,7 +107,7 @@ case "$1" in
msvc32-only) msvc32-only)
cd "$APPVEYOR_BUILD_FOLDER/../$BUILD_PREFIX-msvc32" cd "$APPVEYOR_BUILD_FOLDER/../$BUILD_PREFIX-msvc32"
set_configuration msvc "$OCAMLROOT-msvc32" -WX set_configuration msvc "$OCAMLROOT-msvc32"
run "$MAKE world" $MAKE world run "$MAKE world" $MAKE world
run "$MAKE runtimeopt" $MAKE runtimeopt run "$MAKE runtimeopt" $MAKE runtimeopt
@ -163,9 +160,9 @@ case "$1" in
fi fi
if [[ $PORT = 'msvc64' ]] ; then if [[ $PORT = 'msvc64' ]] ; then
set_configuration msvc64 "$OCAMLROOT" -WX set_configuration msvc64 "$OCAMLROOT"
else else
set_configuration mingw "$OCAMLROOT-mingw32" -Werror set_configuration mingw "$OCAMLROOT-mingw32"
fi fi
cd "$APPVEYOR_BUILD_FOLDER/../$BUILD_PREFIX-$PORT" cd "$APPVEYOR_BUILD_FOLDER/../$BUILD_PREFIX-$PORT"