1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

Initial attempt to support configure's --(dis|en)able-optimize

option to specify dis(activation) of compiler optimizations.

If option is specified, it will be honored independant of the
--(dis|en)able-debug option.
This commit is contained in:
Yang Tse 2008-10-07 13:13:34 +00:00
parent 445e4a9792
commit d930280af5
6 changed files with 708 additions and 91 deletions

View File

@ -9,6 +9,7 @@ AM_CONFIG_HEADER([config.h])
AM_MAINTAINER_MODE
CARES_CHECK_OPTION_DEBUG
CARES_CHECK_OPTION_OPTIMIZE
CARES_CHECK_OPTION_WARNINGS
dnl SED is mandatory for configure process and libtool.
@ -67,7 +68,7 @@ AC_CANONICAL_HOST
dnl Get system canonical name
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
AC_PROG_CC
CARES_CHECK_PROG_CC
AM_PROG_CC_C_O
AC_PROG_INSTALL
@ -142,9 +143,10 @@ dnl platform/compiler/architecture specific checks/flags
dnl **********************************************************************
CARES_CHECK_COMPILER
CARES_PROCESS_CC_BASIC_OPTS
CARES_PROCESS_CC_DEBUG_OPTS
CARES_PROCESS_CC_WARNING_OPTS
CARES_SET_COMPILER_BASIC_OPTS
CARES_SET_COMPILER_DEBUG_OPTS
CARES_SET_COMPILER_OPTIMIZE_OPTS
CARES_SET_COMPILER_WARNING_OPTS
case $host in
#
@ -882,5 +884,15 @@ fi
CARES_PRIVATE_LIBS="$LIBS"
AC_SUBST(CARES_PRIVATE_LIBS)
dnl squeeze whitespace out of some variables
CFLAGS=`eval echo $CFLAGS`
CPPFLAGS=`eval echo $CPPFLAGS`
DEFS=`eval echo $DEFS`
LDFLAGS=`eval echo $LDFLAGS`
LIBS=`eval echo $LIBS`
CARES_PRIVATE_LIBS=`eval echo $CARES_PRIVATE_LIBS`
AC_CONFIG_FILES([Makefile libcares.pc])
AC_OUTPUT

View File

@ -16,7 +16,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
# serial 2
# serial 3
dnl CARES_CHECK_COMPILER
@ -28,11 +28,33 @@ AC_DEFUN([CARES_CHECK_COMPILER], [
compiler_id="unknown"
compiler_num="0"
#
flags_dbg_all="unknown"
flags_dbg_yes="unknown"
flags_dbg_off="unknown"
flags_opt_all="unknown"
flags_opt_yes="unknown"
flags_opt_off="unknown"
#
CARES_CHECK_COMPILER_DEC
CARES_CHECK_COMPILER_IBM
CARES_CHECK_COMPILER_INTEL
CARES_CHECK_COMPILER_GNU
#
if test "$compiler_id" = "unknown"; then
cat <<_EOF 1>&2
***
*** Warning: This configure script does not have information about the
*** compiler you are using, relative to the flags required to enable or
*** disable generation of debug info, optimization options or warnings.
***
*** Whatever settings are present in CFLAGS will be used for this run.
***
*** If you wish to help the c-ares project to better support your compiler
*** you can report this and the required info on the c-ares development
*** mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
***
_EOF
fi
])
@ -48,6 +70,12 @@ AC_DEFUN([CARES_CHECK_COMPILER_DEC], [
test "$curl_cv_have_def___DECC_VER" = "yes"; then
AC_MSG_RESULT([yes])
compiler_id="DECC"
flags_dbg_all="-g -g0 -g1 -g2 -g3"
flags_dbg_yes="-g2"
flags_dbg_off="-g0"
flags_opt_all="-O -O0 -O1 -O2 -O3 -O4"
flags_opt_yes="-O1"
flags_opt_off="-O0"
else
AC_MSG_RESULT([no])
fi
@ -71,6 +99,19 @@ AC_DEFUN([CARES_CHECK_COMPILER_GNU], [
gccvhi=`echo $gccver | cut -d . -f1`
gccvlo=`echo $gccver | cut -d . -f2`
compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
flags_dbg_all="-g -g0 -g1 -g2 -g3"
flags_dbg_all="$flags_dbg_all -ggdb"
flags_dbg_all="$flags_dbg_all -gstabs"
flags_dbg_all="$flags_dbg_all -gstabs+"
flags_dbg_all="$flags_dbg_all -gcoff"
flags_dbg_all="$flags_dbg_all -gxcoff"
flags_dbg_all="$flags_dbg_all -gdwarf-2"
flags_dbg_all="$flags_dbg_all -gvms"
flags_dbg_yes="-g"
flags_dbg_off="-g0"
flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
flags_opt_yes="-O2"
flags_opt_off="-O0"
else
AC_MSG_RESULT([no])
fi
@ -87,6 +128,19 @@ AC_DEFUN([CARES_CHECK_COMPILER_IBM], [
if test "$curl_cv_have_def___IBMC__" = "yes"; then
AC_MSG_RESULT([yes])
compiler_id="IBMC"
flags_dbg_all="-g -g0 -g1 -g2 -g3"
flags_dbg_yes="-g"
flags_dbg_off=""
flags_opt_all="-O -O0 -O1 -O2 -O3 -O4 -O5"
flags_opt_all="$flags_opt_all -qnooptimize"
flags_opt_all="$flags_opt_all -qoptimize=0"
flags_opt_all="$flags_opt_all -qoptimize=1"
flags_opt_all="$flags_opt_all -qoptimize=2"
flags_opt_all="$flags_opt_all -qoptimize=3"
flags_opt_all="$flags_opt_all -qoptimize=4"
flags_opt_all="$flags_opt_all -qoptimize=5"
flags_opt_yes="-O2"
flags_opt_off="-qnooptimize"
else
AC_MSG_RESULT([no])
fi
@ -106,8 +160,27 @@ AC_DEFUN([CARES_CHECK_COMPILER_INTEL], [
CURL_CHECK_DEF([__unix__], [], [silent])
if test "$curl_cv_have_def___unix__" = "yes"; then
compiler_id="ICC_unix"
flags_dbg_all="-g -g0"
flags_dbg_yes="-g -fp"
flags_dbg_off="-g0"
flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
flags_opt_yes="-O2"
flags_opt_off="-O0"
else
compiler_id="ICC_windows"
flags_dbg_all="/ZI /Zi /zI /zi /ZD /Zd /zD /zd /Z7 /z7"
flags_dbg_all="$flags_dbg_all /debug"
flags_dbg_all="$flags_dbg_all /debug:none"
flags_dbg_all="$flags_dbg_all /debug:minimal"
flags_dbg_all="$flags_dbg_all /debug:partial"
flags_dbg_all="$flags_dbg_all /debug:full"
flags_dbg_all="$flags_dbg_all /debug:semantic_stepping"
flags_dbg_all="$flags_dbg_all /debug:extended"
flags_dbg_yes="/Zi /Oy-"
flags_dbg_off=""
flags_opt_all="/O /O0 /O1 /O2 /O3 /Os"
flags_opt_yes="/O2"
flags_opt_off=""
fi
compiler_num="$curl_cv_def___INTEL_COMPILER"
else
@ -116,12 +189,13 @@ AC_DEFUN([CARES_CHECK_COMPILER_INTEL], [
])
dnl CARES_PROCESS_CC_BASIC_OPTS
dnl CARES_SET_COMPILER_BASIC_OPTS
dnl -------------------------------------------------
dnl Sets compiler options/flags which are independant
dnl of configure's debug or warnings options.
dnl Sets compiler specific options/flags which do not
dnl depend on configure's debug, optimize or warnings
dnl options.
AC_DEFUN([CARES_PROCESS_CC_BASIC_OPTS], [
AC_DEFUN([CARES_SET_COMPILER_BASIC_OPTS], [
AC_REQUIRE([CARES_CHECK_COMPILER])dnl
#
if test "$compiler_id" = "DECC"; then
@ -174,44 +248,134 @@ AC_DEFUN([CARES_PROCESS_CC_BASIC_OPTS], [
])
dnl CARES_PROCESS_CC_DEBUG_OPTS
dnl CARES_SET_COMPILER_DEBUG_OPTS
dnl -------------------------------------------------
dnl Sets compiler options/flags which depend on
dnl configure's debug given option.
dnl Sets compiler specific options/flags which depend
dnl on configure's debug option.
AC_DEFUN([CARES_PROCESS_CC_DEBUG_OPTS], [
AC_DEFUN([CARES_SET_COMPILER_DEBUG_OPTS], [
AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
AC_REQUIRE([CARES_CHECK_COMPILER])dnl
#
if test "$compiler_id" != "unknown"; then
#
ac_save_CFLAGS="$CFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
#
honor_debug_option="yes"
CARES_VAR_STRIP([CFLAGS],[${flags_dbg_all}])
CARES_VAR_STRIP([CPPFLAGS],[${flags_dbg_all}])
if test "$want_debug" = "yes"; then
CFLAGS="$CFLAGS -g"
CFLAGS="$CFLAGS $flags_dbg_yes"
AC_MSG_CHECKING([if compiler accepts debug enabling flags $flags_dbg_yes])
fi
#
if test "$want_debug" = "no"; then
dnl strip off optimizer flags
NEWFLAGS=""
for flag in $CFLAGS; do
case "$flag" in
-O*)
dnl echo "cut off $flag"
;;
*)
NEWFLAGS="$NEWFLAGS $flag"
;;
esac
done
CFLAGS=$NEWFLAGS
CFLAGS="$CFLAGS $flags_dbg_off"
AC_MSG_CHECKING([if compiler accepts debug disabling flags $flags_dbg_off])
fi
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
]],[[
int i = 1;
return i;
]])
],[
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
honor_debug_option="no"
])
#
if test "$honor_debug_option" = "no"; then
CFLAGS="$ac_save_CFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS"
fi
#
fi
])
dnl CARES_PROCESS_CC_WARNING_OPTS
dnl CARES_SET_COMPILER_OPTIMIZE_OPTS
dnl -------------------------------------------------
dnl Sets compiler specific options/flags which depend
dnl on configure's optimize option.
AC_DEFUN([CARES_SET_COMPILER_OPTIMIZE_OPTS], [
AC_REQUIRE([CARES_CHECK_OPTION_OPTIMIZE])dnl
AC_REQUIRE([CARES_CHECK_COMPILER])dnl
#
if test "$compiler_id" != "unknown"; then
#
ac_save_CFLAGS="$CFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
#
dnl If optimization request setting has not been explicitly specified,
dnl it has been derived from the debug setting and initially assumed.
dnl This initially assumed optimizer setting will finally be ignored
dnl if CFLAGS or CPPFLAGS already hold optimizer flags. This implies
dnl that an initially assumed optimizer setting might not be honored.
#
honor_optimize_option="yes"
if test "$want_optimize" = "assume_no" ||
test "$want_optimize" = "assume_yes"; then
AC_MSG_CHECKING([if compiler optimizer assumed setting might be used])
CARES_VAR_MATCH_IFELSE([CFLAGS],[${flags_opt_all}],[
honor_optimize_option="no"
])
CARES_VAR_MATCH_IFELSE([CPPFLAGS],[${flags_opt_all}],[
honor_optimize_option="no"
])
AC_MSG_RESULT([$honor_optimize_option])
if test "$honor_optimize_option" = "yes"; then
if test "$want_optimize" = "assume_yes"; then
want_optimize="yes"
fi
if test "$want_optimize" = "assume_no"; then
want_optimize="no"
fi
fi
fi
#
if test "$honor_optimize_option" = "yes"; then
CARES_VAR_STRIP([CFLAGS],[${flags_opt_all}])
CARES_VAR_STRIP([CPPFLAGS],[${flags_opt_all}])
if test "$want_optimize" = "yes"; then
CFLAGS="$CFLAGS $flags_opt_yes"
AC_MSG_CHECKING([if compiler accepts optimizer enabling flags $flags_opt_yes])
fi
if test "$want_optimize" = "no"; then
CFLAGS="$CFLAGS $flags_opt_off"
AC_MSG_CHECKING([if compiler accepts optimizer disabling flags $flags_opt_off])
fi
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
]],[[
int i = 1;
return i;
]])
],[
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
honor_optimize_option="no"
])
fi
#
if test "$honor_optimize_option" = "no"; then
CFLAGS="$ac_save_CFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS"
fi
#
fi
])
dnl CARES_SET_COMPILER_WARNING_OPTS
dnl -------------------------------------------------
dnl Sets compiler options/flags which depend on
dnl configure's warnings given option.
AC_DEFUN([CARES_PROCESS_CC_WARNING_OPTS], [
AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
AC_REQUIRE([CARES_CHECK_OPTION_WARNINGS])dnl
AC_REQUIRE([CARES_CHECK_COMPILER])dnl
#
@ -236,7 +400,7 @@ AC_DEFUN([CARES_PROCESS_CC_WARNING_OPTS], [
if test "$compiler_id" = "GNUC"; then
#
# FIXME: Some of these warnings should be changed into errors
# and moved to CARES-PROCESS-CC-BASIC-OPTS
# and moved to CARES-SET-COMPILER-BASIC-OPTS
#
if test "$want_warnings" = "yes"; then
dnl this is a set of options we believe *ALL* gcc versions support:
@ -295,6 +459,7 @@ dnl CARES_PROCESS_DEBUG_BUILD_OPTS
dnl -------------------------------------------------
dnl Settings which depend on configure's debug given
dnl option, and further configure the build process.
dnl Don't use this macro for compiler dependant stuff.
AC_DEFUN([CARES_PROCESS_DEBUG_BUILD_OPTS], [
AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
@ -311,9 +476,86 @@ AC_DEFUN([CARES_PROCESS_DEBUG_BUILD_OPTS], [
dnl libcurl stuff so this BUILDING_LIBCURL is not THAT much uglier
AC_DEFINE(BUILDING_LIBCURL, 1, [when building as static part of libcurl])
CPPFLAGS="$CPPFLAGS -DCURLDEBUG -I$srcdir/../include"
CPPFLAGS="$CPPFLAGS -DCURLDEBUG"
dnl CHECKME: Do we still need so specify this include path here?
CPPFLAGS="$CPPFLAGS -I$srcdir/../include"
fi
#
])
dnl CARES_CHECK_PROG_CC
dnl -------------------------------------------------
dnl Check for compiler program, preventing CFLAGS and
dnl CPPFLAGS from being unexpectedly changed.
AC_DEFUN([CARES_CHECK_PROG_CC], [
ac_save_CFLAGS="$CFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
AC_PROG_CC
CFLAGS="$ac_save_CFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS"
])
dnl CARES_VAR_MATCH (VARNAME, VALUE)
dnl -------------------------------------------------
dnl Verifies if shell variable VARNAME contains VALUE.
dnl Contents of variable VARNAME and VALUE are handled
dnl as whitespace separated lists of words. If at least
dnl one word of VALUE is present in VARNAME the match
dnl is considered positive, otherwise false.
AC_DEFUN([CARES_VAR_MATCH], [
ac_var_match_word="no"
for word1 in "${[$1]}"; do
for word2 in "[$2]"; do
if test "$word1" = "$word2"; then
ac_var_match_word="yes"
fi
done
done
])
dnl CARES_VAR_MATCH_IFELSE (VARNAME, VALUE,
dnl [ACTION-IF-MATCH], [ACTION-IF-NOT-MATCH])
dnl -------------------------------------------------
dnl This performs a CURL_VAR_MATCH check and executes
dnl first branch if the match is positive, otherwise
dnl the second branch is executed.
AC_DEFUN([CARES_VAR_MATCH_IFELSE], [
CARES_VAR_MATCH([$1],[$2])
if test "$ac_var_match_word" = "yes"; then
ifelse($3,,:,[$3])
ifelse($4,,,[else
[$4]])
fi
])
dnl CARES_VAR_STRIP (VARNAME, VALUE)
dnl -------------------------------------------------
dnl Contents of variable VARNAME and VALUE are handled
dnl as whitespace separated lists of words. Each word
dnl from VALUE is removed from VARNAME when present.
AC_DEFUN([CARES_VAR_STRIP], [
ac_var_stripped=""
for word1 in "${[$1]}"; do
ac_var_strip_word="no"
for word2 in "[$2]"; do
if test "$word1" = "$word2"; then
ac_var_strip_word="yes"
fi
done
if test "$ac_var_strip_word" = "no"; then
ac_var_stripped="$ac_var_stripped $word1"
fi
done
dnl squeeze whitespace out of result
[$1]=`eval echo $[$1]`
])

View File

@ -16,7 +16,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
# serial 1
# serial 2
dnl CARES_CHECK_OPTION_DEBUG
@ -27,12 +27,12 @@ dnl variable want_debug value as appropriate.
AC_DEFUN([CARES_CHECK_OPTION_DEBUG], [
AC_BEFORE([$0],[CARES_CHECK_OPTION_WARNINGS])dnl
AC_BEFORE([$0],[AC_PROG_CC])dnl
AC_BEFORE([$0],[CARES_CHECK_PROG_CC])dnl
AC_MSG_CHECKING([whether to enable debug build options])
OPT_DEBUG_BUILD="default"
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug],[Enable debug build options])
AC_HELP_STRING([--disable-debug],[Disable debug build options]),
AC_HELP_STRING([--enable-debug],[Enable debug build options])
AC_HELP_STRING([--disable-debug],[Disable debug build options]),
OPT_DEBUG_BUILD=$enableval)
case "$OPT_DEBUG_BUILD" in
no)
@ -52,20 +52,76 @@ AC_DEFUN([CARES_CHECK_OPTION_DEBUG], [
])
dnl CARES_CHECK_OPTION_OPTIMIZE
dnl -------------------------------------------------
dnl Verify if configure has been invoked with option
dnl --enable-optimize or --disable-optimize, and set
dnl shell variable want_optimize value as appropriate.
AC_DEFUN([CARES_CHECK_OPTION_OPTIMIZE], [
AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
AC_BEFORE([$0],[CARES_CHECK_PROG_CC])dnl
AC_MSG_CHECKING([whether to enable compiler optimizer])
OPT_COMPILER_OPTIMIZE="default"
AC_ARG_ENABLE(optimize,
AC_HELP_STRING([--enable-optimize(=OPT)],[Enable compiler optimizations (default=-O2)])
AC_HELP_STRING([--disable-optimize],[Disable compiler optimizations]),
OPT_COMPILER_OPTIMIZE=$enableval)
case "$OPT_COMPILER_OPTIMIZE" in
no)
dnl --disable-optimize option used. We will handle this as
dnl a request to disable compiler optimizations if possible.
dnl If the compiler is known CFLAGS and CPPFLAGS will be
dnl overridden, otherwise this can not be honored.
want_optimize="no"
AC_MSG_RESULT([no])
;;
default)
dnl configure's optimize option not specified. Initially we will
dnl handle this as a a request contrary to configure's setting
dnl for --enable-debug. IOW, initially, for debug-enabled builds
dnl this will be handled as a request to disable optimizations if
dnl possible, and for debug-disabled builds this will be handled
dnl initially as a request to enable optimizations if possible.
dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do
dnl not have any optimizer flag the request will be honored, in
dnl any other case the request can not be honored.
dnl IOW, existing optimizer flags defined in CFLAGS or CPPFLAGS
dnl will always take precedence over any initial assumption.
if test "$want_debug" = "yes"; then
want_optimize="assume_no"
AC_MSG_RESULT([not specified (assuming no)])
else
want_optimize="assume_yes"
AC_MSG_RESULT([not specified (assuming yes)])
fi
;;
*)
dnl --enable-optimize option used. We will handle this as
dnl a request to enable compiler optimizations if possible.
dnl If the compiler is known CFLAGS and CPPFLAGS will be
dnl overridden, otherwise this can not be honored.
want_optimize="yes"
AC_MSG_RESULT([yes])
;;
esac
])
dnl CARES_CHECK_OPTION_WARNINGS
dnl -------------------------------------------------
dnl Verify if configure has been invoked with option
dnl --enable-warnings or --disable-warnings, and set
DNL shell variable want_warnings as appropriate.
dnl shell variable want_warnings as appropriate.
AC_DEFUN([CARES_CHECK_OPTION_WARNINGS], [
AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl
AC_BEFORE([$0],[AC_PROG_CC])dnl
AC_BEFORE([$0],[CARES_CHECK_PROG_CC])dnl
AC_MSG_CHECKING([whether to enable strict compiler warnings])
OPT_COMPILER_WARNINGS="default"
AC_ARG_ENABLE(warnings,
AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
OPT_COMPILER_WARNINGS=$enableval)
case "$OPT_COMPILER_WARNINGS" in
no)

View File

@ -37,6 +37,7 @@ AM_CONFIG_HEADER(lib/config.h src/config.h include/curl/curlbuild.h)
AM_MAINTAINER_MODE
CURL_CHECK_OPTION_DEBUG
CURL_CHECK_OPTION_OPTIMIZE
CURL_CHECK_OPTION_WARNINGS
dnl SED is mandatory for configure process and libtool.
@ -133,7 +134,7 @@ dnl Get system canonical name
AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS])
dnl Checks for programs.
AC_PROG_CC
CURL_CHECK_PROG_CC
dnl Our curl_off_t internal and external configure settings
CURL_CONFIGURE_CURL_OFF_T
@ -251,9 +252,10 @@ dnl platform/compiler/architecture specific checks/flags
dnl **********************************************************************
CURL_CHECK_COMPILER
CURL_PROCESS_CC_BASIC_OPTS
CURL_PROCESS_CC_DEBUG_OPTS
CURL_PROCESS_CC_WARNING_OPTS
CURL_SET_COMPILER_BASIC_OPTS
CURL_SET_COMPILER_DEBUG_OPTS
CURL_SET_COMPILER_OPTIMIZE_OPTS
CURL_SET_COMPILER_WARNING_OPTS
case $host in
#
@ -2529,6 +2531,18 @@ fi
AC_SUBST(SUPPORT_PROTOCOLS)
dnl squeeze whitespace out of some variables
CFLAGS=`eval echo $CFLAGS`
CPPFLAGS=`eval echo $CPPFLAGS`
DEFS=`eval echo $DEFS`
LDFLAGS=`eval echo $LDFLAGS`
LIBS=`eval echo $LIBS`
CURL_LIBS=`eval echo $CURL_LIBS`
LIBCURL_LIBS=`eval echo $LIBCURL_LIBS`
TEST_SERVER_LIBS=`eval echo $TEST_SERVER_LIBS`
AC_CONFIG_FILES([Makefile \
docs/Makefile \
docs/examples/Makefile \

View File

@ -22,7 +22,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
# serial 1
# serial 2
dnl CURL_CHECK_COMPILER
@ -34,11 +34,33 @@ AC_DEFUN([CURL_CHECK_COMPILER], [
compiler_id="unknown"
compiler_num="0"
#
flags_dbg_all="unknown"
flags_dbg_yes="unknown"
flags_dbg_off="unknown"
flags_opt_all="unknown"
flags_opt_yes="unknown"
flags_opt_off="unknown"
#
CURL_CHECK_COMPILER_DEC
CURL_CHECK_COMPILER_IBM
CURL_CHECK_COMPILER_INTEL
CURL_CHECK_COMPILER_GNU
#
if test "$compiler_id" = "unknown"; then
cat <<_EOF 1>&2
***
*** Warning: This configure script does not have information about the
*** compiler you are using, relative to the flags required to enable or
*** disable generation of debug info, optimization options or warnings.
***
*** Whatever settings are present in CFLAGS will be used for this run.
***
*** If you wish to help the cURL project to better support your compiler
*** you can report this and the required info on the libcurl development
*** mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
***
_EOF
fi
])
@ -54,6 +76,12 @@ AC_DEFUN([CURL_CHECK_COMPILER_DEC], [
test "$curl_cv_have_def___DECC_VER" = "yes"; then
AC_MSG_RESULT([yes])
compiler_id="DECC"
flags_dbg_all="-g -g0 -g1 -g2 -g3"
flags_dbg_yes="-g2"
flags_dbg_off="-g0"
flags_opt_all="-O -O0 -O1 -O2 -O3 -O4"
flags_opt_yes="-O1"
flags_opt_off="-O0"
else
AC_MSG_RESULT([no])
fi
@ -77,6 +105,19 @@ AC_DEFUN([CURL_CHECK_COMPILER_GNU], [
gccvhi=`echo $gccver | cut -d . -f1`
gccvlo=`echo $gccver | cut -d . -f2`
compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
flags_dbg_all="-g -g0 -g1 -g2 -g3"
flags_dbg_all="$flags_dbg_all -ggdb"
flags_dbg_all="$flags_dbg_all -gstabs"
flags_dbg_all="$flags_dbg_all -gstabs+"
flags_dbg_all="$flags_dbg_all -gcoff"
flags_dbg_all="$flags_dbg_all -gxcoff"
flags_dbg_all="$flags_dbg_all -gdwarf-2"
flags_dbg_all="$flags_dbg_all -gvms"
flags_dbg_yes="-g"
flags_dbg_off="-g0"
flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
flags_opt_yes="-O2"
flags_opt_off="-O0"
else
AC_MSG_RESULT([no])
fi
@ -93,6 +134,19 @@ AC_DEFUN([CURL_CHECK_COMPILER_IBM], [
if test "$curl_cv_have_def___IBMC__" = "yes"; then
AC_MSG_RESULT([yes])
compiler_id="IBMC"
flags_dbg_all="-g -g0 -g1 -g2 -g3"
flags_dbg_yes="-g"
flags_dbg_off=""
flags_opt_all="-O -O0 -O1 -O2 -O3 -O4 -O5"
flags_opt_all="$flags_opt_all -qnooptimize"
flags_opt_all="$flags_opt_all -qoptimize=0"
flags_opt_all="$flags_opt_all -qoptimize=1"
flags_opt_all="$flags_opt_all -qoptimize=2"
flags_opt_all="$flags_opt_all -qoptimize=3"
flags_opt_all="$flags_opt_all -qoptimize=4"
flags_opt_all="$flags_opt_all -qoptimize=5"
flags_opt_yes="-O2"
flags_opt_off="-qnooptimize"
else
AC_MSG_RESULT([no])
fi
@ -112,8 +166,27 @@ AC_DEFUN([CURL_CHECK_COMPILER_INTEL], [
CURL_CHECK_DEF([__unix__], [], [silent])
if test "$curl_cv_have_def___unix__" = "yes"; then
compiler_id="ICC_unix"
flags_dbg_all="-g -g0"
flags_dbg_yes="-g -fp"
flags_dbg_off="-g0"
flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
flags_opt_yes="-O2"
flags_opt_off="-O0"
else
compiler_id="ICC_windows"
flags_dbg_all="/ZI /Zi /zI /zi /ZD /Zd /zD /zd /Z7 /z7"
flags_dbg_all="$flags_dbg_all /debug"
flags_dbg_all="$flags_dbg_all /debug:none"
flags_dbg_all="$flags_dbg_all /debug:minimal"
flags_dbg_all="$flags_dbg_all /debug:partial"
flags_dbg_all="$flags_dbg_all /debug:full"
flags_dbg_all="$flags_dbg_all /debug:semantic_stepping"
flags_dbg_all="$flags_dbg_all /debug:extended"
flags_dbg_yes="/Zi /Oy-"
flags_dbg_off=""
flags_opt_all="/O /O0 /O1 /O2 /O3 /Os"
flags_opt_yes="/O2"
flags_opt_off=""
fi
compiler_num="$curl_cv_def___INTEL_COMPILER"
else
@ -122,12 +195,13 @@ AC_DEFUN([CURL_CHECK_COMPILER_INTEL], [
])
dnl CURL_PROCESS_CC_BASIC_OPTS
dnl CURL_SET_COMPILER_BASIC_OPTS
dnl -------------------------------------------------
dnl Sets compiler options/flags which are independant
dnl of configure's debug or warnings options.
dnl Sets compiler specific options/flags which do not
dnl depend on configure's debug, optimize or warnings
dnl options.
AC_DEFUN([CURL_PROCESS_CC_BASIC_OPTS], [
AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
AC_REQUIRE([CURL_CHECK_COMPILER])dnl
#
if test "$compiler_id" = "DECC"; then
@ -180,44 +254,134 @@ AC_DEFUN([CURL_PROCESS_CC_BASIC_OPTS], [
])
dnl CURL_PROCESS_CC_DEBUG_OPTS
dnl CURL_SET_COMPILER_DEBUG_OPTS
dnl -------------------------------------------------
dnl Sets compiler options/flags which depend on
dnl configure's debug given option.
dnl Sets compiler specific options/flags which depend
dnl on configure's debug option.
AC_DEFUN([CURL_PROCESS_CC_DEBUG_OPTS], [
AC_DEFUN([CURL_SET_COMPILER_DEBUG_OPTS], [
AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
AC_REQUIRE([CURL_CHECK_COMPILER])dnl
#
if test "$compiler_id" != "unknown"; then
#
ac_save_CFLAGS="$CFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
#
honor_debug_option="yes"
CURL_VAR_STRIP([CFLAGS],[${flags_dbg_all}])
CURL_VAR_STRIP([CPPFLAGS],[${flags_dbg_all}])
if test "$want_debug" = "yes"; then
CFLAGS="$CFLAGS -g"
CFLAGS="$CFLAGS $flags_dbg_yes"
AC_MSG_CHECKING([if compiler accepts debug enabling flags $flags_dbg_yes])
fi
#
if test "$want_debug" = "no"; then
dnl strip off optimizer flags
NEWFLAGS=""
for flag in $CFLAGS; do
case "$flag" in
-O*)
dnl echo "cut off $flag"
;;
*)
NEWFLAGS="$NEWFLAGS $flag"
;;
esac
done
CFLAGS=$NEWFLAGS
CFLAGS="$CFLAGS $flags_dbg_off"
AC_MSG_CHECKING([if compiler accepts debug disabling flags $flags_dbg_off])
fi
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
]],[[
int i = 1;
return i;
]])
],[
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
honor_debug_option="no"
])
#
if test "$honor_debug_option" = "no"; then
CFLAGS="$ac_save_CFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS"
fi
#
fi
])
dnl CURL_PROCESS_CC_WARNING_OPTS
dnl CURL_SET_COMPILER_OPTIMIZE_OPTS
dnl -------------------------------------------------
dnl Sets compiler specific options/flags which depend
dnl on configure's optimize option.
AC_DEFUN([CURL_SET_COMPILER_OPTIMIZE_OPTS], [
AC_REQUIRE([CURL_CHECK_OPTION_OPTIMIZE])dnl
AC_REQUIRE([CURL_CHECK_COMPILER])dnl
#
if test "$compiler_id" != "unknown"; then
#
ac_save_CFLAGS="$CFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
#
dnl If optimization request setting has not been explicitly specified,
dnl it has been derived from the debug setting and initially assumed.
dnl This initially assumed optimizer setting will finally be ignored
dnl if CFLAGS or CPPFLAGS already hold optimizer flags. This implies
dnl that an initially assumed optimizer setting might not be honored.
#
honor_optimize_option="yes"
if test "$want_optimize" = "assume_no" ||
test "$want_optimize" = "assume_yes"; then
AC_MSG_CHECKING([if compiler optimizer assumed setting might be used])
CURL_VAR_MATCH_IFELSE([CFLAGS],[${flags_opt_all}],[
honor_optimize_option="no"
])
CURL_VAR_MATCH_IFELSE([CPPFLAGS],[${flags_opt_all}],[
honor_optimize_option="no"
])
AC_MSG_RESULT([$honor_optimize_option])
if test "$honor_optimize_option" = "yes"; then
if test "$want_optimize" = "assume_yes"; then
want_optimize="yes"
fi
if test "$want_optimize" = "assume_no"; then
want_optimize="no"
fi
fi
fi
#
if test "$honor_optimize_option" = "yes"; then
CURL_VAR_STRIP([CFLAGS],[${flags_opt_all}])
CURL_VAR_STRIP([CPPFLAGS],[${flags_opt_all}])
if test "$want_optimize" = "yes"; then
CFLAGS="$CFLAGS $flags_opt_yes"
AC_MSG_CHECKING([if compiler accepts optimizer enabling flags $flags_opt_yes])
fi
if test "$want_optimize" = "no"; then
CFLAGS="$CFLAGS $flags_opt_off"
AC_MSG_CHECKING([if compiler accepts optimizer disabling flags $flags_opt_off])
fi
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
]],[[
int i = 1;
return i;
]])
],[
AC_MSG_RESULT([yes])
],[
AC_MSG_RESULT([no])
honor_optimize_option="no"
])
fi
#
if test "$honor_optimize_option" = "no"; then
CFLAGS="$ac_save_CFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS"
fi
#
fi
])
dnl CURL_SET_COMPILER_WARNING_OPTS
dnl -------------------------------------------------
dnl Sets compiler options/flags which depend on
dnl configure's warnings given option.
AC_DEFUN([CURL_PROCESS_CC_WARNING_OPTS], [
AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
AC_REQUIRE([CURL_CHECK_OPTION_WARNINGS])dnl
AC_REQUIRE([CURL_CHECK_COMPILER])dnl
#
@ -242,7 +406,7 @@ AC_DEFUN([CURL_PROCESS_CC_WARNING_OPTS], [
if test "$compiler_id" = "GNUC"; then
#
# FIXME: Some of these warnings should be changed into errors
# and moved to CURL-PROCESS-CC-BASIC-OPTS
# and moved to CURL-SET-COMPILER-BASIC-OPTS
#
if test "$want_warnings" = "yes"; then
dnl this is a set of options we believe *ALL* gcc versions support:
@ -301,6 +465,7 @@ dnl CURL_PROCESS_DEBUG_BUILD_OPTS
dnl -------------------------------------------------
dnl Settings which depend on configure's debug given
dnl option, and further configure the build process.
dnl Don't use this macro for compiler dependant stuff.
AC_DEFUN([CURL_PROCESS_DEBUG_BUILD_OPTS], [
AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
@ -313,4 +478,76 @@ AC_DEFUN([CURL_PROCESS_DEBUG_BUILD_OPTS], [
])
dnl CURL_CHECK_PROG_CC
dnl -------------------------------------------------
dnl Check for compiler program, preventing CFLAGS and
dnl CPPFLAGS from being unexpectedly changed.
AC_DEFUN([CURL_CHECK_PROG_CC], [
ac_save_CFLAGS="$CFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
AC_PROG_CC
CFLAGS="$ac_save_CFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS"
])
dnl CURL_VAR_MATCH (VARNAME, VALUE)
dnl -------------------------------------------------
dnl Verifies if shell variable VARNAME contains VALUE.
dnl Contents of variable VARNAME and VALUE are handled
dnl as whitespace separated lists of words. If at least
dnl one word of VALUE is present in VARNAME the match
dnl is considered positive, otherwise false.
AC_DEFUN([CURL_VAR_MATCH], [
ac_var_match_word="no"
for word1 in "${[$1]}"; do
for word2 in "[$2]"; do
if test "$word1" = "$word2"; then
ac_var_match_word="yes"
fi
done
done
])
dnl CURL_VAR_MATCH_IFELSE (VARNAME, VALUE,
dnl [ACTION-IF-MATCH], [ACTION-IF-NOT-MATCH])
dnl -------------------------------------------------
dnl This performs a CURL_VAR_MATCH check and executes
dnl first branch if the match is positive, otherwise
dnl the second branch is executed.
AC_DEFUN([CURL_VAR_MATCH_IFELSE], [
CURL_VAR_MATCH([$1],[$2])
if test "$ac_var_match_word" = "yes"; then
ifelse($3,,:,[$3])
ifelse($4,,,[else
[$4]])
fi
])
dnl CURL_VAR_STRIP (VARNAME, VALUE)
dnl -------------------------------------------------
dnl Contents of variable VARNAME and VALUE are handled
dnl as whitespace separated lists of words. Each word
dnl from VALUE is removed from VARNAME when present.
AC_DEFUN([CURL_VAR_STRIP], [
ac_var_stripped=""
for word1 in "${[$1]}"; do
ac_var_strip_word="no"
for word2 in "[$2]"; do
if test "$word1" = "$word2"; then
ac_var_strip_word="yes"
fi
done
if test "$ac_var_strip_word" = "no"; then
ac_var_stripped="$ac_var_stripped $word1"
fi
done
dnl squeeze whitespace out of result
[$1]=`eval echo $[$1]`
])

View File

@ -22,7 +22,7 @@
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
# serial 2
# serial 3
dnl CURL_CHECK_OPTION_DEBUG
@ -33,12 +33,12 @@ dnl variable want_debug value as appropriate.
AC_DEFUN([CURL_CHECK_OPTION_DEBUG], [
AC_BEFORE([$0],[CURL_CHECK_OPTION_WARNINGS])dnl
AC_BEFORE([$0],[AC_PROG_CC])dnl
AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
AC_MSG_CHECKING([whether to enable debug build options])
OPT_DEBUG_BUILD="default"
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug],[Enable debug build options])
AC_HELP_STRING([--disable-debug],[Disable debug build options]),
AC_HELP_STRING([--enable-debug],[Enable debug build options])
AC_HELP_STRING([--disable-debug],[Disable debug build options]),
OPT_DEBUG_BUILD=$enableval)
case "$OPT_DEBUG_BUILD" in
no)
@ -58,20 +58,76 @@ AC_DEFUN([CURL_CHECK_OPTION_DEBUG], [
])
dnl CURL_CHECK_OPTION_OPTIMIZE
dnl -------------------------------------------------
dnl Verify if configure has been invoked with option
dnl --enable-optimize or --disable-optimize, and set
dnl shell variable want_optimize value as appropriate.
AC_DEFUN([CURL_CHECK_OPTION_OPTIMIZE], [
AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
AC_MSG_CHECKING([whether to enable compiler optimizer])
OPT_COMPILER_OPTIMIZE="default"
AC_ARG_ENABLE(optimize,
AC_HELP_STRING([--enable-optimize],[Enable compiler optimizations])
AC_HELP_STRING([--disable-optimize],[Disable compiler optimizations]),
OPT_COMPILER_OPTIMIZE=$enableval)
case "$OPT_COMPILER_OPTIMIZE" in
no)
dnl --disable-optimize option used. We will handle this as
dnl a request to disable compiler optimizations if possible.
dnl If the compiler is known CFLAGS and CPPFLAGS will be
dnl overridden, otherwise this can not be honored.
want_optimize="no"
AC_MSG_RESULT([no])
;;
default)
dnl configure's optimize option not specified. Initially we will
dnl handle this as a a request contrary to configure's setting
dnl for --enable-debug. IOW, initially, for debug-enabled builds
dnl this will be handled as a request to disable optimizations if
dnl possible, and for debug-disabled builds this will be handled
dnl initially as a request to enable optimizations if possible.
dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do
dnl not have any optimizer flag the request will be honored, in
dnl any other case the request can not be honored.
dnl IOW, existing optimizer flags defined in CFLAGS or CPPFLAGS
dnl will always take precedence over any initial assumption.
if test "$want_debug" = "yes"; then
want_optimize="assume_no"
AC_MSG_RESULT([not specified (assuming no)])
else
want_optimize="assume_yes"
AC_MSG_RESULT([not specified (assuming yes)])
fi
;;
*)
dnl --enable-optimize option used. We will handle this as
dnl a request to enable compiler optimizations if possible.
dnl If the compiler is known CFLAGS and CPPFLAGS will be
dnl overridden, otherwise this can not be honored.
want_optimize="yes"
AC_MSG_RESULT([yes])
;;
esac
])
dnl CURL_CHECK_OPTION_WARNINGS
dnl -------------------------------------------------
dnl Verify if configure has been invoked with option
dnl --enable-warnings or --disable-warnings, and set
DNL shell variable want_warnings as appropriate.
dnl shell variable want_warnings as appropriate.
AC_DEFUN([CURL_CHECK_OPTION_WARNINGS], [
AC_REQUIRE([CURL_CHECK_OPTION_DEBUG])dnl
AC_BEFORE([$0],[AC_PROG_CC])dnl
AC_BEFORE([$0],[CURL_CHECK_PROG_CC])dnl
AC_MSG_CHECKING([whether to enable strict compiler warnings])
OPT_COMPILER_WARNINGS="default"
AC_ARG_ENABLE(warnings,
AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
AC_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
AC_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
OPT_COMPILER_WARNINGS=$enableval)
case "$OPT_COMPILER_WARNINGS" in
no)